diff options
-rw-r--r-- | lib/VNDB/DB/VNList.pm | 24 | ||||
-rw-r--r-- | lib/VNDB/Handler/Releases.pm | 21 | ||||
-rw-r--r-- | lib/VNDB/Handler/ULists.pm | 25 | ||||
-rw-r--r-- | static/f/script.js | 7 |
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) { |