summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog1
-rw-r--r--Makefile7
-rw-r--r--data/global.pl2
-rw-r--r--lib/Multi/API.pm2
-rw-r--r--lib/VNDB/DB/Releases.pm11
-rw-r--r--lib/VNDB/Func.pm2
-rw-r--r--lib/VNDB/Handler/Producers.pm2
-rw-r--r--lib/VNDB/Handler/Releases.pm18
-rw-r--r--lib/VNDB/Handler/VNPage.pm2
-rwxr-xr-xutil/jsgen.pl2
-rw-r--r--util/updates/update_2.16.sql6
11 files changed, 28 insertions, 27 deletions
diff --git a/ChangeLog b/ChangeLog
index c1e85302..1a6f3616 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
2.16 - ?
- VNDBUtil::bb2html(): Fixed bug when the string starts with a VNDBID
- Fixed perl warning on /v/search redirect without search query
+ - Don't allow NULL for rr.minage and use -1 for unknown
2.15 - 2010-12-15
- Removed expand/collapse from history browser and /u+/posts and switched to
diff --git a/Makefile b/Makefile
index 6c8b45bf..4afd0f59 100644
--- a/Makefile
+++ b/Makefile
@@ -38,7 +38,7 @@
.PHONY: all dirs js skins robots chmod chmod-tladmin multi-stop multi-start multi-restart\
- sql-import update-2.10 update-2.11 update-2.12 update-2.13 update-2.14
+ sql-import update-2.10 update-2.11 update-2.12 update-2.13 update-2.14 update-2.15 update-2.16
all: dirs js skins robots data/config.pl
@@ -158,3 +158,8 @@ update-2.15: all
$(multi-stop)
${runpsql} < util/updates/update_2.15.sql
$(multi-start)
+
+update-2.16: all
+ $(multi-stop)
+ ${runpsql} < util/updates/update_2.16.sql
+ $(multi-start)
diff --git a/data/global.pl b/data/global.pl
index 95d966b5..284b1367 100644
--- a/data/global.pl
+++ b/data/global.pl
@@ -64,7 +64,7 @@ our %S = (%S,
'imp' => [ 6, 'ipa' ],
'ipa' => [ 7, 'imp' ],
},
- age_ratings => [undef, 0, 6..18],
+ age_ratings => [-1, 0, 6..18],
release_types => [qw|complete partial trial|],
platforms => [qw|win dos lin mac ios dvd gba msx nds nes p98 psp ps1 ps2 ps3 drc sat sfc wii xb3 oth|],
media => {
diff --git a/lib/Multi/API.pm b/lib/Multi/API.pm
index 4872acf9..3f1b24c4 100644
--- a/lib/Multi/API.pm
+++ b/lib/Multi/API.pm
@@ -648,7 +648,7 @@ sub get_release_res {
if(grep /details/, @{$get->{info}}) {
$_->{website} ||= undef;
$_->{notes} ||= undef;
- $_->{minage} *= 1 if defined $_->{minage};
+ $_->{minage} = $_->{minage} < 0 ? undef : $_->{minage}*1;
$_->{gtin} ||= undef;
$_->{catalog} ||= undef;
}
diff --git a/lib/VNDB/DB/Releases.pm b/lib/VNDB/DB/Releases.pm
index b0fb9a89..ffffb2a6 100644
--- a/lib/VNDB/DB/Releases.pm
+++ b/lib/VNDB/DB/Releases.pm
@@ -32,6 +32,7 @@ sub dbReleaseGet {
defined $o{type} ? ( 'rr.type = ?' => $o{type} ) : (),
defined $o{date_before} ? ( 'rr.released <= ?' => $o{date_before} ) : (),
defined $o{date_after} ? ( 'rr.released >= ?' => $o{date_after} ) : (),
+ defined $o{minage} ? ( 'rr.minage IN(!l)' => [ ref $o{minage} ? $o{minage} : [$o{minage}] ] ) : (),
defined $o{resolution} ? ( 'rr.resolution IN(!l)' => [ ref $o{resolution} ? $o{resolution} : [$o{resolution}] ] ) : (),
defined $o{voiced} ? ( 'rr.voiced IN(!l)' => [ ref $o{voiced} ? $o{voiced} : [$o{voiced}] ] ) : (),
defined $o{ani_story} ? ( 'rr.ani_story IN(!l)' => [ ref $o{ani_story} ? $o{ani_story} : [$o{ani_story}] ] ) : (),
@@ -47,16 +48,6 @@ sub dbReleaseGet {
'rr.id IN(SELECT irm.rid FROM releases_media irm JOIN releases ir ON ir.latest = irm.rid WHERE irm.medium IN(!l))' => [ ref $o{med} ? $o{med} : [ $o{med} ] ] ) : (),
);
- # TODO: don't allow NULL for rr.minage after all, since this could be a lot easier...
- if(exists $o{minage}) {
- my @m = ref $o{minage} ? @{$o{minage}} : ($o{minage});
- my @w = (
- grep(!defined $_ || $_ == -1, @m) ? 'rr.minage IS NULL' : (),
- grep(defined $_ && $_ != -1, @m) ? 'rr.minage IN(!s)' : ()
- );
- push @where, '('.join(' OR ', @w).')', [ grep defined $_ && $_ != -1, @m ];
- }
-
if($o{search}) {
for (split /[ -,._]/, $o{search}) {
s/%//g;
diff --git a/lib/VNDB/Func.pm b/lib/VNDB/Func.pm
index 65b66f9e..dcec9e8f 100644
--- a/lib/VNDB/Func.pm
+++ b/lib/VNDB/Func.pm
@@ -82,7 +82,7 @@ sub mt {
sub minage {
my($a, $ex) = @_;
- my $str = !defined($a) ? mt '_minage_null' : !$a ? mt '_minage_all' : mt '_minage_age', $a;
+ my $str = $a == -1 ? mt '_minage_null' : !$a ? mt '_minage_all' : mt '_minage_age', $a;
$ex = !defined($a) ? '' : {
0 => 'CERO A',
12 => 'CERO B',
diff --git a/lib/VNDB/Handler/Producers.pm b/lib/VNDB/Handler/Producers.pm
index 6e11e829..d6308593 100644
--- a/lib/VNDB/Handler/Producers.pm
+++ b/lib/VNDB/Handler/Producers.pm
@@ -162,7 +162,7 @@ sub _releases {
for my $rel (@{$vn{$v->{vid}}}) {
Tr class => 'rel';
td class => 'tc1'; lit $self->{l10n}->datestr($rel->{released}); end;
- td class => 'tc2', !defined($rel->{minage}) ? '' : minage $rel->{minage};
+ td class => 'tc2', $rel->{minage} < 0 ? '' : minage $rel->{minage};
td class => 'tc3';
for (sort @{$rel->{platforms}}) {
next if $_ eq 'oth';
diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm
index ce5c62c2..218389ee 100644
--- a/lib/VNDB/Handler/Releases.pm
+++ b/lib/VNDB/Handler/Releases.pm
@@ -190,7 +190,7 @@ sub _infotable {
end;
end;
- if(defined $r->{minage}) {
+ if($r->{minage} >= 0) {
Tr ++$i % 2 ? (class => 'odd') : ();
td mt '_relinfo_minage';
td minage $r->{minage};
@@ -287,9 +287,8 @@ 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
+ (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|),
- minage => defined($r->{minage}) ? $r->{minage} : -1,
media => join(',', sort map "$_->{medium} $_->{qty}", @{$r->{media}}),
producers => join('|||', map
sprintf('%d,%d,%s', $_->{id}, ($_->{developer}?1:0)+($_->{publisher}?2:0), $_->{name}),
@@ -315,7 +314,7 @@ sub edit {
{ name => 'languages', multi => 1, enum => $self->{languages} },
{ name => 'website', required => 0, default => '', maxlength => 250, template => 'url' },
{ name => 'released', required => 0, default => 0, template => 'int' },
- { name => 'minage' , required => 0, default => -1, enum => [map !defined($_)?-1:$_, @{$self->{age_ratings}}] },
+ { name => 'minage' , required => 0, default => -1, enum => $self->{age_ratings} },
{ name => 'notes', required => 0, default => '', maxlength => 10240 },
{ name => 'platforms', required => 0, default => '', multi => 1, enum => $self->{platforms} },
{ name => 'media', required => 0, default => '' },
@@ -356,9 +355,8 @@ sub edit {
if(!$frm->{_err}) {
my $nrev = $self->dbItemEdit(r => !$copy && $rid ? $r->{cid} : undef,
- (map { $_ => $frm->{$_} } qw| type title original gtin catalog languages website released
+ (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|),
- minage => $frm->{minage} < 0 ? undef : $frm->{minage},
vn => $new_vn,
producers => $producers,
media => $media,
@@ -406,7 +404,7 @@ sub _form {
[ date => short => 'released', name => mt('_redit_form_released') ],
[ static => content => mt('_redit_form_released_note') ],
[ select => short => 'minage', name => mt('_redit_form_minage'),
- options => [ map [ !defined($_)?-1:$_, minage $_, 1 ], @{$self->{age_ratings}} ] ],
+ options => [ map [ $_, minage $_, 1 ], @{$self->{age_ratings}} ] ],
[ textarea => short => 'notes', name => mt('_redit_form_notes').'<br /><b class="standout">'.mt('_inenglish').'</b>' ],
[ static => content => mt('_redit_form_notes_note') ],
],
@@ -538,7 +536,7 @@ sub browse {
td class => 'tc1';
lit $self->{l10n}->datestr($l->{released});
end;
- td class => 'tc2', !defined($l->{minage}) ? '' : minage $l->{minage};
+ td class => 'tc2', $l->{minage} < 0 ? '' : minage $l->{minage};
td class => 'tc3';
$_ ne 'oth' && cssicon $_, mt "_plat_$_" for (@{$l->{platforms}});
cssicon "lang $_", mt "_lang_$_" for (@{$l->{languages}});
@@ -575,13 +573,13 @@ sub _fil_compat {
{ name => 'fw', required => 0, default => 0, enum => [ 0..2 ] },
{ name => 'do', required => 0, default => 0, enum => [ 0..2 ] },
{ name => 'ma_m', required => 0, default => 0, enum => [ 0, 1 ] },
- { name => 'ma_a', required => 0, default => 0, enum => [ grep defined($_), @{$self->{age_ratings}} ] },
+ { name => 'ma_a', required => 0, default => 0, enum => $self->{age_ratings} },
{ name => 'mi', required => 0, default => 0, template => 'int' },
{ name => 'ma', required => 0, default => 99999999, template => 'int' },
{ name => 're', required => 0, multi => 1, default => 0, enum => [ 1..$#{$self->{resolutions}} ] },
);
return if $f->{_err};
- $fil->{minage} //= [ grep defined($_) && $f->{ma_m} ? $f->{ma_a} >= $_ : defined ($_) && $f->{ma_a} <= $_, @{$self->{age_ratings}} ] if $f->{ma_a} || $f->{ma_m};
+ $fil->{minage} //= [ grep $_ >= 0 && ($f->{ma_m} ? $f->{ma_a} >= $_ : $f->{ma_a} <= $_), @{$self->{age_ratings}} ] if $f->{ma_a} || $f->{ma_m};
$fil->{date_after} //= $f->{mi} if $f->{mi};
$fil->{date_before} //= $f->{ma} if $f->{ma} < 99990000;
$fil->{plat} //= $f->{pl} if $f->{pl}[0];
diff --git a/lib/VNDB/Handler/VNPage.pm b/lib/VNDB/Handler/VNPage.pm
index 1a3eb514..5747acba 100644
--- a/lib/VNDB/Handler/VNPage.pm
+++ b/lib/VNDB/Handler/VNPage.pm
@@ -406,7 +406,7 @@ sub _releases {
for my $rel (grep grep($_ eq $l, @{$_->{languages}}), @$r) {
Tr;
td class => 'tc1'; lit $self->{l10n}->datestr($rel->{released}); end;
- td class => 'tc2', !defined($rel->{minage}) ? '' : minage $rel->{minage};
+ td class => 'tc2', $rel->{minage} < 0 ? '' : minage $rel->{minage};
td class => 'tc3';
for (sort @{$rel->{platforms}}) {
next if $_ eq 'oth';
diff --git a/util/jsgen.pl b/util/jsgen.pl
index 4af20b27..c1a9593b 100755
--- a/util/jsgen.pl
+++ b/util/jsgen.pl
@@ -104,7 +104,7 @@ sub jsgen {
$common .= sprintf "rlst_rstat = [ %s ];\n", join ', ', map qq{"$_"}, @{$S{rlst_rstat}};
$common .= sprintf "rlst_vstat = [ %s ];\n", join ', ', map qq{"$_"}, @{$S{rlst_vstat}};
$common .= sprintf "cookie_prefix = '%s';\n", $S{cookie_prefix};
- $common .= sprintf "age_ratings = [ %s ];\n", join ',', map !defined $_ ? -1 : $_, @{$S{age_ratings}};
+ $common .= sprintf "age_ratings = [ %s ];\n", join ',', map @{$S{age_ratings}};
$common .= sprintf "languages = [ %s ];\n", join ', ', map qq{"$_"}, @{$S{languages}};
$common .= sprintf "platforms = [ %s ];\n", join ', ', map qq{"$_"}, @{$S{platforms}};
$common .= sprintf "media = [ %s ];\n", join ', ', map qq{"$_"}, sort keys %{$S{media}};
diff --git a/util/updates/update_2.16.sql b/util/updates/update_2.16.sql
new file mode 100644
index 00000000..8ffbd6ae
--- /dev/null
+++ b/util/updates/update_2.16.sql
@@ -0,0 +1,6 @@
+
+-- remove the NOT NULL from rr.minage and use -1 when unknown
+UPDATE releases_rev SET minage = -1 WHERE minage IS NULL;
+ALTER TABLE releases_rev ALTER COLUMN minage SET DEFAULT -1;
+ALTER TABLE releases_rev ALTER COLUMN minage DROP NOT NULL;
+