diff options
author | morkt <> | 2014-12-28 12:44:24 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2014-12-28 12:44:24 +0100 |
commit | 30acfccc74971acaf0addd521cf24bbb5221618b (patch) | |
tree | 1679224554d2e785f7504ba1f570821941985709 /lib | |
parent | 6399d6d4e21bd4464c7224f821d6ea071ea7a614 (diff) |
staff: Import cast from other VN + some styling + more improvements
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VNDB/DB/Chars.pm | 5 | ||||
-rw-r--r-- | lib/VNDB/DB/Staff.pm | 1 | ||||
-rw-r--r-- | lib/VNDB/DB/VN.pm | 17 | ||||
-rw-r--r-- | lib/VNDB/Handler/Staff.pm | 109 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNEdit.pm | 15 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNPage.pm | 17 |
6 files changed, 99 insertions, 65 deletions
diff --git a/lib/VNDB/DB/Chars.pm b/lib/VNDB/DB/Chars.pm index a7dfb692..50923941 100644 --- a/lib/VNDB/DB/Chars.pm +++ b/lib/VNDB/DB/Chars.pm @@ -111,12 +111,11 @@ sub dbCharGet { if($o{what} =~ /seiyuu/) { push @{$r{ delete $_->{cid} }{seiyuu}}, $_ for (@{$self->dbAll(q| - SELECT cr.id AS cid, sr.sid, sa.name, sa.original, vs.note, v.id AS vid, vr.title AS vntitle + SELECT cr.id AS cid, s.id AS sid, sa.name, sa.original, vs.note, v.id AS vid, vr.title AS vntitle FROM vn_seiyuu vs JOIN chars_rev cr ON cr.cid = vs.cid JOIN staff_alias sa ON sa.id = vs.aid - JOIN staff_rev sr ON sr.id = sa.rid - JOIN staff s ON sr.id = s.latest + JOIN staff s ON sa.rid = s.latest JOIN vn_rev vr ON vr.id = vs.vid JOIN vn v ON v.latest = vs.vid !W diff --git a/lib/VNDB/DB/Staff.pm b/lib/VNDB/DB/Staff.pm index 1c9438a0..798200f6 100644 --- a/lib/VNDB/DB/Staff.pm +++ b/lib/VNDB/DB/Staff.pm @@ -76,6 +76,7 @@ sub dbStaffGet { JOIN vn_rev vr ON vr.id = vs.vid JOIN vn v ON v.latest = vr.id JOIN chars_rev cr ON cr.cid = vs.cid + JOIN chars c ON c.latest = cr.id JOIN staff_alias sa ON vs.aid = sa.id WHERE sa.rid IN(!l) ORDER BY v.c_released ASC, vr.title ASC|, [ keys %r ] diff --git a/lib/VNDB/DB/VN.pm b/lib/VNDB/DB/VN.pm index 97fc3086..edb55377 100644 --- a/lib/VNDB/DB/VN.pm +++ b/lib/VNDB/DB/VN.pm @@ -7,7 +7,7 @@ use Exporter 'import'; use VNDB::Func 'gtintype', 'normalize_query'; use Encode 'decode_utf8'; -our @EXPORT = qw|dbVNGet dbVNRevisionInsert dbVNImageId dbScreenshotAdd dbScreenshotGet dbScreenshotRandom dbVNHasChar dbVNHasStaff|; +our @EXPORT = qw|dbVNGet dbVNRevisionInsert dbVNImageId dbScreenshotAdd dbScreenshotGet dbScreenshotRandom dbVNHasChar dbVNHasStaff dbVNImportSeiyuu|; # Options: id, rev, char, search, length, lang, olang, plat, tag_inc, tag_exc, tagspoil, @@ -342,5 +342,20 @@ sub dbVNHasStaff { } +# returns seiyuus that voice characters referenced by $cids in VNs other than $vid +sub dbVNImportSeiyuu { + my($self, $vid, $cids) = @_; + return $self->dbAll(q| + SELECT DISTINCT ON(cr.cid) cr.cid, cr.name AS c_name, s.id AS sid, sa.id AS aid, sa.name + FROM vn_seiyuu vs + JOIN vn v ON v.latest = vs.vid + JOIN chars c ON c.id = vs.cid + JOIN chars_rev cr ON cr.id = c.latest + JOIN staff_alias sa ON sa.id = vs.aid + JOIN staff s ON sa.rid = s.latest + WHERE vs.cid IN(!l) AND v.id <> ?|, $cids, $vid); +} + + 1; diff --git a/lib/VNDB/Handler/Staff.pm b/lib/VNDB/Handler/Staff.pm index 45aaa574..06905251 100644 --- a/lib/VNDB/Handler/Staff.pm +++ b/lib/VNDB/Handler/Staff.pm @@ -48,13 +48,13 @@ sub page { ); } - div class => 'mainbox'; + div class => 'mainbox staffpage'; $self->htmlItemMessage('s', $s); div class => 'staffinfo'; h1 $s->{name}; h2 class => 'alttitle'; + span style => 'margin-right: 10px', $s->{original} if $s->{original}; cssicon "gen $s->{gender}", mt "_gender_$s->{gender}" if $s->{gender} ne 'unknown'; - txt $s->{original} if $s->{original}; end; # info table @@ -102,61 +102,62 @@ sub page { end; } - if (@{$s->{roles}} || @{$s->{cast}}) { - div class => 'staffroles'; - if (@{$s->{roles}}) { - table class => 'stripe'; - thead; - Tr; - td class => 'tc1', mt '_staff_col_role'; - td class => 'tc2', mt '_staff_col_title'; - td class => 'tc3', mt '_staff_col_released'; - td class => 'tc4', mt '_staff_col_note'; - end; + div class => 'staffroles'; + if (@{$s->{roles}}) { + h2 mt '_staff_credits'; + table class => 'stripe'; + thead; + Tr; + td class => 'tc1', mt '_staff_col_role'; + td class => 'tc2', mt '_staff_col_title'; + td class => 'tc3', mt '_staff_col_released'; + td class => 'tc4', mt '_staff_col_note'; end; - tbody; - foreach my $r (@{$s->{roles}}) { - Tr; - td class => 'tc1', mt '_credit_'.$r->{role}; - td class => 'tc2'; a href => "/v$r->{vid}", title => $r->{t_original}, $r->{title}; end; - td class => 'tc3'; lit $self->{l10n}->datestr($r->{c_released}); end; - td class => 'tc4'; - lit '('.mt('_staff_as', $r->{name}).') ' if $r->{name} ne $s->{name}; - lit $r->{note}; - end; + end; + tbody; + foreach my $r (@{$s->{roles}}) { + Tr; + td class => 'tc1', mt '_credit_'.$r->{role}; + td class => 'tc2'; a href => "/v$r->{vid}", title => $r->{t_original}, $r->{title}; end; + td class => 'tc3'; lit $self->{l10n}->datestr($r->{c_released}); end; + td class => 'tc4'; + txt '('.mt('_staff_as', $r->{name}).') ' if $r->{name} ne $s->{name}; + txt $r->{note}; end; - } - end; + end; + } end; - } - if (@{$s->{cast}}) { - table class => 'stripe'; - thead; - Tr; - td class => 'tc1', mt '_staff_col_cast'; - td class => 'tc2', mt '_staff_col_title'; - td class => 'tc3', mt '_staff_col_released'; - td class => 'tc4', mt '_staff_col_note'; - end; + end; + br; + } + if (@{$s->{cast}}) { + h2 mt '_staff_voiced'; + table class => 'stripe'; + thead; + Tr; + td class => 'tc1', mt '_staff_col_cast'; + td class => 'tc2', mt '_staff_col_title'; + td class => 'tc3', mt '_staff_col_released'; + td class => 'tc4', mt '_staff_col_note'; end; - tbody; - foreach my $r (@{$s->{cast}}) { - Tr; - td class => 'tc1'; a href => "/c$r->{cid}", $r->{c_name}; end; - td class => 'tc2'; a href => "/v$r->{vid}", title => $r->{t_original}, $r->{title}; end; - td class => 'tc3'; lit $self->{l10n}->datestr($r->{c_released}); end; - td class => 'tc4'; - lit '('.mt('_staff_as', $r->{name}).') ' if $r->{name} ne $s->{name}; - lit $r->{note}; - end; + end; + tbody; + foreach my $r (@{$s->{cast}}) { + Tr; + td class => 'tc1'; a href => "/c$r->{cid}", title => $r->{c_original}, $r->{c_name}; end; + td class => 'tc2'; a href => "/v$r->{vid}", title => $r->{t_original}, $r->{title}; end; + td class => 'tc3'; lit $self->{l10n}->datestr($r->{c_released}); end; + td class => 'tc4'; + txt '('.mt('_staff_as', $r->{name}).') ' if $r->{name} ne $s->{name}; + txt $r->{note}; end; - } - end; + end; + } end; - } - end; - } - clearfloat; + end; + } + end; + clearfloat; end; $self->htmlFooter; @@ -222,7 +223,7 @@ sub edit { $self->htmlHeader(title => $title, noindex => 1); $self->htmlMainTabs('s', $s, 'edit') if $s; $self->htmlEditMessage('s', $s, $title); - $self->htmlForm({ frm => $frm, action => $s ? "/s$sid/edit" : '/s/new', editsum => 1, upload => 1 }, + $self->htmlForm({ frm => $frm, action => $s ? "/s$sid/edit" : '/s/new', editsum => 1 }, staffe_geninfo => [ mt('_staffe_form_generalinfo'), [ hidden => short => 'aid' ], [ input => name => mt('_staffe_form_name'), short => 'name' ], @@ -312,8 +313,8 @@ sub list { for ($perlist*$c..($perlist*($c+1))-1) { li; my $gender = $list->[$_]{gender}; - cssicon "gen $gender", mt "_gender_$gender" if $gender ne 'unknown'; -# cssicon 'lang '.$list->[$_]{lang}, mt "_lang_$list->[$_]{lang}"; +# cssicon "gen $gender", mt "_gender_$gender" if $gender ne 'unknown'; + cssicon 'lang '.$list->[$_]{lang}, mt "_lang_$list->[$_]{lang}"; a href => "/s$list->[$_]{id}", title => $list->[$_]{original}, $list->[$_]{name}; end; diff --git a/lib/VNDB/Handler/VNEdit.pm b/lib/VNDB/Handler/VNEdit.pm index bd98b941..963e8ce2 100644 --- a/lib/VNDB/Handler/VNEdit.pm +++ b/lib/VNDB/Handler/VNEdit.pm @@ -309,6 +309,21 @@ sub _form { $chars && @{$chars} ? (vn_cast => [ mt('_vnedit_cast'), [ hidden => short => 'seiyuu' ], [ static => nolabel => 1, content => sub { + my $import = $self->dbVNImportSeiyuu($v->{id}, [ map $_->{id}, @$chars ]); + if (@$import) { + script type => 'text/javascript'; + lit 'var vncImportData = ['; + lit join ',', map { + my $name = $_->{name}; + $name =~ s/["\\]/\\$&/g; # escape quotes in names + sprintf('{cid:%d,sid:%d,aid:%d,name:"%s"}', $_->{cid}, $_->{sid}, $_->{aid}, $name); + } @$import; + lit '];'; + end; + div id => 'cast_import'; + a href => '#', title => mt('_vnedit_cast_import_title'), mt '_vnedit_cast_import'; + end; + } table; tbody id => 'cast_tbl'; Tr id => 'cast_loading'; td colspan => '4', mt '_js_loading'; end; end; end; diff --git a/lib/VNDB/Handler/VNPage.pm b/lib/VNDB/Handler/VNPage.pm index 2c1563e1..ddf605f4 100644 --- a/lib/VNDB/Handler/VNPage.pm +++ b/lib/VNDB/Handler/VNPage.pm @@ -1099,8 +1099,9 @@ sub _chars { sub _staff { my ($self, $v) = @_; - div class => 'mainbox'; - if(@{$v->{credits}}) { + if(@{$v->{credits}}) { + div class => 'mainbox staff'; + h1 mt '_vnpage_staff'; my $has_notes = grep { $_->{note} } @{$v->{credits}}; table class => 'stripe'; thead; @@ -1122,9 +1123,11 @@ sub _staff { $last_role = $s->{role}; } end 'table'; - br; - } - if(@{$v->{seiyuu}}) { + end; + } + if(@{$v->{seiyuu}}) { + div class => 'mainbox staff cast'; + h1 mt '_vnpage_cast'; my $has_notes = grep { $_->{note} } @{$v->{seiyuu}}; table class => 'stripe'; thead; @@ -1146,8 +1149,8 @@ sub _staff { end; } end 'table'; - } - end; + end; + } } |