diff options
author | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-08-14 15:19:18 +0000 |
---|---|---|
committer | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-08-14 15:19:18 +0000 |
commit | 889e9b9c481170c94f0b5e773e7c39d27b921a43 (patch) | |
tree | 7515e85ee690916f7549fd27bd0a2879657d913b /lib/VNDB | |
parent | 99214c46848b3e4706552cfb87043861c1b5f140 (diff) |
Added screenshots (not entirely finished, still needs some tweaking and polishing)
git-svn-id: svn://vndb.org/vndb@83 1fe2e327-d9db-4752-bcf7-ef0cb4a1748b
Diffstat (limited to 'lib/VNDB')
-rw-r--r-- | lib/VNDB/Util/DB.pm | 23 | ||||
-rw-r--r-- | lib/VNDB/VN.pm | 57 |
2 files changed, 71 insertions, 9 deletions
diff --git a/lib/VNDB/Util/DB.pm b/lib/VNDB/Util/DB.pm index 34ca9ca0..a2f3efe3 100644 --- a/lib/VNDB/Util/DB.pm +++ b/lib/VNDB/Util/DB.pm @@ -782,11 +782,12 @@ sub DBGetVN { # %options->{ id rev char search order results page what cati cate ); $_->{c_released} = sprintf '%08d', $_->{c_released} for @$r; - if($o{what} =~ /(?:relations|categories|anime)/ && $#$r >= 0) { + if($o{what} =~ /(?:relations|categories|anime|screenshots)/ && $#$r >= 0) { my %r = map { $r->[$_]{relations} = []; $r->[$_]{categories} = []; $r->[$_]{anime} = []; + $r->[$_]{screenshots} = []; ($r->[$_]{cid}, $_) } 0..$#$r; @@ -809,6 +810,16 @@ sub DBGetVN { # %options->{ id rev char search order results page what cati cate )}); } + if($o{what} =~ /screenshots/) { + push(@{$r->[$r{$_->{vid}}]{screenshots}}, [ $_->{scr}, $_->{nsfw} ]) for (@{$s->DBAll(q| + SELECT vid, scr, nsfw + FROM vn_screenshots + WHERE vid IN(!l) + ORDER BY scr|, + [ keys %r ] + )}); + } + if($o{what} =~ /relations/) { my $rel = $s->DBAll(q| SELECT rel.vid1, rel.vid2, rel.relation, vr.title @@ -832,7 +843,7 @@ sub DBGetVN { # %options->{ id rev char search order results page what cati cate } -sub DBAddVN { # %options->{ columns in vn_rev + comm + relations + categories + anime } +sub DBAddVN { # %options->{ columns in vn_rev + comm + relations + categories + anime + screenshots } my($s, %o) = @_; my $id = $s->DBRow(q| @@ -854,7 +865,7 @@ sub DBAddVN { # %options->{ columns in vn_rev + comm + relations + categories + } -sub DBEditVN { # id, %options->( columns in vn_rev + comm + relations + categories + anime + uid + causedby } +sub DBEditVN { # id, %options->( columns in vn_rev + comm + relations + categories + anime + screenshots + uid + causedby } my($s, $vid, %o) = @_; my $c = $s->DBRow(q| @@ -892,6 +903,12 @@ sub _insert_vn_rev { ) for (@{$o->{categories}}); $s->DBExec(q| + INSERT INTO vn_screenshots (vid, scr, nsfw) + VALUES (%d, %d, %d)|, + $cid, $_->[0], $_->[1]?1:0 + ) for (@{$o->{screenshots}}); + + $s->DBExec(q| INSERT INTO vn_relations (vid1, vid2, relation) VALUES (%d, %d, %d)|, $cid, $_->[1], $_->[0] diff --git a/lib/VNDB/VN.pm b/lib/VNDB/VN.pm index 30ec94b1..a6e5e735 100644 --- a/lib/VNDB/VN.pm +++ b/lib/VNDB/VN.pm @@ -9,7 +9,7 @@ require bytes; use vars ('$VERSION', '@EXPORT'); $VERSION = $VNDB::VERSION; -@EXPORT = qw| VNPage VNEdit VNLock VNHide VNBrowse VNXML VNUpdReverse |; +@EXPORT = qw| VNPage VNEdit VNLock VNHide VNBrowse VNXML VNScrXML VNUpdReverse |; sub VNPage { @@ -22,12 +22,12 @@ sub VNPage { my $v = $self->DBGetVN( id => $id, - what => 'extended relations categories anime'.($rev ? ' changes' : ''), + what => 'extended relations categories anime screenshots'.($rev ? ' changes' : ''), $rev ? ( rev => $rev ) : () )->[0]; return $self->ResNotFound if !$v->{id}; - my $c = $rev && $rev > 1 && $self->DBGetVN(id => $id, rev => $rev-1, what => 'extended changes relations categories anime')->[0]; + my $c = $rev && $rev > 1 && $self->DBGetVN(id => $id, rev => $rev-1, what => 'extended changes relations categories anime screenshots')->[0]; $v->{next} = $rev && $v->{latest} > $v->{cid} ? $rev+1 : 0; my $rel = $self->DBGetRelease(vid => $id, what => 'producers platforms'); @@ -74,7 +74,7 @@ sub VNEdit { return $self->ResNotFound if $rev->{_err}; $rev = $rev->{rev}; - my $v = $self->DBGetVN(id => $id, what => 'extended changes relations categories anime', $rev ? ( rev => $rev ) : ())->[0] if $id; + my $v = $self->DBGetVN(id => $id, what => 'extended changes relations categories anime screenshots', $rev ? ( rev => $rev ) : ())->[0] if $id; return $self->ResNotFound() if $id && !$v; return $self->ResDenied if !$self->AuthCan('edit') || ($v->{locked} && !$self->AuthCan('lock')); @@ -84,6 +84,7 @@ sub VNEdit { relations => join('|||', map { $_->{relation}.','.$_->{id}.','.$_->{title} } @{$v->{relations}}), categories => join(',', map { $_->[0].$_->[1] } sort { $a->[0] cmp $b->[0] } @{$v->{categories}}), anime => join(' ', sort { $a <=> $b } map $_->{id}, @{$v->{anime}}), + screenshots => join(' ', map "$$_[0],$$_[1]", @{$v->{screenshots}}), ) : (); my $frm = {}; @@ -101,17 +102,19 @@ sub VNEdit { { name => 'img_nsfw', required => 0 }, { name => 'categories', required => 0, default => '' }, { name => 'relations', required => 0, default => '' }, + { name => 'screenshots', required => 0, default => '' }, { name => 'comm', required => 0, default => '' }, ); $frm->{img_nsfw} = $frm->{img_nsfw} ? 1 : 0; $frm->{anime} = join(' ', sort { $a <=> $b } grep /^[0-9]+$/, split(/\s+/, $frm->{anime})); # re-sort return $self->ResRedirect('/v'.$id, 'post') - if $id && !$self->ReqParam('img') && 12 == scalar grep { $b4{$_} eq $frm->{$_} } keys %b4; + if $id && !$self->ReqParam('img') && 13 == scalar grep { $b4{$_} eq $frm->{$_} } keys %b4; my $relations = [ map { /^([0-9]+),([0-9]+)/ && $2 != $id ? ( [ $1, $2 ] ) : () } split /\|\|\|/, $frm->{relations} ]; my $cat = [ map { [ substr($_,0,3), substr($_,3,1) ] } split /,/, $frm->{categories} ]; - my $anime = [ split / /, $frm->{anime} ]; + my $anime = [ split / +/, $frm->{anime} ]; + my $screenshots = [ map [split /,/], grep /^[0-9]+,[01]$/, split / +/, $frm->{screenshots} ]; # upload image my $imgid = 0; @@ -149,6 +152,7 @@ sub VNEdit { anime => $anime, relations => $relations, categories => $cat, + screenshots => $screenshots, ); if(!$frm->{_err}) { @@ -317,6 +321,47 @@ sub VNXML { } +sub VNScrXML { + my $self = shift; + + return $self->ResNotFound if $self->ReqMethod ne 'POST'; + return $self->ResDenied if !$self->AuthCan('edit'); + + my $i = $self->FormCheck( + { name => 'itemnumber', required => 1, template => 'int' } + ); + return $self->ResNotFound if $i->{_err}; + $i = $i->{itemnumber}; + + my $tmp = sprintf '%s/00/tmp.%d.jpg', $self->{sfpath}, $$*int(rand(1000)+1); + $self->ReqSaveUpload('scrAddFile'.$i, $tmp); + + my $id = 0; + $id = -2 if !-s $tmp; + if(!$id) { + my $l; + open(my $T, '<:raw:bytes', $tmp) || die $1; + read $T, $l, 2; + close($T); + $id = -1 if $l ne pack('H*', 'ffd8') && $l ne pack('H*', '8950'); + } + + if($id) { + unlink $tmp; + } else { + $id = $self->DBIncId('screenshots_seq'); + my $new = sprintf '%s/%02d/%d.jpg', $self->{sfpath}, $id%100, $id; + rename $tmp, $new or die $!; + chmod 0666, $new; + $self->RunCmd(sprintf 'screenshot %d', $id); + } + + my $x = $self->ResStartXML; + $x->pi('xml-stylesheet', 'href="'.$self->{static_url}.'/files/blank.css" type="text/css"'); + $x->emptyTag('image', id => $id); +} + + # Update reverse relations sub VNUpdReverse { # old, new, id, cid, rev my($self, $old, $new, $id, $cid, $rev) = @_; |