summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormorkt <>2014-12-28 12:44:24 +0100
committerYorhel <git@yorhel.nl>2014-12-28 12:44:24 +0100
commit30acfccc74971acaf0addd521cf24bbb5221618b (patch)
tree1679224554d2e785f7504ba1f570821941985709 /lib
parent6399d6d4e21bd4464c7224f821d6ea071ea7a614 (diff)
staff: Import cast from other VN + some styling + more improvements
Diffstat (limited to 'lib')
-rw-r--r--lib/VNDB/DB/Chars.pm5
-rw-r--r--lib/VNDB/DB/Staff.pm1
-rw-r--r--lib/VNDB/DB/VN.pm17
-rw-r--r--lib/VNDB/Handler/Staff.pm109
-rw-r--r--lib/VNDB/Handler/VNEdit.pm15
-rw-r--r--lib/VNDB/Handler/VNPage.pm17
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;
+ }
}