diff options
author | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-05-19 07:01:24 +0000 |
---|---|---|
committer | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-05-19 07:01:24 +0000 |
commit | 2ce770e7e5817f8838fdaf7bc7eda2a8da972962 (patch) | |
tree | 4aa6306599d38b6af01c8495d6731a838944602e /lib/VNDB | |
parent | 8b72b6535a553f8751842369a3abc0016d18611e (diff) |
Too many changes to keep track of. See ChangeLog. (I should commit more often -.-)
git-svn-id: svn://vndb.org/vndb@13 1fe2e327-d9db-4752-bcf7-ef0cb4a1748b
Diffstat (limited to 'lib/VNDB')
-rw-r--r-- | lib/VNDB/Releases.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/Util/DB.pm | 18 | ||||
-rw-r--r-- | lib/VNDB/VN.pm | 72 |
3 files changed, 56 insertions, 36 deletions
diff --git a/lib/VNDB/Releases.pm b/lib/VNDB/Releases.pm index 6f642cba..abf3a786 100644 --- a/lib/VNDB/Releases.pm +++ b/lib/VNDB/Releases.pm @@ -87,7 +87,7 @@ sub REdit { my $released = !$frm->{released}[0] ? 0 : $frm->{released}[0] == 9999 ? 99999999 : - sprintf '%04d%02d%02d', $frm->{released}[0]||0, $frm->{released}[1]||0, $frm->{released}[2]||0; + sprintf '%04d%02d%02d', $frm->{released}[0], $frm->{released}[1]||99, $frm->{released}[2]||99; my $media = [ map { /_/ ? [ split /_/ ] : [ $_, 0 ] } split /,/, $frm->{media} ]; my $producers = [ map { /^([0-9]+)/ ? $1 : () } split /\|\|\|/, $frm->{producers} ]; my $new_vn = [ map { /^([0-9]+)/ ? $1 : () } split /\|\|\|/, $frm->{vn} ]; diff --git a/lib/VNDB/Util/DB.pm b/lib/VNDB/Util/DB.pm index e5eba14f..a2b4a035 100644 --- a/lib/VNDB/Util/DB.pm +++ b/lib/VNDB/Util/DB.pm @@ -538,7 +538,7 @@ sub DBDelVNList { # uid, @vid # uid = 0 to delete all #-----------------------------------------------------------------------------# -sub DBGetVN { # %options->{ id rev char search order results page what cati cate lang } +sub DBGetVN { # %options->{ id rev char search order results page what cati cate lang platform } my $s = shift; my %o = ( page => 1, @@ -573,14 +573,10 @@ sub DBGetVN { # %options->{ id rev char search order results page what cati cate JOIN vn iv ON iv.latest = ivc.vid WHERE cat IN(!L) GROUP BY iv.id)| => $o{cate} ) : (), - $o{lang} && @{$o{lang}} ? ( q| - v.id IN(SELECT irv.vid - FROM releases_rev irr - JOIN releases ir ON irr.id = ir.latest - JOIN releases_vn irv ON irv.rid = irr.id - WHERE irr.language IN(!L) - AND irr.type <> 2 - AND irr.released <= TO_CHAR('today'::timestamp, 'YYYYMMDD')::integer)| => $o{lang} ) : (), + $o{lang} && @{$o{lang}} ? ( + '('.join(' OR ', map "v.c_languages ILIKE '%%$_%%'", @{$o{lang}}).')' => 1 ) : (), + $o{platform} && @{$o{platform}} ? ( + '('.join(' OR ', map "v.c_platforms ILIKE '%%$_%%'", @{$o{platform}}).')' => 1 ) : (), ); if($o{search}) { @@ -613,7 +609,7 @@ sub DBGetVN { # %options->{ id rev char search order results page what cati cate 'JOIN users u ON u.id = c.requester' ) : (), ); - my $sel = 'v.id, v.locked, v.hidden, v.c_released, v.c_languages, v.c_votes, vr.title, vr.id AS cid, v.rgraph'; + my $sel = 'v.id, v.locked, v.hidden, v.c_released, v.c_languages, v.c_votes, v.c_platforms, vr.title, vr.id AS cid, v.rgraph'; $sel .= ', vr.alias, vr.image AS image, vr.img_nsfw, vr.length, vr.desc, vr.l_wp, vr.l_cisv, vr.l_vnn' if $o{what} =~ /extended/; $sel .= ', c.added, c.requester, c.comments, v.latest, u.username, c.prev, c.causedby' if $o{what} =~ /changes/; @@ -909,7 +905,7 @@ sub DBGetRelease { # %options->{ id vid results page rev } )}); } if($o{what} =~ /platforms/) { - ($_->{platform}=~s/\s+//||1)&&push(@{$r->[$r{$_->{rid}}]{platforms}}, $_->{platform}) for (@{$s->DBAll(q| + push(@{$r->[$r{$_->{rid}}]{platforms}}, $_->{platform}) for (@{$s->DBAll(q| SELECT rid, platform FROM releases_platforms WHERE rid IN(!l)|, diff --git a/lib/VNDB/VN.pm b/lib/VNDB/VN.pm index 4732e278..fd46672c 100644 --- a/lib/VNDB/VN.pm +++ b/lib/VNDB/VN.pm @@ -92,7 +92,7 @@ sub VNEdit { { name => 'anime', required => 0, default => '' }, { name => 'img_nsfw', required => 0 }, { name => 'categories', required => 0, default => '' }, - { name => 'relations', required => 0, default => 0 }, + { name => 'relations', required => 0, default => '' }, { name => 'comm', required => 0, default => '' }, ); $frm->{img_nsfw} = $frm->{img_nsfw} ? 1 : 0; @@ -155,8 +155,8 @@ sub VNEdit { $self->VNUpdReverse(\%old, \%new, $id, $cid); } # also regenerate relation graph if the title changes - elsif($frm->{title} ne $b4{title}) { - $self->RunCmd('relraph '.$id); + elsif(@$relations && $frm->{title} ne $b4{title}) { + $self->RunCmd('relgraph '.$id); } # check for new anime data @@ -230,25 +230,49 @@ sub VNBrowse { my $f = $self->FormCheck( { name => 's', required => 0, default => 'title', enum => [ qw|title released votes| ] }, { name => 'o', required => 0, default => 'a', enum => [ 'a','d' ] }, - { name => 'i', required => 0, default => '' }, - { name => 'e', required => 0, default => '' }, - { name => 'l', required => 0, default => '' }, - { name => 'q', required => 0}, + { name => 'q', required => 0, default => '' }, + { name => 'sq', required => 0, default => '' }, { name => 'p', required => 0, template => 'int', default => 1}, ); - my($r, $np) = $chr ne 'cat' || $f->{e} || $f->{i} || $f->{l} ? ($self->DBGetVN( - $chr =~ /^[a-z0]$/ ? ( - char => $chr ) : (), - $chr eq 'search' && $f->{q} ? ( - search => $f->{q} ) : (), - page => $f->{p}, - $chr eq 'cat' ? ( - cati => [ split /,/, $f->{i} ], - cate => [ split /,/, $f->{e} ], - lang => [ grep { $VNDB::LANG->{$_} } split /,/, $f->{l} ], - ) : (), + $f->{q} ||= $f->{sq}; + + my(@cati, @cate, @plat, @lang); + my $q = $f->{q}; + if($chr eq 'search') { + # VNDBID + return $self->ResRedirect('/'.$1, 'temp') + if $q =~ /^([vrpud][0-9]+)$/; + + if(!($q =~ s/^title://)) { + # categories + my %catl = map { + my $ic = $_; + map { $ic.$_ => $VNDB::CAT->{$ic}[1]{$_} } keys %{$VNDB::CAT->{$ic}[1]} + } keys %$VNDB::CAT; + + $q =~ s/-(?:$catl{$_}|c:$_)//ig && push @cate, $_ for keys %catl; + $q =~ s/(?:$catl{$_}|c:$_)//ig && push @cati, $_ for keys %catl; + + # platforms + $_ ne 'oth' && $q =~ s/(?:$VNDB::PLAT->{$_}|p:$_)//ig && push @plat, $_ for keys %$VNDB::PLAT; + + # languages + $q =~ s/($VNDB::LANG->{$_}|l:$_)//ig && push @lang, $_ for keys %$VNDB::LANG; + } + } + $q =~ s/ +$//; + $q =~ s/^ +//; + + my($r, $np) = $chr ne 'search' || $q || @lang || @plat || @cati || @cate ? ($self->DBGetVN( + $chr =~ /^[a-z0]$/ ? ( char => $chr ) : (), + $q ? ( search => $q ) : (), + @cati ? ( cati => \@cati ) : (), + @cate ? ( cate => \@cate ) : (), + @lang ? ( lang => \@lang ) : (), + @plat ? ( platform => \@plat ) : (), results => 50, + page => $f->{p}, order => {title => 'vr.title', released => 'v.c_released', votes => 'v.c_votes' }->{$f->{s}}.{a=>' ASC',d=>' DESC'}->{$f->{o}}, )) : ([], 0); @@ -261,12 +285,13 @@ sub VNBrowse { npage => $np, page => $f->{p}, chr => $chr, - $chr eq 'cat' ? ( - incl => $f->{i}, - excl => $f->{e}, + $chr eq 'search' ? ( + incl => \@cati, + excl => \@cate, cat => $self->DBCategoryCount, - lang => $self->DBLanguageCount, - slang => $f->{l}, + langc => $self->DBLanguageCount, + lang => \@lang, + plat => \@plat, ) : (), order => [ $f->{s}, $f->{o} ], }, @@ -336,4 +361,3 @@ sub VNUpdReverse { # old, new, id, cid 1; - |