summaryrefslogtreecommitdiff
path: root/lib/VNDB/Handler
diff options
context:
space:
mode:
Diffstat (limited to 'lib/VNDB/Handler')
-rw-r--r--lib/VNDB/Handler/Chars.pm20
-rw-r--r--lib/VNDB/Handler/Producers.pm2
-rw-r--r--lib/VNDB/Handler/Releases.pm4
-rw-r--r--lib/VNDB/Handler/Tags.pm6
-rw-r--r--lib/VNDB/Handler/Traits.pm15
-rw-r--r--lib/VNDB/Handler/VNEdit.pm78
6 files changed, 98 insertions, 27 deletions
diff --git a/lib/VNDB/Handler/Chars.pm b/lib/VNDB/Handler/Chars.pm
index 9c8a1b5e..c707a453 100644
--- a/lib/VNDB/Handler/Chars.pm
+++ b/lib/VNDB/Handler/Chars.pm
@@ -451,33 +451,39 @@ sub list {
my($self, $fch) = @_;
my $f = $self->formValidate(
- { get => 'p', required => 0, default => 1, template => 'int' },
- { get => 'q', required => 0, default => '' },
+ { get => 'p', required => 0, default => 1, template => 'int' },
+ { get => 'q', required => 0, default => '' },
+ { get => 'fil', required => 0, default => '' },
);
return $self->resNotFound if $f->{_err};
- my($list, $np) = $self->dbCharGet(
+ my($list, $np) = $self->filFetchDB(char => $f->{fil}, {}, {
$fch ne 'all' ? ( char => $fch ) : (),
$f->{q} ? ( search => $f->{q} ) : (),
results => 50,
page => $f->{p},
what => 'vns',
- );
+ });
$self->htmlHeader(title => mt '_charb_title');
my $quri = uri_escape($f->{q});
+ form action => '/c/all', 'accept-charset' => 'UTF-8', method => 'get';
div class => 'mainbox';
h1 mt '_charb_title';
- form action => '/c/all', 'accept-charset' => 'UTF-8', method => 'get';
- $self->htmlSearchBox('c', $f->{q});
- end;
+ $self->htmlSearchBox('c', $f->{q});
p class => 'browseopts';
for ('all', 'a'..'z', 0) {
a href => "/c/$_?q=$quri", $_ eq $fch ? (class => 'optselected') : (), $_ eq 'all' ? mt('_char_all') : $_ ? uc $_ : '#';
}
end;
+
+ a id => 'filselect', href => '#c';
+ lit '<i>&#9656;</i> '.mt('_js_fil_filters').'<i></i>';
+ end;
+ input type => 'hidden', class => 'hidden', name => 'fil', id => 'fil', value => $f->{fil};
end;
+ end 'form';
if(!@$list) {
div class => 'mainbox';
diff --git a/lib/VNDB/Handler/Producers.pm b/lib/VNDB/Handler/Producers.pm
index 52db6edf..1369c1e2 100644
--- a/lib/VNDB/Handler/Producers.pm
+++ b/lib/VNDB/Handler/Producers.pm
@@ -304,7 +304,7 @@ sub edit {
end;
end;
td class => 'tc_add';
- a href => '#', mt '_pedit_rel_addbut';
+ a href => '#', mt '_js_add';
end;
end;
end 'table';
diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm
index f0fdac3f..0291ba0a 100644
--- a/lib/VNDB/Handler/Releases.pm
+++ b/lib/VNDB/Handler/Releases.pm
@@ -456,7 +456,7 @@ sub _form {
option value => 2, selected => 'selected', mt '_redit_form_prod_pub';
option value => 3, mt '_redit_form_prod_both';
end; end;
- td class => 'tc_add'; a id => 'producer_add', href => '#', mt '_redit_form_prod_addbut'; end;
+ td class => 'tc_add'; a id => 'producer_add', href => '#', mt '_js_add'; end;
end; end 'table';
}],
],
@@ -469,7 +469,7 @@ sub _form {
h2 mt('_redit_form_vn_add');
div;
input id => 'vn_input', type => 'text', class => 'text';
- a href => '#', id => 'vn_add', mt '_redit_form_vn_addbut';
+ a href => '#', id => 'vn_add', mt '_js_add';
end;
}],
],
diff --git a/lib/VNDB/Handler/Tags.pm b/lib/VNDB/Handler/Tags.pm
index 3d698fc3..39388a30 100644
--- a/lib/VNDB/Handler/Tags.pm
+++ b/lib/VNDB/Handler/Tags.pm
@@ -390,7 +390,7 @@ sub taglinks {
if($f->{u}) {
my $o = $self->dbUserGet(uid => $f->{u})->[0];
li;
- txt '['; a href => $url->(u=>0), mt '_taglink_fil_remove'; txt '] ';
+ txt '['; a href => $url->(u=>0), mt '_js_remove'; txt '] ';
txt mt '_taglink_fil_user'; txt ' ';
a href => "/u$o->{id}", $o->{username};
end;
@@ -398,7 +398,7 @@ sub taglinks {
if($f->{t}) {
my $o = $self->dbTagGet(id => $f->{t})->[0];
li;
- txt '['; a href => $url->(t=>0), mt '_taglink_fil_remove'; txt '] ';
+ txt '['; a href => $url->(t=>0), mt '_js_remove'; txt '] ';
txt mt '_taglink_fil_tag'; txt ' ';
a href => "/g$o->{id}", $o->{name};
end;
@@ -406,7 +406,7 @@ sub taglinks {
if($f->{v}) {
my $o = $self->dbVNGet(id => $f->{v})->[0];
li;
- txt '['; a href => $url->(v=>0), mt '_taglink_fil_remove'; txt '] ';
+ txt '['; a href => $url->(v=>0), mt '_js_remove'; txt '] ';
txt mt '_taglink_fil_vn'; txt ' ';
a href => "/v$o->{id}", $o->{title};
end;
diff --git a/lib/VNDB/Handler/Traits.pm b/lib/VNDB/Handler/Traits.pm
index f3abdfeb..0a21011c 100644
--- a/lib/VNDB/Handler/Traits.pm
+++ b/lib/VNDB/Handler/Traits.pm
@@ -27,6 +27,7 @@ sub traitpage {
my $f = $self->formValidate(
{ get => 'p', required => 0, default => 1, template => 'int' },
{ get => 'm', required => 0, default => undef, enum => [qw|0 1 2|] },
+ { get => 'fil', required => 0, default => '' },
);
return $self->resNotFound if $f->{_err};
my $tagspoil = $self->reqCookie('tagspoil')||'';
@@ -83,14 +84,15 @@ sub traitpage {
childtags($self, mt('_traitp_childs'), 'i', $t) if @{$t->{childs}};
if(!$t->{meta} && $t->{state} == 2) {
- my($chars, $np) = $self->dbCharGet(
+ my($chars, $np) = $self->filFetchDB(char => $f->{fil}, {}, {
trait_inc => $trait,
- traitspoil => $f->{m},
+ tagspoil => $f->{m},
results => 50,
page => $f->{p},
what => 'vns',
- );
+ });
+ form action => "/i$t->{id}", 'accept-charset' => 'UTF-8', method => 'get';
div class => 'mainbox';
h1 mt '_traitp_charlist';
@@ -101,12 +103,17 @@ sub traitpage {
a href => "/i$trait?m=2", $f->{m} == 2 ? (class => 'optselected') : (), onclick => "setCookie('tagspoil', 2);return true;", mt '_tagp_spoil2';
end;
+ a id => 'filselect', href => '#c';
+ lit '<i>&#9656;</i> '.mt('_js_fil_filters').'<i></i>';
+ end;
+ input type => 'hidden', class => 'hidden', name => 'fil', id => 'fil', value => $f->{fil};
+
if(!@$chars) {
p; br; br; txt mt '_traitp_nochars'; end;
}
p; br; txt mt '_traitp_cached'; end;
end 'div';
-
+ end 'form';
@$chars && $self->charBrowseTable($chars, $np, $f, "/i$trait?m=$f->{m}");
}
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';