diff options
-rw-r--r-- | lib/VNDB/Handler/Misc.pm | 19 | ||||
-rw-r--r-- | lib/VNDB/Handler/Releases.pm | 4 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNBrowse.pm | 4 | ||||
-rw-r--r-- | lib/VNDB/Util/LayoutHTML.pm | 15 | ||||
-rw-r--r-- | lib/VNDB/Util/Misc.pm | 2 | ||||
-rw-r--r-- | util/sql/all.sql | 2 | ||||
-rw-r--r-- | util/updates/update_2.16.sql | 2 |
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, |