summaryrefslogtreecommitdiff
path: root/util/updates/2021-01-10-advsearch-convert-saved-filters.pl
blob: 16e569b088780545a60418dd81c7eec3ab7d086b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/perl

use v5.24;
use warnings;
use TUWF;
use Cwd 'abs_path';

my $ROOT;
BEGIN { ($ROOT = abs_path $0) =~ s{/util/updates/[^/]+.pl$}{}; }

use lib $ROOT.'/lib';
use VNDB::Config;

BEGIN { TUWF::set %{ config->{tuwf} } };

use VNWeb::AdvSearch;
use VNWeb::Filters;

for my $r (tuwf->dbAlli('SELECT id, filter_vn AS fil FROM users WHERE filter_vn <> \'\' AND NOT EXISTS(SELECT 1 FROM saved_queries WHERE uid = id AND name = \'\' AND qtype = \'v\') ORDER BY id')->@*) {
    next if $r->{fil} =~ /^tagspoil-\d+$/;

    # HACK: trick VNWeb code into thinking we're logged in as the user owning the filter.
    tuwf->{_TUWF}{request_data}{auth} = bless { user => { user_id => $r->{id} } }, 'VNWeb::Auth';

    my $q = eval { tuwf->compile({advsearch => 'v'})->validate(filter_vn_adv filter_parse v => $r->{fil})->data };
    if(!$q) {
        warn "Unable to convert VN filter for u$r->{id}, \"$r->{fil}\": $@";
        next;
    }
    my $qs = $q->query_encode;
    tuwf->dbExeci('INSERT INTO saved_queries', { uid => $r->{id}, qtype => 'v', name => '', query => $qs }) if $qs;
}

for my $r (tuwf->dbAlli('SELECT id, filter_release AS fil FROM users WHERE filter_release <> \'\' AND NOT EXISTS(SELECT 1 FROM saved_queries WHERE uid = id AND name = \'\' AND qtype = \'r\') ORDER BY id')->@*) {
    tuwf->{_TUWF}{request_data}{auth} = bless { user => { user_id => $r->{id} } }, 'VNWeb::Auth';

    my $q = eval { tuwf->compile({advsearch => 'r'})->validate(filter_release_adv filter_parse r => $r->{fil})->data };
    if(!$q) {
        warn "Unable to convert release filter for u$r->{id}, \"$r->{fil}\": $@";
        next;
    }
    my $qs = $q->query_encode;
    tuwf->dbExeci('INSERT INTO saved_queries', { uid => $r->{id}, qtype => 'r', name => '', query => $qs }) if $qs;
}

tuwf->dbCommit;