summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/VNDB/DB/VNList.pm24
-rw-r--r--lib/VNDB/Handler/Releases.pm21
-rw-r--r--lib/VNDB/Handler/ULists.pm25
-rw-r--r--static/f/script.js7
4 files changed, 74 insertions, 3 deletions
diff --git a/lib/VNDB/DB/VNList.pm b/lib/VNDB/DB/VNList.pm
index 4120e775..9e430f43 100644
--- a/lib/VNDB/DB/VNList.pm
+++ b/lib/VNDB/DB/VNList.pm
@@ -6,12 +6,32 @@ use warnings;
use Exporter 'import';
-our @EXPORT = qw|dbVNListGet dbVNListAdd dbVNListDel|;
+our @EXPORT = qw|dbVNListGet dbVNListList dbVNListAdd dbVNListDel|;
+
+
+# Simpler and more efficient version of dbVNListList below
+# %options->{ uid rid }
+sub dbVNListGet {
+ my($self, %o) = @_;
+
+ my %where = (
+ 'uid = ?' => $o{uid},
+ $o{rid} ? (
+ 'rid = ?' => $o{rid} ) : (),
+ );
+
+ return $self->dbAll(q|
+ SELECT uid, rid, rstat, vstat
+ FROM rlists
+ !W|,
+ \%where
+ );
+}
# %options->{ uid order char voted page results }
# NOTE: this function is mostly copied from 1.x, may need some rewriting...
-sub dbVNListGet {
+sub dbVNListList {
my($self, %o) = @_;
$o{results} ||= 50;
diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm
index 3d33cf04..2338f5aa 100644
--- a/lib/VNDB/Handler/Releases.pm
+++ b/lib/VNDB/Handler/Releases.pm
@@ -180,6 +180,27 @@ sub _infotable {
end;
}
+ if($self->authInfo->{id}) {
+ my $rl = $self->dbVNListGet(uid => $self->authInfo->{id}, rid => $r->{id})->[0];
+ Tr ++$i % 2 ? (class => 'odd') : ();
+ td 'User options';
+ td;
+ Select id => 'listsel', name => 'listsel';
+ option !$rl ? 'not in your list' : "Status: $self->{vn_rstat}[$rl->{rstat}] / $self->{vn_vstat}[$rl->{vstat}]";
+ optgroup label => 'Set release status';
+ option value => "r$_", $self->{vn_rstat}[$_]
+ for (0..$#{$self->{vn_rstat}});
+ end;
+ optgroup label => 'Set play status';
+ option value => "v$_", $self->{vn_vstat}[$_]
+ for (0..$#{$self->{vn_vstat}});
+ end;
+ option value => 'del', 'remove from list' if $rl;
+ end;
+ end;
+ end;
+ }
+
end;
}
diff --git a/lib/VNDB/Handler/ULists.pm b/lib/VNDB/Handler/ULists.pm
index 110ded30..b94cd8e6 100644
--- a/lib/VNDB/Handler/ULists.pm
+++ b/lib/VNDB/Handler/ULists.pm
@@ -10,6 +10,7 @@ use VNDB::Func;
YAWF::register(
qr{v([1-9]\d*)/vote}, \&vnvote,
qr{v([1-9]\d*)/wish}, \&vnwish,
+ qr{r([1-9]\d*)/list}, \&rlist,
qr{u([1-9]\d*)/wish}, \&wishlist,
qr{u([1-9]\d*)/list}, \&vnlist,
);
@@ -51,6 +52,28 @@ sub vnwish {
}
+sub rlist {
+ my($self, $id) = @_;
+
+ my $uid = $self->authInfo->{id};
+ return $self->htmlDenied() if !$uid;
+
+ my $f = $self->formValidate(
+ { name => 'e', required => 1, enum => [ 'del', map("r$_", 0..$#{$self->{vn_rstat}}), map("v$_", 0..$#{$self->{vn_vstat}}) ] },
+ );
+ return 404 if $f->{_err};
+
+ $self->dbVNListDel($uid, $id) if $f->{e} eq 'del';
+ $self->dbVNListAdd(
+ rid => $id,
+ uid => $uid,
+ $f->{e} =~ /^([rv])(\d+)$/ && $1 eq 'r' ? (rstat => $2) : (vstat => $2)
+ ) if $f->{e} ne 'del';
+
+ $self->resRedirect('/r'.$id, 'temp');
+}
+
+
sub wishlist {
my($self, $uid) = @_;
@@ -183,7 +206,7 @@ sub vnlist {
}
- my($list, $np) = $self->dbVNListGet(
+ my($list, $np) = $self->dbVNListList(
uid => $uid,
results => 50,
page => $f->{p},
diff --git a/static/f/script.js b/static/f/script.js
index d6389bb5..918e4bc8 100644
--- a/static/f/script.js
+++ b/static/f/script.js
@@ -290,6 +290,13 @@ DOMLoad(function() {
};
+ // Release list editing
+ i = x('listsel');
+ if(i)
+ i.onchange = function() {
+ if(this.selectedIndex != 0)
+ location.href = location.href+'/list?e='+this.options[this.selectedIndex].value;
+ };
// User VN list
i = x('relhidall');
if(i) {