summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2013-01-21 13:34:49 +0100
committerYorhel <git@yorhel.nl>2013-01-21 13:37:28 +0100
commitacae2bea4397c84aae5610a375a9b8119ddc5645 (patch)
tree12a8640ca9ce5076d9245ec31d27ff7f6189ba2a
parent6f5d0ae1bacab24e4ba9c854501930572f84d256 (diff)
Added "unknown platform" release filter
-rw-r--r--data/global.pl1
-rw-r--r--data/script.js1
-rw-r--r--lib/VNDB/DB/Releases.pm7
3 files changed, 7 insertions, 2 deletions
diff --git a/data/global.pl b/data/global.pl
index 90f1c448..30abb2aa 100644
--- a/data/global.pl
+++ b/data/global.pl
@@ -63,6 +63,7 @@ our %S = (%S,
},
age_ratings => [-1, 0, 6..18],
release_types => [qw|complete partial trial|],
+ # The 'unk' platform is reserved for "unknown".
platforms => [qw|win dos lin mac ios and dvd bdp gba msx nds nes p98 psp ps1 ps2 ps3 psv drc sat sfc wii n3d xb3 web oth|],
media => {
#DB qty?
diff --git a/data/script.js b/data/script.js
index 1b3dfc9e..58c1331f 100644
--- a/data/script.js
+++ b/data/script.js
@@ -2541,6 +2541,7 @@ function filReleases() {
var plat = platforms;
for(var i=0; i<plat.length; i++) // l10n /_plat_.+/
plat[i] = [ plat[i], mt('_plat_'+plat[i]) ];
+ plat.splice(0, 0, [ 'unk', mt('_unknown') ]);
var med = media;
for(var i=0; i<med.length; i++) // l10n /_med_.+/
med[i] = [ med[i], mt('_med_'+med[i]) ];
diff --git a/lib/VNDB/DB/Releases.pm b/lib/VNDB/DB/Releases.pm
index a2f1363c..56fcf0b4 100644
--- a/lib/VNDB/DB/Releases.pm
+++ b/lib/VNDB/DB/Releases.pm
@@ -19,6 +19,7 @@ sub dbReleaseGet {
$o{results} ||= 50;
$o{page} ||= 1;
$o{what} ||= '';
+ $o{plat} = [ $o{plat} ] if $o{plat} && !ref $o{plat};
my @where = (
!$o{id} && !$o{rev} ? ( 'r.hidden = FALSE' => 0 ) : (),
@@ -42,8 +43,10 @@ sub dbReleaseGet {
'rr.id IN(SELECT irl.rid FROM releases_lang irl JOIN releases ir ON ir.latest = irl.rid WHERE irl.lang IN(!l))' => [ ref $o{lang} ? $o{lang} : [ $o{lang} ] ] ) : (),
$o{olang} ? (
'rr.id IN(SELECT irv.rid FROM releases_vn irv JOIN releases ir ON ir.latest = irv.rid JOIN vn v ON irv.vid = v.id WHERE v.c_olang && ARRAY[!l]::language[])' => [ ref $o{olang} ? $o{olang} : [ $o{olang} ] ] ) : (),
- $o{plat} ? (
- 'rr.id IN(SELECT irp.rid FROM releases_platforms irp JOIN releases ir ON ir.latest = irp.rid WHERE irp.platform IN(!l))' => [ ref $o{plat} ? $o{plat} : [ $o{plat} ] ] ) : (),
+ $o{plat} ? (join(' OR ',
+ grep(/^unk$/, @{$o{plat}}) ? 'NOT EXISTS(SELECT 1 FROM releases_platforms irp WHERE irp.rid = r.latest)' : (),
+ grep(!/^unk$/, @{$o{plat}}) ? 'rr.id IN(SELECT irp.rid FROM releases_platforms irp JOIN releases ir ON ir.latest = irp.rid WHERE irp.platform IN(!l))' : (),
+ ), [ [ grep !/^unk$/, @{$o{plat}} ] ]) : (),
$o{med} ? (
'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} ] ] ) : (),
);