summaryrefslogtreecommitdiff
path: root/lib/VNDB
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2019-07-14 14:17:28 +0200
committerYorhel <git@yorhel.nl>2019-07-15 12:41:46 +0200
commitb80513eaf985c7ea12445d4d4470c302199dcf10 (patch)
tree85ac4fbadf7f225fde4662813e034b5973a8afa4 /lib/VNDB
parentbd2890abeb7f4ebe0cdab66dd7ad07c5cac53941 (diff)
Add engine field to releases
Fixes #4.
Diffstat (limited to 'lib/VNDB')
-rw-r--r--lib/VNDB/DB/Releases.pm7
-rw-r--r--lib/VNDB/Handler/Releases.pm33
-rw-r--r--lib/VNDB/Util/Misc.pm2
3 files changed, 34 insertions, 8 deletions
diff --git a/lib/VNDB/DB/Releases.pm b/lib/VNDB/DB/Releases.pm
index 9f164251..ecfeab72 100644
--- a/lib/VNDB/DB/Releases.pm
+++ b/lib/VNDB/DB/Releases.pm
@@ -28,6 +28,7 @@ sub dbReleaseFilters {
defined $o{voiced} ? ( 'NOT r.patch AND r.voiced IN(!l)' => [ ref $o{voiced} ? $o{voiced} : [$o{voiced}] ] ) : (),
defined $o{ani_story} ? ( 'NOT r.patch AND r.ani_story IN(!l)' => [ ref $o{ani_story} ? $o{ani_story} : [$o{ani_story}] ] ) : (),
defined $o{ani_ero} ? ( 'NOT r.patch AND r.ani_ero IN(!l)' => [ ref $o{ani_ero} ? $o{ani_ero} : [$o{ani_ero}] ] ) : (),
+ defined $o{engine} ? ( 'r.engine = ?' => $o{engine} ) : (),
defined $o{released} ? ( 'r.released !s ?' => [ $o{released} ? '<=' : '>', strftime('%Y%m%d', gmtime) ] ) : (),
$o{lang} ? (
'r.id IN(SELECT irl.id FROM releases_lang irl WHERE irl.lang IN(!l))' => [ ref $o{lang} ? $o{lang} : [ $o{lang} ] ] ) : (),
@@ -85,7 +86,7 @@ sub dbReleaseGet {
my @select = (
qw|r.id r.title r.original r.website r.released r.minage r.type r.patch|,
- $o{what} =~ /extended/ ? qw|r.notes r.catalog r.gtin r.resolution r.voiced r.freeware r.doujin r.uncensored r.ani_story r.ani_ero r.hidden r.locked| : (),
+ $o{what} =~ /extended/ ? qw|r.notes r.catalog r.gtin r.resolution r.voiced r.freeware r.doujin r.uncensored r.ani_story r.ani_ero r.engine r.hidden r.locked| : (),
$o{pid} ? ('rp.developer', 'rp.publisher') : (),
);
@@ -123,7 +124,7 @@ sub dbReleaseGetRev {
$o{rev} ||= $self->dbRow('SELECT MAX(rev) AS rev FROM changes WHERE type = \'r\' AND itemid = ?', $o{id})->{rev};
my $select = 'c.itemid AS id, r.title, r.original, r.website, r.released, r.minage, r.type, r.patch';
- $select .= ', r.notes, r.catalog, r.gtin, r.resolution, r.voiced, r.freeware, r.doujin, r.uncensored, r.ani_story, r.ani_ero, ro.hidden, ro.locked' if $o{what} =~ /extended/;
+ $select .= ', r.notes, r.catalog, r.gtin, r.resolution, r.voiced, r.freeware, r.doujin, r.uncensored, r.ani_story, r.ani_ero, r.engine, ro.hidden, ro.locked' if $o{what} =~ /extended/;
$select .= ', extract(\'epoch\' from c.added) as added, c.requester, c.comments, u.username, c.rev, c.ihid, c.ilock';
$select .= ', c.id AS cid, NOT EXISTS(SELECT 1 FROM changes c2 WHERE c2.type = c.type AND c2.itemid = c.itemid AND c2.rev = c.rev+1) AS lastrev';
@@ -214,7 +215,7 @@ sub dbReleaseRevisionInsert {
my %set = map exists($o->{$_}) ? ("$_ = ?", $o->{$_}) : (),
qw|title original gtin catalog website released notes minage type
- patch resolution voiced freeware doujin uncensored ani_story ani_ero|;
+ patch resolution voiced freeware doujin uncensored ani_story ani_ero engine|;
$self->dbExec('UPDATE edit_releases !H', \%set) if keys %set;
if($o->{languages}) {
diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm
index ad32e78f..180457ec 100644
--- a/lib/VNDB/Handler/Releases.pm
+++ b/lib/VNDB/Handler/Releases.pm
@@ -66,6 +66,7 @@ sub page {
[ voiced => 'Voiced', serialize => sub { $self->{voiced}[$_[0]] } ],
[ ani_story => 'Story animation', serialize => sub { $self->{animated}[$_[0]] } ],
[ ani_ero => 'Ero animation', serialize => sub { $self->{animated}[$_[0]] } ],
+ [ engine => 'Engine' ],
[ producers => 'Producers', join => '<br />', split => sub {
map sprintf('<a href="/p%d" title="%s">%s</a> (%s)', $_->{id}, $_->{original}||$_->{name}, shorten($_->{name}, 50),
join(', ', $_->{developer} ? 'developer' :(), $_->{publisher} ? 'publisher' :())
@@ -187,6 +188,13 @@ sub _infotable {
end;
}
+ if(length $r->{engine}) {
+ Tr;
+ td 'Engine';
+ td $r->{engine};
+ end;
+ }
+
Tr;
td 'Released';
td;
@@ -294,7 +302,7 @@ sub edit {
my $vn = $rid ? $r->{vn} : [{ vid => $vid, title => $v->{title} }];
my %b4 = !$rid ? () : (
(map { $_ => $r->{$_} } qw|type title original gtin catalog languages website released minage
- notes platforms patch resolution voiced freeware doujin uncensored ani_story ani_ero ihid ilock|),
+ notes platforms patch resolution voiced freeware doujin uncensored ani_story ani_ero engine ihid ilock|),
media => join(',', sort map "$_->{medium} $_->{qty}", @{$r->{media}}),
producers => join('|||', map
sprintf('%d,%d,%s', $_->{id}, ($_->{developer}?1:0)+($_->{publisher}?2:0), $_->{name}),
@@ -328,6 +336,8 @@ sub edit {
{ post => 'voiced', required => 0, default => 0, enum => [ 0..$#{$self->{voiced}} ] },
{ post => 'ani_story', required => 0, default => 0, enum => [ 0..$#{$self->{animated}} ] },
{ post => 'ani_ero', required => 0, default => 0, enum => [ 0..$#{$self->{animated}} ] },
+ { post => 'engine', required => 0, default => '', maxlength => 50 },
+ { post => 'engine_oth',required => 0, default => '', maxlength => 50 },
{ post => 'producers', required => 0, default => '' },
{ post => 'vn', maxlength => 50000 },
{ post => 'editsum', template => 'editsum' },
@@ -335,6 +345,9 @@ sub edit {
{ post => 'ilock', required => 0 },
);
+ $frm->{engine} = $frm->{engine_oth} if $frm->{engine} eq '_other_';
+ delete $frm->{engine_oth};
+
push @{$frm->{_err}}, [ 'released', 'required', 1 ] if !$frm->{released};
my($media, $producers, $new_vn);
@@ -347,8 +360,11 @@ sub edit {
$frm->{$_} = $frm->{$_} ? 1 : 0 for (qw|patch freeware doujin uncensored ihid ilock|);
# reset some fields when the patch flag is set
- $frm->{doujin} = $frm->{voiced} = $frm->{ani_story} = $frm->{ani_ero} = 0 if $frm->{patch};
- $frm->{resolution} = 'unknown' if $frm->{patch};
+ if($frm->{patch}) {
+ $frm->{doujin} = $frm->{voiced} = $frm->{ani_story} = $frm->{ani_ero} = 0;
+ $frm->{resolution} = 'unknown';
+ $frm->{engine} = '';
+ }
$frm->{uncensored} = 0 if $frm->{minage} != 18;
my $same = $rid &&
@@ -364,7 +380,7 @@ sub edit {
if(!$frm->{_err}) {
my $nrev = $self->dbItemEdit(r => !$copy && $rid ? ($r->{id}, $r->{rev}) : (undef, undef),
(map { $_ => $frm->{$_} } qw| type title original gtin catalog languages website released minage
- notes platforms resolution editsum patch voiced freeware doujin uncensored ani_story ani_ero ihid ilock|),
+ notes platforms resolution editsum patch voiced freeware doujin uncensored ani_story ani_ero engine ihid ilock|),
vn => $new_vn,
producers => $producers,
media => $media,
@@ -424,6 +440,15 @@ sub _form {
rel_format => [ 'Format',
[ select => short => 'resolution', name => 'Resolution', options => [
map [ $_, @{$self->{resolutions}{$_}} ], keys %{$self->{resolutions}} ] ],
+ [ static => label => 'Engine', content => sub {
+ my $other = $frm->{engine} && !grep($_ eq $frm->{engine}, @{$self->{engines}});
+ Select name => 'engine', id => 'engine', tabindex => 10;
+ option value => $_, $frm->{engine} eq $_ ? (selected => 'selected') : (), $_ || 'Unknown'
+ for ('', @{$self->{engines}});
+ option value => '_other_', $other ? (selected => 'selected') : (), 'Other';
+ end;
+ input type => 'text', name => 'engine_oth', id => 'engine_oth', tabindex => 10, class => 'text '.($other ? '' : 'hidden'), value => $frm->{engine};
+ } ],
[ select => short => 'voiced', name => 'Voiced', options => [
map [ $_, $self->{voiced}[$_] ], 0..$#{$self->{voiced}} ] ],
[ select => short => 'ani_story', name => 'Story animation', options => [
diff --git a/lib/VNDB/Util/Misc.pm b/lib/VNDB/Util/Misc.pm
index 879dbdf7..d18d19ec 100644
--- a/lib/VNDB/Util/Misc.pm
+++ b/lib/VNDB/Util/Misc.pm
@@ -13,7 +13,7 @@ our @EXPORT = qw|filFetchDB filCompat bbSubstLinks|;
our %filfields = (
vn => [qw|date_before date_after released length hasani hasshot tag_inc tag_exc taginc tagexc tagspoil lang olang plat staff_inc staff_exc ul_notblack ul_onwish ul_voted ul_onlist|],
- release => [qw|type patch freeware doujin uncensored date_before date_after released minage lang olang resolution plat prod_inc prod_exc med voiced ani_story ani_ero|],
+ release => [qw|type patch freeware doujin uncensored date_before date_after released minage lang olang resolution plat prod_inc prod_exc med voiced ani_story ani_ero engine|],
char => [qw|gender bloodt bust_min bust_max waist_min waist_max hip_min hip_max height_min height_max va_inc va_exc weight_min weight_max trait_inc trait_exc tagspoil role|],
staff => [qw|gender role truename lang|],
);