summaryrefslogtreecommitdiff
path: root/lib/VNDB/Handler/VNEdit.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VNDB/Handler/VNEdit.pm')
-rw-r--r--lib/VNDB/Handler/VNEdit.pm119
1 files changed, 51 insertions, 68 deletions
diff --git a/lib/VNDB/Handler/VNEdit.pm b/lib/VNDB/Handler/VNEdit.pm
index b93c544d..82f7e169 100644
--- a/lib/VNDB/Handler/VNEdit.pm
+++ b/lib/VNDB/Handler/VNEdit.pm
@@ -3,11 +3,11 @@ package VNDB::Handler::VNEdit;
use strict;
use warnings;
-use YAWF ':html', ':xml';
+use TUWF ':html', ':xml';
use VNDB::Func;
-YAWF::register(
+TUWF::register(
qr{v(?:([1-9]\d*)(?:\.([1-9]\d*))?/edit|/new)}
=> \&edit,
qr{xml/vn\.xml} => \&vnxml,
@@ -19,7 +19,7 @@ sub edit {
my($self, $vid, $rev) = @_;
my $v = $vid && $self->dbVNGet(id => $vid, what => 'extended screenshots relations anime changes', $rev ? (rev => $rev) : ())->[0];
- return 404 if $vid && !$v->{id};
+ return $self->resNotFound if $vid && !$v->{id};
$rev = undef if !$vid || $v->{cid} == $v->{latest};
return $self->htmlDenied if !$self->authCan('edit')
@@ -38,23 +38,23 @@ sub edit {
if($self->reqMethod eq 'POST') {
return if !$self->authCheckCode;
$frm = $self->formValidate(
- { name => 'title', maxlength => 250 },
- { name => 'original', required => 0, maxlength => 250, default => '' },
- { name => 'alias', required => 0, maxlength => 500, default => '' },
- { name => 'desc', required => 0, default => '', maxlength => 10240 },
- { name => 'length', required => 0, default => 0, enum => $self->{vn_lengths} },
- { name => 'l_wp', required => 0, default => '', maxlength => 150 },
- { name => 'l_encubed', required => 0, default => '', maxlength => 100 },
- { name => 'l_renai', required => 0, default => '', maxlength => 100 },
- { name => 'l_vnn', required => 0, default => $b4{l_vnn}||0, template => 'int' },
- { name => 'anime', required => 0, default => '' },
- { name => 'previmage', required => 0, default => 0, template => 'int' },
- { name => 'img_nsfw', required => 0, default => 0 },
- { name => 'vnrelations', required => 0, default => '', maxlength => 5000 },
- { name => 'screenshots', required => 0, default => '', maxlength => 1000 },
- { name => 'editsum', required => 0, maxlength => 5000 },
- { name => 'ihid', required => 0 },
- { name => 'ilock', required => 0 },
+ { post => 'title', maxlength => 250 },
+ { post => 'original', required => 0, maxlength => 250, default => '' },
+ { post => 'alias', required => 0, maxlength => 500, default => '' },
+ { post => 'desc', required => 0, default => '', maxlength => 10240 },
+ { post => 'length', required => 0, default => 0, enum => $self->{vn_lengths} },
+ { post => 'l_wp', required => 0, default => '', maxlength => 150 },
+ { post => 'l_encubed', required => 0, default => '', maxlength => 100 },
+ { post => 'l_renai', required => 0, default => '', maxlength => 100 },
+ { post => 'l_vnn', required => 0, default => $b4{l_vnn}||0, template => 'int' },
+ { post => 'anime', required => 0, default => '' },
+ { post => 'previmage', required => 0, default => 0, template => 'int' },
+ { post => 'img_nsfw', required => 0, default => 0 },
+ { post => 'vnrelations', required => 0, default => '', maxlength => 5000 },
+ { post => 'screenshots', required => 0, default => '', maxlength => 1000 },
+ { post => 'editsum', required => 0, maxlength => 5000 },
+ { post => 'ihid', required => 0 },
+ { post => 'ilock', required => 0 },
);
push @{$frm->{_err}}, 'badeditsum' if !$frm->{editsum} || lc($frm->{editsum}) eq lc($frm->{desc});
@@ -86,7 +86,7 @@ sub edit {
# nothing changed? just redirect
return $self->resRedirect("/v$vid", 'post')
- if $vid && !$self->reqUploadFileName('img') && $image == $v->{image}
+ if $vid && !$self->reqPost('img') && $image == $v->{image}
&& !grep $frm->{$_} ne $b4{$_}, keys %b4;
# perform the edit/add
@@ -123,31 +123,19 @@ sub edit {
sub _uploadimage {
my($self, $v, $frm) = @_;
- return $v ? $frm->{previmage} : 0 if $frm->{_err} || !$self->reqUploadFileName('img');
+ return $v ? $frm->{previmage} : 0 if $frm->{_err} || !$self->reqPost('img');
- # save to temporary location
- my $tmp = sprintf '%s/static/cv/00/tmp.%d.jpg', $VNDB::ROOT, $$*int(rand(1000)+1);
- $self->reqSaveUpload('img', $tmp);
+ # perform some elementary checks
+ my $imgdata = $self->reqUploadRaw('img');
+ $frm->{_err} = [ 'noimage' ] if $imgdata !~ /^(\xff\xd8|\x89\x50)/; # JPG or PNG headers
+ $frm->{_err} = [ 'toolarge' ] if length($imgdata) > 512*1024;
+ return undef if $frm->{_err};
- # perform some checks
- my $l;
- open(my $T, '<:raw:bytes', $tmp) || die $1;
- read $T, $l, 2;
- close($T);
-
- $frm->{_err} = [ 'noimage' ] if $l ne pack('H*', 'ffd8') && $l ne pack('H*', '8950');
- $frm->{_err} = [ 'toolarge' ] if -s $tmp > 512*1024;
-
- if($frm->{_err}) {
- unlink $tmp;
- return undef;
- }
-
- # get image ID and move it to the correct location
+ # get image ID and save it, to be processed by Multi
my $imgid = $self->dbVNImageId;
- my $new = sprintf '%s/static/cv/%02d/%d.jpg', $VNDB::ROOT, $imgid%100, $imgid;
- rename $tmp, $new or die $!;
- chmod 0666, $new;
+ my $fn = sprintf '%s/static/cv/%02d/%d.jpg', $VNDB::ROOT, $imgid%100, $imgid;
+ $self->reqSaveUpload('img', $fn);
+ chmod 0666, $fn;
return -1*$imgid;
}
@@ -187,14 +175,15 @@ sub _form {
h2 mt '_vnedit_image_upload';
input type => 'file', class => 'text', name => 'img', id => 'img';
- p mt('_vnedit_image_upload_msg')."\n\n\n";
+ p mt('_vnedit_image_upload_msg');
+ br; br; br;
h2 mt '_vnedit_image_nsfw';
input type => 'checkbox', class => 'checkbox', id => 'img_nsfw', name => 'img_nsfw',
$frm->{img_nsfw} ? (checked => 'checked') : ();
label class => 'checkbox', for => 'img_nsfw', mt '_vnedit_image_nsfw_check';
p mt '_vnedit_image_nsfw_msg';
- end;
+ end 'div';
}],
],
@@ -229,7 +218,7 @@ sub _form {
a href => '#', mt '_vnedit_rel_addbut';
end;
end;
- end;
+ end 'table';
}],
],
@@ -292,8 +281,8 @@ sub _updreverse {
sub vnxml {
my $self = shift;
- my $q = $self->formValidate({ name => 'q', maxlength => 500 });
- return 404 if $q->{_err};
+ my $q = $self->formValidate({ get => 'q', maxlength => 500 });
+ return $self->resNotFound if $q->{_err};
$q = $q->{q};
my($list, $np) = $self->dbVNGet(
@@ -321,9 +310,9 @@ sub scrxml {
# fetch information about screenshots
if($self->reqMethod ne 'POST') {
my $ids = $self->formValidate(
- { name => 'id', required => 1, template => 'int', multi => 1 }
+ { get => 'id', required => 1, template => 'int', multi => 1 }
);
- return 404 if $ids->{_err};
+ return $self->resNotFound if $ids->{_err};
my $r = $self->dbScreenshotGet($ids->{id});
xml;
@@ -334,28 +323,22 @@ sub scrxml {
}
# upload new screenshot
- my $num = $self->formValidate({name => 'upload', template => 'int'});
- return 404 if $num->{_err};
- my $tmp = sprintf '%s/static/sf/00/tmp.%d.jpg', $VNDB::ROOT, $$*int(rand(1000)+1);
- $self->reqSaveUpload("scr_upl_file_$num->{upload}", $tmp);
+ my $num = $self->formValidate({get => 'upload', template => 'int'});
+ return $self->resNotFound if $num->{_err};
+ my $param = "scr_upl_file_$num->{upload}";
+ # check for simple errors
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');
- }
+ my $imgdata = $self->reqUploadRaw($param);
+ $id = -2 if !$imgdata;
+ $id = -1 if !$id && $imgdata !~ /^(\xff\xd8|\x89\x50)/; # JPG or PNG headers
- if($id) {
- unlink $tmp;
- } else {
+ # no error? save and let Multi process it
+ if(!$id) {
$id = $self->dbScreenshotAdd;
- my $new = sprintf '%s/static/sf/%02d/%d.jpg', $VNDB::ROOT, $id%100, $id;
- rename $tmp, $new or die $!;
- chmod 0666, $new;
+ my $fn = sprintf '%s/static/sf/%02d/%d.jpg', $VNDB::ROOT, $id%100, $id;
+ $self->reqSaveUpload($param, $fn);
+ chmod 0666, $fn;
}
xml;