diff options
Diffstat (limited to 'lib/VNDB/Handler')
-rw-r--r-- | lib/VNDB/Handler/Chars.pm | 20 | ||||
-rw-r--r-- | lib/VNDB/Handler/Producers.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/Handler/Releases.pm | 4 | ||||
-rw-r--r-- | lib/VNDB/Handler/Tags.pm | 6 | ||||
-rw-r--r-- | lib/VNDB/Handler/Traits.pm | 15 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNEdit.pm | 78 |
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>▸</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>▸</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'; |