summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--data/lang.txt7
-rw-r--r--lib/VNDB/DB/Traits.pm8
-rw-r--r--lib/VNDB/Handler/Traits.pm8
-rw-r--r--lib/VNDB/Util/FormHTML.pm7
5 files changed, 28 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 3d245d12..3df2a256 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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';