summaryrefslogtreecommitdiff
path: root/lib/VNWeb
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2021-01-02 09:55:37 +0100
committerYorhel <git@yorhel.nl>2021-01-02 09:55:39 +0100
commit61cb7cd185fbf9203041ca366a2eb915e746d6f4 (patch)
treea3edc941c5cee87fa6edf8aec4bc19b604198bb1 /lib/VNWeb
parentb32c9d40ee8b9a29aa1acf2fef3376aee28d16d5 (diff)
AdvSearch: Add anime filter
Pretty much a copy-paste from the staff id filter.
Diffstat (limited to 'lib/VNWeb')
-rw-r--r--lib/VNWeb/AdvSearch.pm11
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/VNWeb/AdvSearch.pm b/lib/VNWeb/AdvSearch.pm
index 68f13330..5ff0a5ed 100644
--- a/lib/VNWeb/AdvSearch.pm
+++ b/lib/VNWeb/AdvSearch.pm
@@ -327,6 +327,12 @@ f v => 12 => 'label', { type => 'any', func => \&_validate_label },
compact => sub { [ ($_->[0] =~ s/^u//r)*1, $_->[1]*1 ] },
sql_list => \&_sql_where_label, sql_list_grp => sub { $_->[1] == 0 ? undef : $_->[0] };
+f v => 13 => 'anime-id', { id => 1 },
+ sql_list => sub {
+ my($neg, $all, $val) = @_;
+ sql 'v.id', $neg ? 'NOT' : '', 'IN(SELECT id FROM vn_anime WHERE aid IN', $val, $all && @$val > 1 ? ('GROUP BY id HAVING COUNT(aid) =', \scalar @$val) : (), ')';
+ };
+
f v => 50 => 'release', 'r', '=' => sub { sql 'v.id IN(SELECT rv.vid FROM releases r JOIN releases_vn rv ON rv.id = r.id WHERE NOT r.hidden AND', $_, ')' };
f v => 51 => 'character','c', '=' => sub { sql 'v.id IN(SELECT cv.vid FROM chars c JOIN chars_vns cv ON cv.id = c.id WHERE NOT c.hidden AND', $_, ')' }; # TODO: Spoiler setting?
f v => 52 => 'staff', 's', '=' => sub { sql 'v.id IN(SELECT vs.id FROM vn_staff vs JOIN staff_alias sa ON sa.aid = vs.aid JOIN staff s ON s.id = sa.id WHERE NOT s.hidden AND', $_, ')' };
@@ -665,6 +671,7 @@ sub _extract_ids {
} else {
my $f = $FIELDS{$t}{$q->[0]};
$ids->{$q->[2]} = 1 if $f->{vndbid};
+ $ids->{"anime$q->[2]"} = 1 if $q->[0] eq 'anime-id';
$ids->{$q->[2][0]} = 1 if ref $f->{value} && ref $q->[2] eq 'ARRAY'; # Ugly heuristic, may have false positives
_extract_ids($f->{value}, $q->[2], $ids) if !ref $f->{value};
}
@@ -690,6 +697,9 @@ sub elm_ {
enrich_merge id => 'SELECT t.id, t.name, t.searchable, t.applicable, t.defaultspoil, t.state, g.id AS group_id, g.name AS group_name
FROM traits t LEFT JOIN traits g ON g.id = t.group WHERE t.id IN', $o{traits};
+ $o{anime} = [ map +{id => $_=~s/^anime//rg}, grep /^anime/, keys %ids ];
+ enrich_merge id => 'SELECT id, title_romaji AS title, title_kanji AS original FROM anime WHERE id IN', $o{anime};
+
$o{qtype} = $self->{type};
$o{query} = $self->compact_json;
$o{uid} = auth->uid;
@@ -706,6 +716,7 @@ sub elm_ {
staff => $VNWeb::Elm::apis{StaffResult}[0],
tags => $VNWeb::Elm::apis{TagResult}[0],
traits => $VNWeb::Elm::apis{TraitResult}[0],
+ anime => $VNWeb::Elm::apis{AnimeResult}[0],
}});
VNWeb::HTML::elm_ 'AdvSearch.Main', $schema, \%o;
}