summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/VNDB/Handler/Misc.pm19
-rw-r--r--lib/VNDB/Handler/Releases.pm4
-rw-r--r--lib/VNDB/Handler/VNBrowse.pm4
-rw-r--r--lib/VNDB/Util/LayoutHTML.pm15
-rw-r--r--lib/VNDB/Util/Misc.pm2
-rw-r--r--util/sql/all.sql2
-rw-r--r--util/updates/update_2.16.sql2
7 files changed, 39 insertions, 9 deletions
diff --git a/lib/VNDB/Handler/Misc.pm b/lib/VNDB/Handler/Misc.pm
index 8b4b8900..2d9932b1 100644
--- a/lib/VNDB/Handler/Misc.pm
+++ b/lib/VNDB/Handler/Misc.pm
@@ -16,6 +16,7 @@ YAWF::register(
qr{setlang}, \&setlang,
qr{nospam}, \&nospam,
qr{we-dont-like-ie}, \&iemessage,
+ qr{xml/prefs\.xml}, \&prefs,
qr{opensearch\.xml}, \&opensearch,
# redirects for old URLs
@@ -412,6 +413,24 @@ sub iemessage {
}
+sub prefs {
+ my $self = shift;
+ return if !$self->authCheckCode;
+ return 404 if !$self->authInfo->{id};
+ my $f = $self->formValidate(
+ { name => 'key', enum => [qw|filter_vn filter_release|] },
+ { name => 'value', required => 0, maxlength => 2000 },
+ );
+ return 404 if $f->{_err};
+ $self->authPref($f->{key}, $f->{value});
+
+ # doesn't really matter what we return, as long as it's XML
+ $self->resHeader('Content-type' => 'text/xml');
+ xml;
+ tag 'done', '';
+}
+
+
sub opensearch {
my $self = shift;
$self->resHeader('Content-Type' => 'application/opensearchdescription+xml');
diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm
index 9422a836..511db5b6 100644
--- a/lib/VNDB/Handler/Releases.pm
+++ b/lib/VNDB/Handler/Releases.pm
@@ -484,7 +484,7 @@ sub browse {
{ name => 'o', required => 0, default => 'a', enum => ['a', 'd'] },
{ name => 'q', required => 0, default => '', maxlength => 500 },
{ name => 's', required => 0, default => 'title', enum => [qw|released minage title|] },
- { name => 'fil',required => 0, default => '' },
+ { name => 'fil',required => 0, default => $self->authPref('filter_release') },
);
return 404 if $f->{_err};
@@ -550,7 +550,7 @@ sub browse {
end;
end;
}
- $self->htmlFooter;
+ $self->htmlFooter(prefs => [qw|filter_release|]);
}
diff --git a/lib/VNDB/Handler/VNBrowse.pm b/lib/VNDB/Handler/VNBrowse.pm
index 15407076..1060a256 100644
--- a/lib/VNDB/Handler/VNBrowse.pm
+++ b/lib/VNDB/Handler/VNBrowse.pm
@@ -21,7 +21,7 @@ sub list {
{ name => 'p', required => 0, default => 1, template => 'int' },
{ name => 'q', required => 0, default => '' },
{ name => 'sq', required => 0, default => '' },
- { name => 'fil',required => 0, default => '' },
+ { name => 'fil',required => 0, default => $self->authPref('filter_vn') },
);
return 404 if $f->{_err};
$f->{q} ||= $f->{sq};
@@ -65,7 +65,7 @@ sub list {
end; # /form
$self->htmlBrowseVN($list, $f, $np, "/v/$char?q=$f->{q};fil=$f->{fil}", $f->{fil} =~ /tag_inc-/);
- $self->htmlFooter;
+ $self->htmlFooter(prefs => ['filter_vn']);
}
diff --git a/lib/VNDB/Util/LayoutHTML.pm b/lib/VNDB/Util/LayoutHTML.pm
index a94289fa..cc34b874 100644
--- a/lib/VNDB/Util/LayoutHTML.pm
+++ b/lib/VNDB/Util/LayoutHTML.pm
@@ -135,8 +135,8 @@ sub _menu {
}
-sub htmlFooter {
- my $self = shift;
+sub htmlFooter { # %options => { prefs => [pref1,..] }
+ my($self, %o) = @_;
div id => 'footer';
my $q = $self->dbRandomQuote;
@@ -156,6 +156,17 @@ sub htmlFooter {
a href => $self->{source_url}, mt '_footer_source';
end;
end; # /div maincontent
+
+ # insert users' preference data when required by JS
+ if($o{prefs}) {
+ script type => 'text/javascript';
+ txt sprintf "PREF_CODE='%s';", $self->authInfo->{id} ? $self->authGetCode('/xml/prefs.xml') : '';
+ txt 'PREFS={';
+ # assumes the preference value doesn't contain a '
+ txt join ',', map sprintf("'%s':'%s'", $_, $self->authPref($_)), @{$o{prefs}};
+ txt '};';
+ end;
+ }
script type => 'text/javascript', src => $self->{url_static}.'/f/js/'.$self->{l10n}->language_tag().'.js?'.$self->{version}, '';
end; # /body
end; # /html
diff --git a/lib/VNDB/Util/Misc.pm b/lib/VNDB/Util/Misc.pm
index 2d1554ab..6c7acad0 100644
--- a/lib/VNDB/Util/Misc.pm
+++ b/lib/VNDB/Util/Misc.pm
@@ -30,7 +30,7 @@ sub filFetchDB {
$pre = {} if !$pre;
$post = {} if !$post;
my $dbfunc = $self->can($type eq 'vn' ? 'dbVNGet' : 'dbReleaseGet');
- my $prefname = 'fil_'.$type;
+ my $prefname = 'filter_'.$type;
my $pref = $self->authPref($prefname);
# simply call the DB if we're not applying filters
diff --git a/util/sql/all.sql b/util/sql/all.sql
index eb0d724d..78104343 100644
--- a/util/sql/all.sql
+++ b/util/sql/all.sql
@@ -10,7 +10,7 @@ CREATE TYPE language AS ENUM('cs', 'da', 'de', 'en', 'es', 'fi', 'fr',
CREATE TYPE medium AS ENUM ('cd', 'dvd', 'gdr', 'blr', 'flp', 'mrt', 'mem', 'umd', 'nod', 'in', 'otc');
CREATE TYPE notification_ntype AS ENUM ('pm', 'dbdel', 'listdel', 'dbedit', 'announce');
CREATE TYPE notification_ltype AS ENUM ('v', 'r', 'p', 't');
-CREATE TYPE prefs_key AS ENUM ('l10n', 'skin', 'customcss', 'show_nsfw', 'hide_list', 'notify_nodbedit', 'notify_announce');
+CREATE TYPE prefs_key AS ENUM ('l10n', 'skin', 'customcss', 'filter_vn', 'filter_release', 'show_nsfw', 'hide_list', 'notify_nodbedit', 'notify_announce');
CREATE TYPE producer_relation AS ENUM ('old', 'new', 'sub', 'par', 'imp', 'ipa', 'spa', 'ori');
CREATE TYPE release_type AS ENUM ('complete', 'partial', 'trial');
CREATE TYPE vn_relation AS ENUM ('seq', 'preq', 'set', 'alt', 'char', 'side', 'par', 'ser', 'fan', 'orig');
diff --git a/util/updates/update_2.16.sql b/util/updates/update_2.16.sql
index c1b3358b..12f28121 100644
--- a/util/updates/update_2.16.sql
+++ b/util/updates/update_2.16.sql
@@ -50,7 +50,7 @@ ALTER TABLE rlists RENAME COLUMN rstat TO status;
-- add users_prefs table
-CREATE TYPE prefs_key AS ENUM ('l10n', 'skin', 'customcss', 'show_nsfw', 'hide_list', 'notify_nodbedit', 'notify_announce');
+CREATE TYPE prefs_key AS ENUM ('l10n', 'skin', 'customcss', 'filter_vn', 'filter_release', 'show_nsfw', 'hide_list', 'notify_nodbedit', 'notify_announce');
CREATE TABLE users_prefs (
uid integer NOT NULL REFERENCES users (id) ON DELETE CASCADE,
key prefs_key NOT NULL,