summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormorkt <>2015-02-02 09:14:23 +0100
committerYorhel <git@yorhel.nl>2015-02-02 09:14:23 +0100
commitc66ed1d451c1aa8cb7f136df296d28d80b1b2bfa (patch)
treeedfb39ece319f9783b6b9b294b1b64066f0245c5 /lib
parentf1156c6369ee9f22183951c1531972ac99fec52c (diff)
Add filters to staff browsers + minor layout fix on staff pages
Diffstat (limited to 'lib')
-rw-r--r--lib/VNDB/DB/Staff.pm20
-rw-r--r--lib/VNDB/Handler/Staff.pm35
-rw-r--r--lib/VNDB/Util/Misc.pm3
3 files changed, 43 insertions, 15 deletions
diff --git a/lib/VNDB/DB/Staff.pm b/lib/VNDB/DB/Staff.pm
index a1728106..c8af54b3 100644
--- a/lib/VNDB/DB/Staff.pm
+++ b/lib/VNDB/DB/Staff.pm
@@ -7,7 +7,7 @@ use Exporter 'import';
our @EXPORT = qw|dbStaffGet dbStaffRevisionInsert|;
-# options: results, page, id, aid, search, rev
+# options: results, page, id, aid, search, rev, truename, role, gender
# what: extended changes roles aliases
sub dbStaffGet {
my $self = shift;
@@ -17,6 +17,16 @@ sub dbStaffGet {
what => '',
@_
);
+ my(@roles, $seiyuu);
+ if(defined $o{role}) {
+ if(ref $o{role}) {
+ $seiyuu = grep /^seiyuu$/, @{$o{role}};
+ @roles = grep !/^seiyuu$/, @{$o{role}};
+ } else {
+ $seiyuu = $o{role} eq 'seiyuu';
+ @roles = $o{role} unless $seiyuu;
+ }
+ }
$o{search} =~ s/%//g if $o{search};
@@ -24,6 +34,14 @@ sub dbStaffGet {
!$o{id} && !$o{rev} ? ( 's.hidden = FALSE' => 1 ) : (),
$o{id} ? ( ref $o{id} ? ('s.id IN(!l)' => [$o{id}]) : ('s.id = ?' => $o{id}) ) : (),
$o{aid} ? ( ref $o{aid} ? ('sa.id IN(!l)' => [$o{aid}]) : ('sa.id = ?' => $o{aid}) ) : (),
+ $o{truename} ? ( 'sr.aid = sa.id' => 1 ) : (),
+ defined $o{gender} ? ( 'sr.gender IN(!l)' => [ ref $o{gender} ? $o{gender} : [$o{gender}] ]) : (),
+ defined $o{role} ? (
+ '('.join(' OR ',
+ @roles ? ( 'EXISTS(SELECT 1 FROM vn_staff vs WHERE vs.aid = sa.id AND vs.role IN(!l))' ) : (),
+ $seiyuu ? ( 'EXISTS(SELECT 1 FROM vn_seiyuu vsy WHERE vsy.aid = sa.id)' ) : ()
+ ).')' => ( @roles ? [ \@roles ] : 1 ),
+ ) : (),
$o{search} ?
$o{search} =~ /[\x{3000}-\x{9fff}\x{ff00}-\x{ff9f}]/ ?
# match against 'original' column only if search string contains any
diff --git a/lib/VNDB/Handler/Staff.pm b/lib/VNDB/Handler/Staff.pm
index 8df20a84..e85bb388 100644
--- a/lib/VNDB/Handler/Staff.pm
+++ b/lib/VNDB/Handler/Staff.pm
@@ -3,7 +3,7 @@ package VNDB::Handler::Staff;
use strict;
use warnings;
-use TUWF qw(:html :xml xml_escape);
+use TUWF qw(:html :xml uri_escape xml_escape);
use VNDB::Func;
use List::Util qw(first);
@@ -138,7 +138,7 @@ sub page {
Tr;
if($last_vid != $r->{vid}) {
td class => 'tc2', $row_count > 1 ? (rowspan => $row_count) : ();
- a href => "/v$r->{vid}", title => $r->{t_original}||$r->{title}, shorten $r->{title}, 100;
+ a href => "/v$r->{vid}", title => $r->{t_original}||$r->{title}, shorten $r->{title}, 60;
end;
td class => 'tc3', $row_count > 1 ? (rowspan => $row_count) : ();
lit $self->{l10n}->datestr($r->{c_released});
@@ -174,7 +174,7 @@ sub page {
foreach my $r (@{$s->{cast}}) {
Tr;
td class => 'tc2';
- a href => "/v$r->{vid}", title => $r->{t_original}||$r->{title}, shorten $r->{title}, 100;
+ a href => "/v$r->{vid}", title => $r->{t_original}||$r->{title}, shorten $r->{title}, 60;
end;
td class => 'tc3'; lit $self->{l10n}->datestr($r->{c_released}); end;
td class => 'tc1'; a href => "/c$r->{cid}", title => $r->{c_original}, $r->{c_name}; end;
@@ -327,34 +327,43 @@ sub list {
my $f = $self->formValidate(
{ get => 'p', required => 0, default => 1, template => 'int' },
{ get => 'q', required => 0, default => '' },
+ { get => 'fil', required => 0, default => '' },
);
return $self->resNotFound if $f->{_err};
- my ($list, $np) = $self->dbStaffGet(
+ my ($list, $np) = $self->filFetchDB(staff => $f->{fil}, {}, {
$char ne 'all' ? ( char => $char ) : (),
$f->{q} ? ( search => $f->{q} ) : (),
results => 150,
page => $f->{p}
- );
+ });
return $self->resRedirect('/s'.$list->[0]{id}, 'temp')
- if $f->{q} && @$list == 1 && $f->{p} == 1;
+ if $f->{q} && @$list == 1 && $f->{p} == 1 && !$f->{fil};
+
+ my $quri = join(';', $f->{q} ? 'q='.uri_escape($f->{q}) : (), $f->{fil} ? "fil=$f->{fil}" : ());
+ $quri = '?'.$quri if $quri;
+ my $pageurl = "/s/$char$quri";
$self->htmlHeader(title => mt '_sbrowse_title');
- div class => 'mainbox';
+ form action => '/s/all', 'accept-charset' => 'UTF-8', method => 'get';
+ div class => 'mainbox';
h1 mt '_sbrowse_title';
- form action => '/s/all', 'accept-charset' => 'UTF-8', method => 'get';
- $self->htmlSearchBox('s', $f->{q});
- end;
+ $self->htmlSearchBox('s', $f->{q});
p class => 'browseopts';
for ('all', 'a'..'z', 0) {
- a href => "/s/$_", $_ eq $char ? (class => 'optselected') : (), $_ eq 'all' ? mt('_char_all') : $_ ? uc $_ : '#';
+ a href => "/s/$_$quri", $_ eq $char ? (class => 'optselected') : (), $_ eq 'all' ? mt('_char_all') : $_ ? uc $_ : '#';
}
end;
- end;
- my $pageurl = "/s/$char" . ($f->{q} ? "?q=$f->{q}" : '');
+ a id => 'filselect', href => '#s';
+ lit '<i>&#9656;</i> '.mt('_js_fil_filters').'<i></i>';
+ end;
+ input type => 'hidden', class => 'hidden', name => 'fil', id => 'fil', value => $f->{fil};
+ end;
+ end 'form';
+
$self->htmlBrowseNavigate($pageurl, $f->{p}, $np, 't');
div class => 'mainbox staffbrowse';
h1 mt $f->{q} ? '_sbrowse_searchres' : '_sbrowse_list';
diff --git a/lib/VNDB/Util/Misc.pm b/lib/VNDB/Util/Misc.pm
index 9917f7fc..3c3c5efe 100644
--- a/lib/VNDB/Util/Misc.pm
+++ b/lib/VNDB/Util/Misc.pm
@@ -14,6 +14,7 @@ my %filfields = (
vn => [qw|length hasani tag_inc tag_exc taginc tagexc tagspoil lang olang plat ul_notblack ul_onwish ul_voted ul_onlist|],
release => [qw|type patch freeware doujin date_before date_after released minage lang olang resolution plat med voiced ani_story ani_ero|],
char => [qw|gender bloodt bust_min bust_max waist_min waist_max hip_min hip_max height_min height_max weight_min weight_max trait_inc trait_exc tagspoil role|],
+ staff => [qw|gender role truename|],
);
@@ -31,7 +32,7 @@ sub filFetchDB {
my($self, $type, $overwrite, $pre, $post) = @_;
$pre = {} if !$pre;
$post = {} if !$post;
- my $dbfunc = $self->can($type eq 'vn' ? 'dbVNGet' : $type eq 'release' ? 'dbReleaseGet' : 'dbCharGet');
+ my $dbfunc = $self->can($type eq 'vn' ? 'dbVNGet' : $type eq 'release' ? 'dbReleaseGet' : $type eq 'char' ? 'dbCharGet' : 'dbStaffGet');
my $prefname = 'filter_'.$type;
my $pref = $self->authPref($prefname);