summaryrefslogtreecommitdiff
path: root/lib/VNDB/Handler/VNEdit.pm
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2011-12-29 16:05:31 +0100
committerYorhel <git@yorhel.nl>2011-12-29 16:05:31 +0100
commitce33c5933d9e83699fa0791d4dae72208d528953 (patch)
treef64d0b35279ad53639e523c3e559efea4675099b /lib/VNDB/Handler/VNEdit.pm
parent019f1424945aff4545c3a5083fb6330a942f4a3b (diff)
Added duplicate check when adding VNs
Diffstat (limited to 'lib/VNDB/Handler/VNEdit.pm')
-rw-r--r--lib/VNDB/Handler/VNEdit.pm72
1 files changed, 65 insertions, 7 deletions
diff --git a/lib/VNDB/Handler/VNEdit.pm b/lib/VNDB/Handler/VNEdit.pm
index 36333cb0..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} ];