summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2018-05-25 16:11:01 +0200
committerYorhel <git@yorhel.nl>2018-05-25 16:11:03 +0200
commitb0f7086211dd326ef612d30561ddc69e7abf98fb (patch)
tree6a076efdfbe348d95e8a9c2893a130814f549589
parent0a39d801c10fd644bbfd4c9c4f3e357e3c522788 (diff)
Add uncensored flag to release entries
As discussed in https://vndb.org/t10665
-rw-r--r--data/js/filter.js1
-rw-r--r--data/js/misc.js11
-rw-r--r--lib/VNDB/DB/Releases.pm13
-rw-r--r--lib/VNDB/Handler/Releases.pm19
-rw-r--r--lib/VNDB/Util/Misc.pm2
-rw-r--r--util/sql/schema.sql6
-rw-r--r--util/updates/update_20180525.sql5
7 files changed, 42 insertions, 15 deletions
diff --git a/data/js/filter.js b/data/js/filter.js
index 3e4b2371..0103cc2a 100644
--- a/data/js/filter.js
+++ b/data/js/filter.js
@@ -547,6 +547,7 @@ function filReleases() {
filFOptions('patch', 'Patch status', [ [1, 'Patch'], [0, 'Standalone'] ]),
filFOptions('freeware', 'Freeware', [ [1, 'Only freeware'], [0, 'Only non-free releases'] ]),
filFOptions('doujin', 'Doujin', [ [1, 'Only doujin releases'], [0, 'Only commercial releases'] ]),
+ filFOptions('uncensored','Censoring', [ [1, 'Only uncensored releases'], [0, 'Censored or non-erotic releases'] ]),
[ 'date_after', 'Released after', dateLoad(null, selectField), function (c) { return [c.date_val] }, function(o,v) { o.dateSet(v) } ],
[ 'date_before', 'Released before', dateLoad(null, selectField), function (c) { return [c.date_val] }, function(o,v) { o.dateSet(v) } ],
filFOptions('released', 'Release date', [ [1, 'Past (already released)'], [0, 'Future (to be released)'] ])
diff --git a/data/js/misc.js b/data/js/misc.js
index 85f25f10..81f2890f 100644
--- a/data/js/misc.js
+++ b/data/js/misc.js
@@ -179,7 +179,8 @@ if(location.hostname != 'vndb.org') {
})();
-// make some fields readonly when patch flag is set (/r+/edit)
+// make some fields readonly when patch flag is set and hide uncensored
+// checkbox when age rating isn't 18+ (/r+/edit)
(function(){
function sync() {
byId('doujin').disabled =
@@ -188,10 +189,16 @@ if(location.hostname != 'vndb.org') {
byId('ani_story').disabled =
byId('ani_ero').disabled =
byId('patch').checked;
+
+ setClass(
+ byId('uncensored').parentNode.parentNode,
+ 'hidden',
+ byId('minage').options[byId('minage').selectedIndex].value != 18
+ );
};
if(byId('jt_box_rel_geninfo')) {
sync();
- byId('patch').onclick = sync;
+ byId('patch').onclick = byId('minage').onclick = sync;
}
})();
diff --git a/lib/VNDB/DB/Releases.pm b/lib/VNDB/DB/Releases.pm
index c54ea1a3..1a01f712 100644
--- a/lib/VNDB/DB/Releases.pm
+++ b/lib/VNDB/DB/Releases.pm
@@ -16,8 +16,9 @@ sub dbReleaseFilters {
$o{plat} = [ $o{plat} ] if $o{plat} && !ref $o{plat};
$o{med} = [ $o{med} ] if $o{med} && !ref $o{med};
return (
- defined $o{patch} ? ( 'r.patch = ?' => $o{patch} == 1 ? 1 : 0) : (),
- defined $o{freeware} ? ( 'r.freeware = ?' => $o{freeware} == 1 ? 1 : 0) : (),
+ defined $o{patch} ? ( 'r.patch = ?' => $o{patch} == 1 ? 1 : 0) : (),
+ defined $o{freeware} ? ( 'r.freeware = ?' => $o{freeware} == 1 ? 1 : 0) : (),
+ defined $o{uncensored} ? ( 'r.uncensored = ?' => $o{uncensored} == 1 ? 1 : 0) : (),
defined $o{type} ? ( 'r.type = ?' => $o{type} ) : (),
defined $o{date_before} ? ( 'r.released <= ?' => $o{date_before} ) : (),
defined $o{date_after} ? ( 'r.released >= ?' => $o{date_after} ) : (),
@@ -45,7 +46,7 @@ sub dbReleaseFilters {
# Options: id vid pid released page results what med sort reverse date_before date_after
-# plat lang olang type minage search resolution freeware doujin voiced ani_story ani_ero hidden_only
+# plat lang olang type minage search resolution freeware doujin voiced uncensored ani_story ani_ero hidden_only
# What: extended vn producers platforms media affiliates
# Sort: title released minage
sub dbReleaseGet {
@@ -83,7 +84,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.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.hidden r.locked| : (),
$o{pid} ? ('rp.developer', 'rp.publisher') : (),
);
@@ -121,7 +122,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.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, 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';
@@ -212,7 +213,7 @@ sub dbReleaseRevisionInsert {
my %set = map exists($o->{$_}) ? ("$_ = ?", $o->{$_}) : (),
qw|title original gtin catalog website released notes minage type
- patch resolution voiced freeware doujin ani_story ani_ero|;
+ patch resolution voiced freeware doujin uncensored ani_story ani_ero|;
$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 073ea82d..d69d20af 100644
--- a/lib/VNDB/Handler/Releases.pm
+++ b/lib/VNDB/Handler/Releases.pm
@@ -50,6 +50,7 @@ sub page {
[ patch => 'Patch', serialize => sub { $_[0] ? 'Yes' : 'No' } ],
[ freeware => 'Freeware', serialize => sub { $_[0] ? 'Yes' : 'No' } ],
[ doujin => 'Doujin', serialize => sub { $_[0] ? 'Yes' : 'No' } ],
+ [ uncensored => 'Uncensored', serialize => sub { $_[0] ? 'Yes' : 'No' } ],
[ title => 'Title (romaji)', diff => 1 ],
[ original => 'Original title', diff => 1 ],
[ gtin => 'JAN/UPC/EAN', serialize => sub { $_[0]||'[empty]' } ],
@@ -200,6 +201,13 @@ sub _infotable {
end;
}
+ if($r->{minage} == 18) {
+ Tr;
+ td 'Censoring';
+ td $r->{uncensored} ? 'No optical censoring (e.g. mosaics)' : 'May include optical censoring (e.g. mosaics)';
+ end;
+ }
+
for my $t (qw|developer publisher|) {
my @prod = grep $_->{$t}, @{$r->{producers}};
if(@prod) {
@@ -286,7 +294,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 ani_story ani_ero ihid ilock|),
+ notes platforms patch resolution voiced freeware doujin uncensored ani_story ani_ero 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}),
@@ -304,6 +312,7 @@ sub edit {
{ post => 'patch', required => 0, default => 0 },
{ post => 'freeware', required => 0, default => 0 },
{ post => 'doujin', required => 0, default => 0 },
+ { post => 'uncensored',required => 0, default => 0 },
{ post => 'title', maxlength => 250 },
{ post => 'original', required => 0, default => '', maxlength => 250 },
{ post => 'gtin', required => 0, default => '0', template => 'gtin' },
@@ -335,10 +344,11 @@ sub edit {
$producers = [ map { /^([0-9]+),([1-3])/ ? [ $1, $2&1?1:0, $2&2?1:0] : () } split /\|\|\|/, $frm->{producers} ];
$new_vn = [ map { /^([0-9]+)/ ? $1 : () } split /\|\|\|/, $frm->{vn} ];
$frm->{platforms} = [ grep $_, @{$frm->{platforms}} ];
- $frm->{$_} = $frm->{$_} ? 1 : 0 for (qw|patch freeware doujin ihid ilock|);
+ $frm->{$_} = $frm->{$_} ? 1 : 0 for (qw|patch freeware doujin uncensored ihid ilock|);
# reset some fields when the patch flag is set
$frm->{doujin} = $frm->{resolution} = $frm->{voiced} = $frm->{ani_story} = $frm->{ani_ero} = 0 if $frm->{patch};
+ $frm->{uncensored} = 0 if $frm->{minage} != 18;
my $same = $rid &&
(join(',', sort @{$b4{platforms}}) eq join(',', sort @{$frm->{platforms}})) &&
@@ -353,7 +363,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 ani_story ani_ero ihid ilock|),
+ notes platforms resolution editsum patch voiced freeware doujin uncensored ani_story ani_ero ihid ilock|),
vn => $new_vn,
producers => $producers,
media => $media,
@@ -403,10 +413,11 @@ sub _form {
[ static => content => 'Leave month or day blank if they are unknown' ],
[ select => short => 'minage', name => 'Age rating',
options => [ map [ $_, minage $_, 1 ], @{$self->{age_ratings}} ] ],
+ [ check => short => 'uncensored',name => 'No mosaic or other optical censoring (only check if this release has erotic content)' ],
[ textarea => short => 'notes', name => 'Notes<br /><b class="standout">English please!</b>' ],
[ static => content =>
'Miscellaneous notes/comments, information that does not fit in the above fields.'
- .' E.g.: Censored/uncensored or for which releases this patch applies.' ],
+ .' E.g.: Types of censoring or for which releases this patch applies.' ],
],
rel_format => [ 'Format',
diff --git a/lib/VNDB/Util/Misc.pm b/lib/VNDB/Util/Misc.pm
index efecbb64..660818a2 100644
--- a/lib/VNDB/Util/Misc.pm
+++ b/lib/VNDB/Util/Misc.pm
@@ -13,7 +13,7 @@ our @EXPORT = qw|filFetchDB bbSubstLinks|;
our %filfields = (
vn => [qw|date_before date_after released length hasani hasshot 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|],
+ release => [qw|type patch freeware doujin uncensored 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|],
staff => [qw|gender role truename lang|],
);
diff --git a/util/sql/schema.sql b/util/sql/schema.sql
index c580894f..02f15e09 100644
--- a/util/sql/schema.sql
+++ b/util/sql/schema.sql
@@ -265,7 +265,8 @@ CREATE TABLE releases ( -- dbentry_type=r
resolution smallint NOT NULL DEFAULT 0,
voiced smallint NOT NULL DEFAULT 0,
ani_story smallint NOT NULL DEFAULT 0,
- ani_ero smallint NOT NULL DEFAULT 0
+ ani_ero smallint NOT NULL DEFAULT 0,
+ uncensored boolean NOT NULL DEFAULT FALSE
);
-- releases_hist
@@ -286,7 +287,8 @@ CREATE TABLE releases_hist (
resolution smallint NOT NULL DEFAULT 0,
voiced smallint NOT NULL DEFAULT 0,
ani_story smallint NOT NULL DEFAULT 0,
- ani_ero smallint NOT NULL DEFAULT 0
+ ani_ero smallint NOT NULL DEFAULT 0,
+ uncensored boolean NOT NULL DEFAULT FALSE
);
-- releases_lang
diff --git a/util/updates/update_20180525.sql b/util/updates/update_20180525.sql
index 2196cb17..f71b0d52 100644
--- a/util/updates/update_20180525.sql
+++ b/util/updates/update_20180525.sql
@@ -2,3 +2,8 @@ SELECT edit_d_init(NULL, NULL);
UPDATE edit_revision SET requester = 1, comments = 'Empty page', ip = '0.0.0.0';
UPDATE edit_docs SET title = 'Privacy Policy';
SELECT edit_d_commit();
+
+
+ALTER TABLE releases ADD COLUMN uncensored boolean NOT NULL DEFAULT FALSE;
+ALTER TABLE releases_hist ADD COLUMN uncensored boolean NOT NULL DEFAULT FALSE;
+\i util/sql/editfunc.sql