summaryrefslogtreecommitdiff
path: root/lib/VNDB/VN.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VNDB/VN.pm')
-rw-r--r--lib/VNDB/VN.pm57
1 files changed, 51 insertions, 6 deletions
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) = @_;