diff options
author | Yorhel <git@yorhel.nl> | 2009-11-14 10:50:22 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2009-11-14 10:51:53 +0100 |
commit | 0a4f97f0186d6941a4cab2e3bd05201f1fed1441 (patch) | |
tree | 9437668b84a87b5d2ca516f7b3f706dbefebf732 | |
parent | 615b7bd42d96566e9cb1db5bb36870b87817af2f (diff) |
SQL/L10N: Allow NULL for releases_rev.minage and make the values translatable
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | data/global.pl | 18 | ||||
-rw-r--r-- | data/lang.txt | 30 | ||||
-rw-r--r-- | lib/Multi/API.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/DB/Releases.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/DB/ULists.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/Func.pm | 17 | ||||
-rw-r--r-- | lib/VNDB/Handler/Releases.pm | 25 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNPage.pm | 2 | ||||
-rw-r--r-- | util/dump.sql | 2 | ||||
-rw-r--r-- | util/updates/update_2.9.sql | 8 |
11 files changed, 75 insertions, 35 deletions
@@ -6,6 +6,8 @@ git - ? - Added [code] tag to bb2html() - Tweaked Multi's idlequote timings - Added :SUBSUB: macro to the doc pages + - Allow NULL values for releases_rev.minage + - Made age ratings translatable 2.8 - 2009-10-24 - Converted relation graphs to use inline SVG diff --git a/data/global.pl b/data/global.pl index 8edd25fa..b67ae2f7 100644 --- a/data/global.pl +++ b/data/global.pl @@ -59,23 +59,7 @@ our %S = (%S, 'spa' => [ 6, 'ori' ], 'ori' => [ 7, 'spa' ], }, - age_ratings => { - -1 => [ 'Unknown' ], - 0 => [ 'All ages' ,'CERO A' ], - 6 => [ '6+' ], - 7 => [ '7+' ], - 8 => [ '8+' ], - 9 => [ '9+' ], - 10 => [ '10+' ], - 11 => [ '11+' ], - 12 => [ '12+', 'CERO B' ], - 13 => [ '13+' ], - 14 => [ '14+' ], - 15 => [ '15+', 'CERO C' ], - 16 => [ '16+' ], - 17 => [ '17+', 'CERO D' ], - 18 => [ '18+', 'CERO Z' ], - }, + age_ratings => [undef, 0, 6..18], release_types => [qw|complete partial trial|], platforms => [qw|win dos lin mac dvd gba msx nds nes p98 psp ps1 ps2 ps3 drc sat sfc wii xb3 oth|], media => { diff --git a/data/lang.txt b/data/lang.txt index 935fb1e1..3b4a9ff0 100644 --- a/data/lang.txt +++ b/data/lang.txt @@ -997,6 +997,36 @@ cs : Vyřazeno hu : Lemondva +# Age ratings + +:_minage_null +en : Unknown +ru*: +cs*: +hu*: + +:_minage_all +en : All ages +ru*: +cs*: +hu*: + +# "Ages [_1] and up", but shorter +:_minage_age +en : [_1]+ +ru*: +cs*: +hu*: + +# [_1] is an example of an age rating, like 'CERO A', 'CERO D', etc. +# this string is appended to the other _minage_* strings +:_minage_example +en : (e.g. [_1]) +ru*: +cs*: +hu*: + + # Form messages :_formerr_e_login_failed diff --git a/lib/Multi/API.pm b/lib/Multi/API.pm index 47dbafea..8da59de6 100644 --- a/lib/Multi/API.pm +++ b/lib/Multi/API.pm @@ -624,7 +624,7 @@ sub get_release_res { if(grep /details/, @{$get->{info}}) { $_->{website} ||= undef; $_->{notes} ||= undef; - $_->{minage} = $_->{minage} < 0 ? undef : $_->{minage}*1; + $_->{minage} *= 1 if defined $_->{minage}; $_->{gtin} ||= undef; $_->{catalog} ||= undef; } diff --git a/lib/VNDB/DB/Releases.pm b/lib/VNDB/DB/Releases.pm index 9260b787..d7bddaab 100644 --- a/lib/VNDB/DB/Releases.pm +++ b/lib/VNDB/DB/Releases.pm @@ -40,7 +40,7 @@ sub dbReleaseGet { defined $o{type} ? ( 'rr.type = ?' => $o{type} ) : (), $o{minage} ? ( - '(rr.minage !s ? AND rr.minage <> -1)' => [ $o{minage}[0] ? '<=' : '>=', $o{minage}[1] ] ) : (), + 'rr.minage !s ?' => [ $o{minage}[0] ? '<=' : '>=', $o{minage}[1] ] ) : (), $o{media} ? ( 'rr.id IN(SELECT irm.rid FROM releases_media irm JOIN releases ir ON ir.latest = irm.rid WHERE irm.medium IN(!l))' => [ $o{media} ] ) : (), $o{resolutions} ? ( diff --git a/lib/VNDB/DB/ULists.pm b/lib/VNDB/DB/ULists.pm index e9b38e57..0f54686c 100644 --- a/lib/VNDB/DB/ULists.pm +++ b/lib/VNDB/DB/ULists.pm @@ -78,7 +78,7 @@ sub dbVNListList { } @$r; my $rel = $self->dbAll(q| - SELECT rv.vid, rr.rid, r.latest, rr.title, rr.original, rr.released, rr.type, rr.minage, rl.rstat, rl.vstat + SELECT rv.vid, rr.rid, r.latest, rr.title, rr.original, rr.released, rr.type, rl.rstat, rl.vstat FROM rlists rl JOIN releases r ON rl.rid = r.id JOIN releases_rev rr ON rr.id = r.latest diff --git a/lib/VNDB/Func.pm b/lib/VNDB/Func.pm index 49df0121..1801e3b8 100644 --- a/lib/VNDB/Func.pm +++ b/lib/VNDB/Func.pm @@ -6,7 +6,7 @@ use warnings; use YAWF ':html'; use Exporter 'import'; use POSIX 'strftime', 'ceil', 'floor'; -our @EXPORT = qw| shorten bb2html gtintype liststat clearfloat cssicon tagscore mt |; +our @EXPORT = qw| shorten bb2html gtintype liststat clearfloat cssicon tagscore mt minage |; # I would've done this as a #define if this was C... @@ -221,5 +221,20 @@ sub mt { } +sub minage { + my($a, $ex) = @_; + my $str = !defined($a) ? mt '_minage_null' : !$a ? mt '_minage_all' : mt '_minage_age', $a; + $ex = !defined($a) ? '' : { + 0 => 'CERO A', + 12 => 'CERO B', + 15 => 'CERO C', + 17 => 'CERO D', + 18 => 'CERO Z', + }->{$a} if $ex; + return $str if !$ex; + return $str.' '.mt('_minage_example', $ex); +} + + 1; diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm index 7365f235..daeffb9e 100644 --- a/lib/VNDB/Handler/Releases.pm +++ b/lib/VNDB/Handler/Releases.pm @@ -50,7 +50,7 @@ sub page { [ languages => join => ', ', split => sub { map mt("_lang_$_"), @{$_[0]} } ], [ 'website' ], [ released => htmlize => sub { $self->{l10n}->datestr($_[0]) } ], - [ minage => serialize => sub { $self->{age_ratings}{$_[0]}[0] } ], + [ minage => serialize => \&minage ], [ notes => diff => 1 ], [ platforms => join => ', ', split => sub { map mt("_plat_$_"), @{$_[0]} } ], [ media => join => ', ', split => sub { @@ -189,10 +189,10 @@ sub _infotable { end; end; - if($r->{minage} >= 0) { + if(defined $r->{minage}) { Tr ++$i % 2 ? (class => 'odd') : (); td mt '_relinfo_minage'; - td $self->{age_ratings}{$r->{minage}}[0]; + td minage $r->{minage}; end; } @@ -287,7 +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 - notes minage platforms patch resolution voiced freeware doujin ani_story ani_ero|), + notes platforms patch resolution voiced freeware doujin ani_story ani_ero|), + 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}), @@ -311,7 +312,7 @@ sub edit { { name => 'languages', multi => 1, enum => $self->{languages} }, { name => 'website', required => 0, default => '', template => 'url' }, { name => 'released', required => 0, default => 0, template => 'int' }, - { name => 'minage' , required => 0, default => -1, enum => [ keys %{$self->{age_ratings}} ] }, + { name => 'minage' , required => 0, default => -1, enum => [map !defined($_)?-1:$_, @{$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 => '' }, @@ -349,7 +350,8 @@ sub edit { if(!$frm->{_err}) { my %opts = ( (map { $_ => $frm->{$_} } qw| type title original gtin catalog languages website released - notes minage platforms resolution editsum patch voiced freeware doujin ani_story ani_ero|), + notes platforms resolution editsum patch voiced freeware doujin ani_story ani_ero|), + minage => $frm->{minage} < 0 ? undef : $frm->{minage}, vn => $new_vn, producers => $producers, media => $media, @@ -403,8 +405,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 [ $_, $self->{age_ratings}{$_}[0].($self->{age_ratings}{$_}[1]?" (e.g. $self->{age_ratings}{$_}[1])":'') ], - sort { $a <=> $b } keys %{$self->{age_ratings}} ] ], + options => [ map [ !defined($_)?-1:$_, 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') ], ], @@ -495,7 +496,7 @@ sub browse { { 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 => [ keys %{$self->{age_ratings}} ] }, + { name => 'ma_a', required => 0, default => 0, enum => [ grep defined($_), @{$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}} ] }, @@ -550,7 +551,7 @@ sub browse { td class => 'tc1'; lit $self->{l10n}->datestr($l->{released}); end; - td class => 'tc2', $l->{minage} > -1 ? $self->{age_ratings}{$l->{minage}}[0] : ''; + td class => 'tc2', !defined($l->{minage}) ? '' : minage $l->{minage}; td class => 'tc3'; $_ ne 'oth' && cssicon $_, mt "_plat_$_" for (@{$l->{platforms}}); cssicon "lang $_", mt "_lang_$_" for (@{$l->{languages}}); @@ -599,8 +600,8 @@ sub _filters { option value => 1, $f->{ma_m} == 1 ? ('selected' => 'selected') : (), mt '_rbrowse_le'; end; Select id => 'ma_a', name => 'ma_a', style => 'width: 80px; text-align: center'; - $_>=0 && option value => $_, $f->{ma_a} == $_ ? ('selected' => 'selected') : (), $self->{age_ratings}{$_}[0] - for (sort { $a <=> $b } keys %{$self->{age_ratings}}); + defined($_) && option value => $_, $f->{ma_a} == $_ ? ('selected' => 'selected') : (), minage $_ + for (@{$self->{age_ratings}}); end; end; td rowspan => 5, style => 'padding-left: 40px'; diff --git a/lib/VNDB/Handler/VNPage.pm b/lib/VNDB/Handler/VNPage.pm index ec5f4afc..7a258d5a 100644 --- a/lib/VNDB/Handler/VNPage.pm +++ b/lib/VNDB/Handler/VNPage.pm @@ -398,7 +398,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', $rel->{minage} < 0 ? '' : $self->{age_ratings}{$rel->{minage}}[0]; + td class => 'tc2', !defined($rel->{minage}) ? '' : minage $rel->{minage}; td class => 'tc3'; for (sort @{$rel->{platforms}}) { next if $_ eq 'oth'; diff --git a/util/dump.sql b/util/dump.sql index cd6f9434..8edf56c5 100644 --- a/util/dump.sql +++ b/util/dump.sql @@ -129,7 +129,7 @@ CREATE TABLE releases_rev ( website varchar(250) NOT NULL DEFAULT '', released integer NOT NULL, notes text NOT NULL DEFAULT '', - minage smallint NOT NULL DEFAULT -1, + minage smallint, gtin bigint NOT NULL DEFAULT 0, patch boolean NOT NULL DEFAULT FALSE, catalog varchar(50) NOT NULL DEFAULT '', diff --git a/util/updates/update_2.9.sql b/util/updates/update_2.9.sql index ee2570fb..4321f898 100644 --- a/util/updates/update_2.9.sql +++ b/util/updates/update_2.9.sql @@ -30,3 +30,11 @@ BEGIN END; $$ LANGUAGE plpgsql; SELECT tag_vn_calc(); + + + +-- releases_rev.minage should accept NULL +ALTER TABLE releases_rev ALTER COLUMN minage DROP NOT NULL; +ALTER TABLE releases_rev ALTER COLUMN minage DROP DEFAULT; +UPDATE releases_rev SET minage = NULL WHERE minage < 0; + |