diff options
author | Yorhel <git@yorhel.nl> | 2011-02-20 09:03:45 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2011-02-20 09:03:45 +0100 |
commit | 4884cca9ac061d2ccce87a1d6d912efc3cc04fab (patch) | |
tree | adb2a2fc60a8c738b1981e3056deaa9ae9fa1a45 /lib/VNDB/Handler/Traits.pm | |
parent | 61282da656bc1a30ed697410906e9c256e38363c (diff) |
chardb: Added "group" property to traits
It's more like a cache, and has some unintuitive problems when a trait
is applied to multiple top-level traits. But this'll do the trick
anyway.
Diffstat (limited to 'lib/VNDB/Handler/Traits.pm')
-rw-r--r-- | lib/VNDB/Handler/Traits.pm | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/lib/VNDB/Handler/Traits.pm b/lib/VNDB/Handler/Traits.pm index da5928bc..6beaab94 100644 --- a/lib/VNDB/Handler/Traits.pm +++ b/lib/VNDB/Handler/Traits.pm @@ -81,7 +81,7 @@ sub traitedit { if($act && $act eq 'add') { $par = $self->dbTraitGet(id => $trait)->[0]; return $self->resNotFound if !$par; - $frm->{parents} = $par->{name}; + $frm->{parents} = $par->{id}; $trait = undef; } @@ -101,10 +101,12 @@ sub traitedit { { post => 'parents', required => !$self->authCan('tagmod'), default => '', regex => [ qr/^(?:$|(?:[1-9]\d*)(?: +[1-9]\d*)*)$/, 'Parent traits must be a space-separated list of trait IDs' ] }, ); my @parents = split /[\t ]+/, $frm->{parents}; + my $group = undef; if(!$frm->{_err}) { for(@parents) { my $c = $self->dbTraitGet(id => $_); push @{$frm->{_err}}, [ 'parents', 'func', [ 0, mt '_tagedit_err_notfound', $_ ]] if !@$c; + $group //= $c->[0]{group}||$c->[0]{id} if @$c; } } @@ -117,11 +119,13 @@ sub traitedit { meta => $frm->{meta}?1:0, alias => $frm->{alias}, parents => \@parents, + group => $group, ); if(!$trait) { $trait = $self->dbTraitAdd(%opts); } else { $self->dbTraitEdit($trait, %opts, upddate => $frm->{state} == 2 && $t->{state} != 2) if $trait; + _set_childs_group($self, $trait, $group||$trait) if ($group||0) != ($t->{group}); } $self->resRedirect("/i$trait", 'post'); return; @@ -167,6 +171,22 @@ sub traitedit { $self->htmlFooter; } +# recursively edit all child traits and set the group field +sub _set_childs_group { + my($self, $trait, $group) = @_; + my %done; + + my $e; + $e = sub { + my $l = shift; + for (@$l) { + $self->dbTraitEdit($_->{id}, group => $group) if !$done{$_->{id}}++; + $e->($_->{sub}) if $_->{sub}; + } + }; + $e->($self->dbTraitTree($trait, 25)); +} + sub traitlist { my $self = shift; @@ -222,6 +242,9 @@ sub traitlist { Tr $n % 2 ? (class => 'odd') : (); td class => 'tc1', $self->{l10n}->age($l->{added}); td class => 'tc3'; + if($l->{group}) { + b class => 'grayedout', $l->{groupname}.' / '; + } a href => "/i$l->{id}", $l->{name}; if($f->{t} == -1) { b class => 'grayedout', ' '.mt '_traitb_note_awaiting' if $l->{state} == 0; @@ -264,6 +287,7 @@ sub traitindex { li; txt $self->{l10n}->age($_->{added}); txt ' '; + b class => 'grayedout', $_->{groupname}.' / ' if $_->{group}; a href => "/i$_->{id}", $_->{name}; end; } @@ -286,6 +310,7 @@ sub traitindex { li; txt $self->{l10n}->age($_->{added}); txt ' '; + b class => 'grayedout', $_->{groupname}.' / ' if $_->{group}; a href => "/i$_->{id}", $_->{name}; end; } |