diff options
author | morkt <> | 2015-02-14 07:46:45 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2015-02-14 07:46:45 +0100 |
commit | 3d5a72a7325e1edf839c8bb8c5983651dbe329d7 (patch) | |
tree | ced60503fdd5283daf56ce4b7206ba92523f791b /lib | |
parent | e311da013d5ece918723de43916a9ce91a0f6fd1 (diff) |
Revamp staff alias editing interface + fix reverting removed aliasses
The new alias editing interface makes it a lot easier to change the
primary name.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VNDB/DB/Staff.pm | 13 | ||||
-rw-r--r-- | lib/VNDB/Handler/Staff.pm | 52 |
2 files changed, 35 insertions, 30 deletions
diff --git a/lib/VNDB/DB/Staff.pm b/lib/VNDB/DB/Staff.pm index b22b9538..a8b85b8c 100644 --- a/lib/VNDB/DB/Staff.pm +++ b/lib/VNDB/DB/Staff.pm @@ -5,7 +5,7 @@ use strict; use warnings; use Exporter 'import'; -our @EXPORT = qw|dbStaffGet dbStaffRevisionInsert|; +our @EXPORT = qw|dbStaffGet dbStaffRevisionInsert dbStaffAliasIds|; # options: results, page, id, aid, search, rev, truename, role, gender # what: extended changes roles aliases @@ -148,4 +148,15 @@ sub dbStaffRevisionInsert { } } + +# returns alias IDs that are and were related to the given staff ID +sub dbStaffAliasIds { + my($self, $sid) = @_; + return $self->dbAll(q| + SELECT DISTINCT sa.id + FROM staff_alias sa + JOIN staff_rev sr ON sr.id = sa.rid + WHERE sr.sid = ?|, $sid); +} + 1; diff --git a/lib/VNDB/Handler/Staff.pm b/lib/VNDB/Handler/Staff.pm index 560a6e09..b697af53 100644 --- a/lib/VNDB/Handler/Staff.pm +++ b/lib/VNDB/Handler/Staff.pm @@ -209,6 +209,7 @@ sub edit { my %b4 = !$sid ? () : ( (map { $_ => $s->{$_} } qw|name original gender lang desc l_wp l_site l_twitter l_anidb ihid ilock|), + primary => $s->{aid}, aliases => jsonEncode [ map +{ aid => $_->{id}, name => $_->{name}, orig => $_->{original} }, sort { $a->{name} cmp $b->{name} } @{$s->{aliases}} @@ -221,6 +222,7 @@ sub edit { $frm = $self->formValidate ( { post => 'name', maxlength => 200 }, { post => 'original', required => 0, maxlength => 200, default => '' }, + { post => 'primary', required => 0, template => 'int', default => 0 }, { post => 'desc', required => 0, maxlength => 5000, default => '' }, { post => 'gender', required => 0, default => 'unknown', enum => [qw|unknown m f|] }, { post => 'lang', enum => $self->{languages} }, @@ -239,7 +241,9 @@ sub edit { my $raw_a = eval { jsonDecode $frm->{aliases} }; push @{$frm->{_err}}, [ 'aliases', 'template', 'json' ] if $@ || ref $raw_a ne 'ARRAY'; if(!$frm->{_err}) { - my %old_aliases = $sid ? ( map +($_->{id} => 1), @{$s->{aliases}} ) : (); + my %old_aliases = $sid ? ( map +($_->{id} => 1), @{$self->dbStaffAliasIds($sid)} ) : (); + $frm->{primary} = 0 unless exists $old_aliases{$frm->{primary}}; + for my $a (sort { $a->{name} cmp $b->{name} } @$raw_a) { # check for empty aliases if($a->{name} =~ /^\s*$/) { @@ -257,7 +261,7 @@ sub edit { $frm->{aliases} = jsonEncode \@aliases; $frm->{ihid} = $frm->{ihid} ?1:0; $frm->{ilock} = $frm->{ilock}?1:0; - $frm->{aid} = $s->{aid} if $sid; + $frm->{aid} = $frm->{primary} if $sid; $frm->{desc} = $self->bbSubstLinks($frm->{desc}); return $self->resRedirect("/s$sid", 'post') @@ -279,9 +283,23 @@ sub edit { $self->htmlEditMessage('s', $s, $title); $self->htmlForm({ frm => $frm, action => $s ? "/s$sid/edit" : '/s/new', editsum => 1 }, staffe_geninfo => [ mt('_staffe_form_generalinfo'), - [ input => name => mt('_staffe_form_name'), short => 'name' ], - [ input => name => mt('_staffe_form_original'), short => 'original' ], - [ static => content => mt('_staffe_form_original_note') ], + [ hidden => short => 'name' ], + [ hidden => short => 'original' ], + [ hidden => short => 'primary' ], + [ hidden => short => 'aliases' ], + [ static => label => mt('_staffe_form_names'), content => sub { + table id => 'names'; + thead; Tr; + td class => 'tc_id'; end; + td class => 'tc_name', mt '_staffe_form_name'; + td class => 'tc_original', mt '_staffe_form_original'; td; end; + end; end; + tbody id => 'alias_tbl'; + # filled with javascript + end; + end; + }], + [ static => content => '<br />' ], [ text => name => mt('_staffe_form_note').'<br /><b class="standout">'.mt('_inenglish').'</b>', short => 'desc', rows => 4 ], [ select => name => mt('_staffe_form_gender'),short => 'gender', options => [ map [ $_, mt("_gender_$_") ], qw(unknown m f) ] ], @@ -292,30 +310,6 @@ sub edit { [ input => name => mt('_staffe_form_twitter'), short => 'l_twitter' ], [ input => name => mt('_staffe_form_anidb'), short => 'l_anidb' ], [ static => content => '<br />' ], - ], - - staffe_aliases => [ mt('_staffe_aliases'), - [ hidden => short => 'aliases' ], - [ static => nolabel => 1, content => sub { - table; - thead; Tr; - td class => 'tc_name', mt '_staffe_form_alias'; - td class => 'tc_original', mt '_staffe_form_original_alias'; td; end; - end; end; - tbody id => 'alias_tbl'; - # filled with javascript - end; - end; - h2 mt '_staffe_aliases_add'; - table; Tr id => 'alias_new'; - td class => 'tc_name'; - input id => 'alias_name', type => 'text', class => 'text'; end; - td class => 'tc_original'; - input id => 'alias_original', type => 'text', class => 'text'; end; - td class => 'tc_add'; - a href => '#', mt '_js_add'; end; - end; end; - }], ]); $self->htmlFooter; |