diff options
author | Yorhel <git@yorhel.nl> | 2011-05-17 16:24:40 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2011-05-17 16:24:40 +0200 |
commit | 18e43c166feaaa8ae6b4183f1dd939cfcc3492f2 (patch) | |
tree | af5ed6fdd270ce6a49e69b720834c6a33fa6ad1c | |
parent | c07f9ab519afb936d4d346e73b129a0d34039361 (diff) |
Bugfix: Don't allow duplicate trait names/aliasses within the same group
This makes the denied trait listing useful again.
-rw-r--r-- | ChangeLog | 1 | ||||
-rw-r--r-- | data/lang.txt | 7 | ||||
-rw-r--r-- | lib/VNDB/DB/Traits.pm | 8 | ||||
-rw-r--r-- | lib/VNDB/Handler/Traits.pm | 8 | ||||
-rw-r--r-- | lib/VNDB/Util/FormHTML.pm | 7 |
5 files changed, 28 insertions, 3 deletions
@@ -6,6 +6,7 @@ - Bugfix: Properly make i+ IDs linkable in bb2html() - Bugfix: Make sure the user dropdown boxes work on /v+/chars - Bugfix: dbTraitGet() filtering would not always work correctly + - Bugfix: Don't allow duplicate trait names/aliasses within the same group 2.20 - 2011-05-01 - Added support for sponsored links on VN pages diff --git a/data/lang.txt b/data/lang.txt index f3171116..fb719ad5 100644 --- a/data/lang.txt +++ b/data/lang.txt @@ -8821,6 +8821,13 @@ cs : Tag [url,_1,_2] již existuje! hu : A(z) [url,_1,_2] címke már létezik! nl : Tag [url,_1,_2] bestaat al! +:_formerr_traitexists +en : Trait [url,_1,_2] already exists within the same group. +ru*: +cs*: +hu*: +nl : Kenmerk [url,_1,_2] bestaat al in dezelfde groep. + :_formerr_tpl_mail en : Invalid email address ru : Некорректный адрес электронной почты diff --git a/lib/VNDB/DB/Traits.pm b/lib/VNDB/DB/Traits.pm index 9be8ba76..45173f6e 100644 --- a/lib/VNDB/DB/Traits.pm +++ b/lib/VNDB/DB/Traits.pm @@ -13,7 +13,7 @@ use Exporter 'import'; our @EXPORT = qw|dbTraitGet dbTraitEdit dbTraitAdd|; -# Options: id what results page sort reverse +# Options: id noid search name state what results page sort reverse # what: parents childs(n) addedby # sort: id name name added items sub dbTraitGet { @@ -28,13 +28,17 @@ sub dbTraitGet { $o{search} =~ s/%//g if $o{search}; my %where = ( - $o{id} ? ('t.id IN(!l)' => [ ref($o{id}) ? $o{id} : [$o{id}] ]) : (), + $o{id} ? ( 't.id IN(!l)' => [ ref($o{id}) ? $o{id} : [$o{id}] ]) : (), + $o{group} ? ( 't.group = ?' => $o{group} ) : (), + $o{noid} ? ( 't.id <> ?' => $o{noid} ) : (), defined $o{state} && $o{state} != -1 ? ( 't.state = ?' => $o{state} ) : (), !defined $o{state} && !$o{id} && !$o{name} ? ( 't.state = 2' => 1 ) : (), $o{search} ? ( '(t.name ILIKE ? OR t.alias ILIKE ?)' => [ "%$o{search}%", "%$o{search}%" ] ) : (), + $o{name} ? ( # TODO: This is terribly ugly, use an aliases table. + q{(LOWER(t.name) = LOWER(?) OR t.alias ~ ('(!sin)^'||?||'$'))} => [ $o{name}, '?', quotemeta $o{name} ] ) : (), ); my @select = ( diff --git a/lib/VNDB/Handler/Traits.pm b/lib/VNDB/Handler/Traits.pm index ea599ed1..43b83090 100644 --- a/lib/VNDB/Handler/Traits.pm +++ b/lib/VNDB/Handler/Traits.pm @@ -151,6 +151,14 @@ sub traitedit { $group //= $c->[0]{group}||$c->[0]{id} if @$c; } } + if(!$frm->{_err}) { + my $c = $self->dbTraitGet(name => $frm->{name}, noid => $trait, group => $group); + push @{$frm->{_err}}, [ 'name', 'traitexists', $c->[0] ] if @$c; + for (split /[\t\s]*\n[\t\s]*/, $frm->{alias}) { + $c = $self->dbTraitGet(name => $_, noid => $trait, group => $group); + push @{$frm->{_err}}, [ 'alias', 'traitexists', $c->[0] ] if @$c; + } + } if(!$frm->{_err}) { $frm->{state} = $frm->{meta} = 0 if !$self->authCan('tagmod'); diff --git a/lib/VNDB/Util/FormHTML.pm b/lib/VNDB/Util/FormHTML.pm index 805467f6..21eeb980 100644 --- a/lib/VNDB/Util/FormHTML.pm +++ b/lib/VNDB/Util/FormHTML.pm @@ -36,9 +36,14 @@ sub htmlFormError { li mt '_formerr_maxlength', $field, $rule if $type eq 'maxlength'; li mt '_formerr_enum', $field, join ', ', @$rule if $type eq 'enum'; li mt '_formerr_wrongboard', $rule if $type eq 'wrongboard'; - li mt '_formerr_tagexists', "/g$rule->{id}", $rule->{name} if $type eq 'tagexists'; li $rule->[1] if $type eq 'func' || $type eq 'regex'; li mt "_formerr_tpl_$rule", $field if $type eq 'template'; + if($type eq 'tagexists') { + li; lit mt '_formerr_tagexists', "/g$rule->{id}", $rule->{name}; end; + } + if($type eq 'traitexists') { + li; lit mt '_formerr_traitexists', "/i$rule->{id}", $rule->{name}; end; + } } end; end 'div'; |