summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2021-01-06 12:56:28 +0100
committerYorhel <git@yorhel.nl>2021-01-06 12:56:31 +0100
commit2248e3f68d8df54b0571c14158d522aa74c40d58 (patch)
tree46ab5524719e0ee58a4c96440c014f9ce31ed226 /util
parentb3c79d8c9deada792377a57b5bf4e2c81455004c (diff)
AdvSearch: Add script to convert old saved filters + check saved queries + improve compat
I'll use the conversion script when the new advanced search replaces the old filter system. Seems to be working alright, but should not be used in its current form because release filters don't have the 'original language' field yet.
Diffstat (limited to 'util')
-rwxr-xr-xutil/saved-queries.pl44
-rwxr-xr-xutil/updates/wip-advsearch-convert-saved-filters.pl46
2 files changed, 90 insertions, 0 deletions
diff --git a/util/saved-queries.pl b/util/saved-queries.pl
new file mode 100755
index 00000000..97b4073c
--- /dev/null
+++ b/util/saved-queries.pl
@@ -0,0 +1,44 @@
+#!/usr/bin/perl
+
+# This script checks and updates all queries in the saved_queries table.
+
+use v5.24;
+use warnings;
+use Cwd 'abs_path';
+use TUWF;
+
+my $ROOT;
+BEGIN { ($ROOT = abs_path $0) =~ s{/util/saved-queries\.pl$}{}; }
+
+use lib $ROOT.'/lib';
+use VNDB::Config;
+
+TUWF::set %{ config->{tuwf} };
+
+require VNWeb::AdvSearch;
+
+
+my($total, $updated, $err) = (0,0,0);
+
+for my $r (tuwf->dbAlli('SELECT uid, qtype, name, query FROM saved_queries')->@*) {
+ $total++;
+ my $q = eval { tuwf->compile({advsearch => $r->{qtype}})->validate($r->{query})->data };
+ if(!$q) {
+ $err++;
+ warn "Invalid query: u$r->{uid}, $r->{qtype}, \"$r->{name}\": $r->{query}\n";
+ next;
+ }
+ my $qs = $q->query_encode;
+ if(!$qs) {
+ warn "Empty query: u$r->{uid}, $r->{qtype}, \"$r->{name}\": $r->{query}\n";
+ next;
+ }
+ if($qs ne $r->{query}) {
+ $updated++;
+ tuwf->dbExeci('UPDATE saved_queries SET query =', \$qs, 'WHERE', { uid => $r->{uid}, qtype => $r->{qtype}, name => $r->{name} });
+ }
+}
+
+tuwf->dbCommit;
+
+printf "Updated %d/%d saved queries, %d errors.\n", $updated, $total, $err;
diff --git a/util/updates/wip-advsearch-convert-saved-filters.pl b/util/updates/wip-advsearch-convert-saved-filters.pl
new file mode 100755
index 00000000..16e569b0
--- /dev/null
+++ b/util/updates/wip-advsearch-convert-saved-filters.pl
@@ -0,0 +1,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;