diff options
author | morkt <> | 2015-02-02 09:14:23 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2015-02-02 09:14:23 +0100 |
commit | c66ed1d451c1aa8cb7f136df296d28d80b1b2bfa (patch) | |
tree | edfb39ece319f9783b6b9b294b1b64066f0245c5 /lib | |
parent | f1156c6369ee9f22183951c1531972ac99fec52c (diff) |
Add filters to staff browsers + minor layout fix on staff pages
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VNDB/DB/Staff.pm | 20 | ||||
-rw-r--r-- | lib/VNDB/Handler/Staff.pm | 35 | ||||
-rw-r--r-- | lib/VNDB/Util/Misc.pm | 3 |
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>▸</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); |