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.pm78
1 files changed, 68 insertions, 10 deletions
diff --git a/lib/VNDB/Handler/VNEdit.pm b/lib/VNDB/Handler/VNEdit.pm
index 0309a01c..56031472 100644
--- a/lib/VNDB/Handler/VNEdit.pm
+++ b/lib/VNDB/Handler/VNEdit.pm
@@ -10,13 +10,71 @@ use VNDB::Func;
TUWF::register(
qr{v(?:([1-9]\d*)(?:\.([1-9]\d*))?/edit|/new)}
=> \&edit,
+ qr{v/add} => \&addform,
qr{xml/vn\.xml} => \&vnxml,
qr{xml/screenshots\.xml} => \&scrxml,
);
+sub addform {
+ my $self = shift;
+ return $self->htmlDenied if !$self->authCan('edit');
+
+ my $frm;
+ my $l = [];
+ if($self->reqMethod eq 'POST') {
+ return if !$self->authCheckCode;
+ $frm = $self->formValidate(
+ { post => 'title', maxlength => 250 },
+ { post => 'original', required => 0, maxlength => 250, default => '' },
+ { post => 'alias', required => 0, maxlength => 500, default => '' },
+ { post => 'continue_ign',required => 0 },
+ );
+
+ # look for duplicates
+ if(!$frm->{_err} && !$frm->{continue_ign}) {
+ $l = $self->dbVNGet(search => $frm->{title}, what => 'changes', results => 50, inc_hidden => 1);
+ push @$l, @{$self->dbVNGet(search => $frm->{original}, what => 'changes', results => 50, inc_hidden => 1)} if $frm->{original};
+ $_ && push @$l, $self->dbVNGet(search => $_, what => 'changes', results => 50, inc_hidden => 1) for(split /\n/, $frm->{alias});
+ my %ids = map +($_->{id}, $_), @$l;
+ $l = [ map $ids{$_}, sort { $ids{$a}{title} cmp $ids{$b}{title} } keys %ids ];
+ }
+
+ return edit($self, undef, undef, 1) if !@$l && !$frm->{_err};
+ }
+
+ $self->htmlHeader(title => mt('_vnedit_title_add'), noindex => 1);
+ if(@$l) {
+ div class => 'mainbox';
+ h1 mt '_vnedit_dup_title';
+ div class => 'warning';
+ p; lit mt '_vnedit_dup_msg'; end;
+ end;
+ ul;
+ for(@$l) {
+ li;
+ a href => "/v$_->{id}", title => $_->{original}||$_->{title}, "v$_->{id}: ".shorten($_->{title}, 50);
+ b class => 'standout', ' deleted' if $_->{hidden};
+ end;
+ }
+ end;
+ end 'div';
+ }
+
+ $self->htmlForm({ frm => $frm, action => '/v/add', continue => @$l ? 2 : 1 },
+ vn_add => [ mt('_vnedit_title_add'),
+ [ input => short => 'title', name => mt '_vnedit_frm_title' ],
+ [ input => short => 'original', name => mt '_vnedit_original' ],
+ [ static => content => mt '_vnedit_original_msg' ],
+ [ textarea => short => 'alias', name => mt('_vnedit_alias'), rows => 4 ],
+ [ static => content => mt '_vnedit_alias_msg' ],
+ ]);
+ $self->htmlFooter;
+}
+
+
sub edit {
- my($self, $vid, $rev) = @_;
+ my($self, $vid, $rev, $nosubmit) = @_;
my $v = $vid && $self->dbVNGet(id => $vid, what => 'extended screenshots relations anime changes', $rev ? (rev => $rev) : ())->[0];
return $self->resNotFound if $vid && !$v->{id};
@@ -36,7 +94,7 @@ sub edit {
my $frm;
if($self->reqMethod eq 'POST') {
- return if !$self->authCheckCode;
+ return if !$nosubmit && !$self->authCheckCode;
$frm = $self->formValidate(
{ post => 'title', maxlength => 250 },
{ post => 'original', required => 0, maxlength => 250, default => '' },
@@ -53,16 +111,16 @@ sub edit {
{ 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 },
+ { post => 'ihid', required => 0 },
+ { post => 'ilock', required => 0 },
);
- push @{$frm->{_err}}, 'badeditsum' if !$frm->{editsum} || lc($frm->{editsum}) eq lc($frm->{desc});
+ push @{$frm->{_err}}, 'badeditsum' if !$nosubmit && (!$frm->{editsum} || lc($frm->{editsum}) eq lc($frm->{desc}));
# handle image upload
- $frm->{image} = _uploadimage($self, $frm);
+ $frm->{image} = _uploadimage($self, $frm) if !$nosubmit;
- if(!$frm->{_err}) {
+ if(!$nosubmit && !$frm->{_err}) {
# parse and re-sort fields that have multiple representations of the same information
my $anime = { map +($_=>1), grep /^[0-9]+$/, split /[ ,]+/, $frm->{anime} };
my $relations = [ map { /^([a-z]+),([0-9]+),([01]),(.+)$/ && (!$vid || $2 != $vid) ? [ $1, $2, $3, $4 ] : () } split /\|\|\|/, $frm->{vnrelations} ];
@@ -169,8 +227,8 @@ sub _form {
vn_img => [ mt('_vnedit_image'), [ static => nolabel => 1, content => sub {
div class => 'img';
p mt '_vnedit_image_none' if !$frm->{image};
- p mt '_vnedit_image_processing' if $frm->{image} < 0;
- img src => imgurl(cv => $frm->{image}) if $frm->{image} > 0;
+ p mt '_vnedit_image_processing' if $frm->{image} && $frm->{image} < 0;
+ img src => imgurl(cv => $frm->{image}) if $frm->{image} && $frm->{image} > 0;
end;
div;
@@ -220,7 +278,7 @@ sub _form {
end;
td class => 'tc_title', $v ? $v->{title} : '';
td class => 'tc_add';
- a href => '#', mt '_vnedit_rel_addbut';
+ a href => '#', mt '_js_add';
end;
end;
end 'table';