summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2011-12-31 10:16:49 +0100
committerYorhel <git@yorhel.nl>2011-12-31 10:16:49 +0100
commitfa496b11536a9ed7306078f6ff3aa021a91ddf80 (patch)
treeda4cccc8adeb2cdd6c797079916e8beff74dd716 /lib
parentc673a8e06abae7e12724b2815c03431190ffe3f8 (diff)
parent71b90ee04391dddc83e0b81122abab6468777833 (diff)
Merge branch 'beta'2.22
Conflicts: data/lang.txt
Diffstat (limited to 'lib')
-rw-r--r--lib/Multi/Feed.pm6
-rw-r--r--lib/Multi/Maintenance.pm4
-rw-r--r--lib/VNDB/DB/Chars.pm22
-rw-r--r--lib/VNDB/DB/VN.pm6
-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
-rw-r--r--lib/VNDB/Util/CommonHTML.pm2
-rw-r--r--lib/VNDB/Util/FormHTML.pm17
-rw-r--r--lib/VNDB/Util/LayoutHTML.pm2
-rw-r--r--lib/VNDB/Util/Misc.pm5
14 files changed, 142 insertions, 47 deletions
diff --git a/lib/Multi/Feed.pm b/lib/Multi/Feed.pm
index 1a955e05..ea9cbcac 100644
--- a/lib/Multi/Feed.pm
+++ b/lib/Multi/Feed.pm
@@ -112,7 +112,7 @@ sub write_atom { # num, res, feed, time
$x->tag(updated => datetime($updated));
$x->tag(id => $VNDB::S{url}.$VNDB::S{atom_feeds}{$feed}[2]);
$x->tag(link => rel => 'self', type => 'application/atom+xml', href => "$VNDB::S{url}/feeds/$feed.atom", undef);
- $x->tag(link => rel => 'alternate', type => 'text/html', href => $VNDB::S{atom_feeds}{$feed}[2], undef);
+ $x->tag(link => rel => 'alternate', type => 'text/html', href => $VNDB::S{url}.$VNDB::S{atom_feeds}{$feed}[2], undef);
for(@$r) {
$x->tag('entry');
@@ -123,10 +123,10 @@ sub write_atom { # num, res, feed, time
if($_->{username}) {
$x->tag('author');
$x->tag(name => $_->{username});
- $x->tag(uri => '/u'.$_->{uid}) if $_->{uid};
+ $x->tag(uri => $VNDB::S{url}.'/u'.$_->{uid}) if $_->{uid};
$x->end;
}
- $x->tag(link => rel => 'alternate', type => 'text/html', href => $_->{id}, undef);
+ $x->tag(link => rel => 'alternate', type => 'text/html', href => $VNDB::S{url}.$_->{id}, undef);
$x->tag('summary', type => 'html', bb2html $_->{summary}) if $_->{summary};
$x->end('entry');
}
diff --git a/lib/Multi/Maintenance.pm b/lib/Multi/Maintenance.pm
index a754e618..e7c66a04 100644
--- a/lib/Multi/Maintenance.pm
+++ b/lib/Multi/Maintenance.pm
@@ -272,7 +272,7 @@ sub logrotate {
sub vnsearch_check {
$_[KERNEL]->call(pg => query =>
- 'SELECT id FROM vn WHERE NOT hidden AND c_search IS NULL LIMIT 1',
+ 'SELECT id FROM vn WHERE c_search IS NULL LIMIT 1',
undef, 'vnsearch_gettitles');
}
@@ -303,7 +303,7 @@ sub vnsearch_update { # num, res, vid, time
my @t = map +($_->{title}, $_->{original}), @$res;
# alias fields are a bit special
for (@$res) {
- push @t, split /,/, $_->{alias} if $_->{alias};
+ push @t, split /[\n,]/, $_->{alias} if $_->{alias};
}
my $t = normalize_titles(@t);
$_[KERNEL]->call(core => log => 'Updated search cache for v%d', $id);
diff --git a/lib/VNDB/DB/Chars.pm b/lib/VNDB/DB/Chars.pm
index be620378..86b3a859 100644
--- a/lib/VNDB/DB/Chars.pm
+++ b/lib/VNDB/DB/Chars.pm
@@ -8,7 +8,8 @@ use Exporter 'import';
our @EXPORT = qw|dbCharGet dbCharRevisionInsert dbCharImageId|;
-# options: id rev instance traitspoil trait_inc trait_exc char what results page
+# options: id rev instance tagspoil trait_inc trait_exc char what results page gender bloodt
+# bust_min bust_max waist_min waist_max hip_min hip_max height_min height_max weight_min weight_max role
# what: extended traits vns changes
sub dbCharGet {
my $self = shift;
@@ -16,7 +17,7 @@ sub dbCharGet {
page => 1,
results => 10,
what => '',
- traitspoil => 0,
+ tagspoil => 0,
@_
);
@@ -29,15 +30,30 @@ sub dbCharGet {
$o{notid} ? ( 'c.id <> ?' => $o{notid} ) : (),
$o{instance} ? ( 'cr.main = ?' => $o{instance} ) : (),
$o{vid} ? ( 'cr.id IN(SELECT cid FROM chars_vns WHERE vid = ?)' => $o{vid} ) : (),
+ defined $o{gender} ? ( 'cr.gender IN(!l)' => [ ref $o{gender} ? $o{gender} : [$o{gender}] ]) : (),
+ defined $o{bloodt} ? ( 'cr.bloodt IN(!l)' => [ ref $o{bloodt} ? $o{bloodt} : [$o{bloodt}] ]) : (),
+ defined $o{bust_min} ? ( 'cr.s_bust >= ?' => $o{bust_min} ) : (),
+ defined $o{bust_max} ? ( 'cr.s_bust <= ? AND cr.s_bust > 0' => $o{bust_max} ) : (),
+ defined $o{waist_min} ? ( 'cr.s_waist >= ?' => $o{waist_min} ) : (),
+ defined $o{waist_max} ? ( 'cr.s_waist <= ? AND cr.s_waist > 0' => $o{waist_max} ) : (),
+ defined $o{hip_min} ? ( 'cr.s_hip >= ?' => $o{hip_min} ) : (),
+ defined $o{hip_max} ? ( 'cr.s_hip <= ? AND cr.s_hip > 0' => $o{hip_max} ) : (),
+ defined $o{height_min} ? ( 'cr.height >= ?' => $o{height_min} ) : (),
+ defined $o{height_max} ? ( 'cr.height <= ? AND cr.height > 0' => $o{height_max} ) : (),
+ defined $o{weight_min} ? ( 'cr.weight >= ?' => $o{weight_min} ) : (),
+ defined $o{weight_max} ? ( 'cr.weight <= ? AND cr.weight > 0' => $o{weight_max} ) : (),
$o{search} ? (
'(cr.name ILIKE ? OR cr.original ILIKE ? OR cr.alias ILIKE ?)', [ map '%%'.$o{search}.'%%', 1..3 ] ) : (),
$o{char} ? (
'LOWER(SUBSTR(cr.name, 1, 1)) = ?' => $o{char} ) : (),
defined $o{char} && !$o{char} ? (
'(ASCII(cr.name) < 97 OR ASCII(cr.name) > 122) AND (ASCII(cr.name) < 65 OR ASCII(cr.name) > 90)' => 1 ) : (),
+ $o{role} ? (
+ 'EXISTS(SELECT 1 FROM chars_vns cvi WHERE cvi.cid = cr.id AND cvi.role IN(!l))',
+ [ ref $o{role} ? $o{role} : [$o{role}] ] ) : (),
$o{trait_inc} ? (
'c.id IN(SELECT cid FROM traits_chars WHERE tid IN(!l) AND spoil <= ? GROUP BY cid HAVING COUNT(tid) = ?)',
- [ ref $o{trait_inc} ? $o{trait_inc} : [$o{trait_inc}], $o{traitspoil}, ref $o{trait_inc} ? $#{$o{trait_inc}}+1 : 1 ]) : (),
+ [ ref $o{trait_inc} ? $o{trait_inc} : [$o{trait_inc}], $o{tagspoil}, ref $o{trait_inc} ? $#{$o{trait_inc}}+1 : 1 ]) : (),
$o{trait_exc} ? (
'c.id NOT IN(SELECT cid FROM traits_chars WHERE tid IN(!l))' => [ ref $o{trait_exc} ? $o{trait_exc} : [$o{trait_exc}] ] ) : (),
);
diff --git a/lib/VNDB/DB/VN.pm b/lib/VNDB/DB/VN.pm
index 474066ce..473fa92c 100644
--- a/lib/VNDB/DB/VN.pm
+++ b/lib/VNDB/DB/VN.pm
@@ -11,7 +11,7 @@ our @EXPORT = qw|dbVNGet dbVNRevisionInsert dbVNImageId dbScreenshotAdd dbScreen
# Options: id, rev, char, search, length, lang, olang, plat, tag_inc, tag_exc, tagspoil,
-# hasani, hasshot, ul_notblack, ul_onwish, results, page, what, sort, reverse
+# hasani, hasshot, ul_notblack, ul_onwish, results, page, what, sort, reverse, inc_hidden
# What: extended anime relations screenshots relgraph rating ranking changes
# Sort: id rel pop rating title tagscore rand
sub dbVNGet {
@@ -66,7 +66,7 @@ sub dbVNGet {
$uid && defined $o{ul_onlist} ? (
'v.id !s IN(SELECT vid FROM vnlists WHERE uid = ?)' => [ $o{ul_onlist} ? '' : 'NOT', $uid ] ) : (),
# don't fetch hidden items unless we ask for an ID
- !$o{id} && !$o{rev} ? (
+ !$o{id} && !$o{rev} && !$o{inc_hidden} ? (
'v.hidden = FALSE' => 0 ) : (),
# optimize fetching random entries (only when there are no other filters present, otherwise this won't work well)
$o{sort} eq 'rand' && $o{results} <= 10 && !grep(!/^(?:results|page|what|sort|tagspoil)$/, keys %o) ? (
@@ -107,7 +107,7 @@ sub dbVNGet {
my $order = sprintf {
id => 'id %s',
- rel => 'c_released %s',
+ rel => 'c_released %s, title ASC',
pop => 'c_popularity %s NULLS LAST',
rating => 'c_rating %s NULLS LAST',
title => 'title %s',
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';
diff --git a/lib/VNDB/Util/CommonHTML.pm b/lib/VNDB/Util/CommonHTML.pm
index 60e7b237..73e2c5ba 100644
--- a/lib/VNDB/Util/CommonHTML.pm
+++ b/lib/VNDB/Util/CommonHTML.pm
@@ -84,7 +84,7 @@ sub htmlMainTabs {
if($type eq 'u' && $self->authCan('usermod')) {
li $sel eq 'del' ? (class => 'tabselected') : ();
- a href => "/$id/del", mt '_mtabs_del';
+ a href => "/$id/del", mt '_js_remove';
end;
}
diff --git a/lib/VNDB/Util/FormHTML.pm b/lib/VNDB/Util/FormHTML.pm
index 21eeb980..13ec56f9 100644
--- a/lib/VNDB/Util/FormHTML.pm
+++ b/lib/VNDB/Util/FormHTML.pm
@@ -165,10 +165,12 @@ sub htmlFormPart {
# Generates a form, first argument is a hashref with global options, keys:
-# frm => the $frm as returned by formValidate,
-# action => The location the form should POST to (also used as form id)
-# upload => 1/0, adds an enctype.
-# editsum => 1/0, adds an edit summary field before the submit button
+# frm => the $frm as returned by formValidate,
+# action => The location the form should POST to (also used as form id)
+# upload => 1/0, adds an enctype.
+# nosubmit => 1/0, hides the submit button
+# editsum => 1/0, adds an edit summary field before the submit button
+# continue => 2/1/0, replace submit button with continue buttons
# The other arguments are a list of subforms in the form
# of (subform-name => [form parts]). Each subform is shown as a
# (JavaScript-powered) tab, and has it's own 'mainbox'. This function
@@ -235,7 +237,12 @@ sub htmlForm {
textarea name => 'editsum', id => 'editsum', rows => 4, cols => 50, $options->{frm}{editsum}||'';
br;
}
- input type => 'submit', value => mt('_form_submit'), class => 'submit';
+ if(!$options->{continue}) {
+ input type => 'submit', value => mt('_form_submit'), class => 'submit';
+ } else {
+ input type => 'submit', value => mt('_form_continue'), class => 'submit';
+ input type => 'submit', name => 'continue_ign', value => mt('_form_continue_ign'), class => 'submit', style => 'width: auto' if $options->{continue} == 2;
+ }
end;
end 'div';
}
diff --git a/lib/VNDB/Util/LayoutHTML.pm b/lib/VNDB/Util/LayoutHTML.pm
index 752f6728..7507d682 100644
--- a/lib/VNDB/Util/LayoutHTML.pm
+++ b/lib/VNDB/Util/LayoutHTML.pm
@@ -100,7 +100,7 @@ sub _menu {
a href => '/g/links?u='.$self->authInfo->{id}, mt '_menu_mytags'; br;
br;
if($self->authCan('edit')) {
- a href => '/v/new', mt '_menu_addvn'; br;
+ a href => '/v/add', mt '_menu_addvn'; br;
a href => '/p/new', mt '_menu_addproducer'; br;
}
if($self->authCan('charedit')) {
diff --git a/lib/VNDB/Util/Misc.pm b/lib/VNDB/Util/Misc.pm
index 5406fe06..04114483 100644
--- a/lib/VNDB/Util/Misc.pm
+++ b/lib/VNDB/Util/Misc.pm
@@ -13,11 +13,12 @@ our @EXPORT = qw|filFetchDB ieCheck|;
my %filfields = (
vn => [qw|length hasani tag_inc tag_exc taginc tagexc tagspoil lang olang plat ul_notblack ul_onwish ul_voted ul_onlist|],
release => [qw|type patch freeware doujin date_before date_after released minage lang olang resolution plat med voiced ani_story ani_ero|],
+ char => [qw|gender bloodt bust_min bust_max waist_min waist_max hip_min hip_max height_min height_max weight_min weight_max trait_inc trait_exc tagspoil role|],
);
# Arguments:
-# type ('vn' or 'release'),
+# type ('vn', 'release' or 'char'),
# filter overwrite (string or undef),
# when defined, these filters will be used instead of the preferences,
# must point to a variable, will be modified in-place with the actually used filters
@@ -30,7 +31,7 @@ sub filFetchDB {
my($self, $type, $overwrite, $pre, $post) = @_;
$pre = {} if !$pre;
$post = {} if !$post;
- my $dbfunc = $self->can($type eq 'vn' ? 'dbVNGet' : 'dbReleaseGet');
+ my $dbfunc = $self->can($type eq 'vn' ? 'dbVNGet' : $type eq 'release' ? 'dbReleaseGet' : 'dbCharGet');
my $prefname = 'filter_'.$type;
my $pref = $self->authPref($prefname);