diff options
author | Yorhel <git@yorhel.nl> | 2008-12-07 12:30:46 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2008-12-07 12:30:46 +0100 |
commit | 22fcb9d63cb265a89aec31521084dad605f64228 (patch) | |
tree | 39c7f54f1b2ecf411d9143163935eb6e5faf8fe5 /lib | |
parent | b5d73e4a9d7df30320b23d07ef62cf78167e71db (diff) |
Modify wishlist from VN pages
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VNDB/DB/WishList.pm | 75 | ||||
-rw-r--r-- | lib/VNDB/Handler/ULists.pm | 21 | ||||
-rw-r--r-- | lib/VNDB/Handler/VNPage.pm | 10 |
3 files changed, 105 insertions, 1 deletions
diff --git a/lib/VNDB/DB/WishList.pm b/lib/VNDB/DB/WishList.pm new file mode 100644 index 00000000..970b7b4a --- /dev/null +++ b/lib/VNDB/DB/WishList.pm @@ -0,0 +1,75 @@ + +package VNDB::DB::WishList; + +use strict; +use warnings; +use Exporter 'import'; + + +our @EXPORT = qw|dbWishListGet dbWishListAdd dbWishListDel|; + + +# %options->{ uid vid what order page results } +# what: vn +sub dbWishListGet { + my($self, %o) = @_; + + $o{order} ||= 'wl.wstat ASC'; + $o{page} ||= 1; + $o{results} ||= 50; + $o{what} ||= ''; + + my %where = ( + 'wl.uid = ?' => $o{uid}, + $o{vid} ? ( 'wl.vid = ?' => $o{vid} ) : (), + ); + + my $select = 'wl.vid, wl.wstat, wl.added'; + my @join; + if($o{what} =~ /vn/) { + $select .= ', vr.title, vr.original'; + push @join, 'JOIN vn v ON v.id = wl.vid', + 'JOIN vn_rev vr ON vr.id = v.latest'; + } + + my($r, $np) = $self->dbPage(\%o, q| + SELECT !s + FROM wlists wl + !s + !W + ORDER BY !s|, + $select, join(' ', @join), \%where, $o{order}, + ); + + return wantarray ? ($r, $np) : $r; +} + + +# Updates or adds a whishlist item +# Arguments: vid, uid, wstat +sub dbWishListAdd { + my($self, $vid, $uid, $wstat) = @_; + $self->dbExec( + 'UPDATE wlists SET wstat = ? WHERE uid = ? AND vid IN(!l)', + $wstat, $uid, ref($vid) eq 'ARRAY' ? $vid : [ $vid ] + ) + || + $self->dbExec( + 'INSERT INTO wlists (uid, vid, wstat) VALUES(!l)', + [ $uid, $vid, $wstat ] + ); +} + + +# Arguments: uid, vids +sub dbWishListDel { + my($self, $uid, $vid) = @_; + $self->dbExec( + 'DELETE FROM wlists WHERE uid = ? AND vid IN(!l)', + $uid, ref($vid) eq 'ARRAY' ? $vid : [ $vid ] + ); +} + + +1; + diff --git a/lib/VNDB/Handler/ULists.pm b/lib/VNDB/Handler/ULists.pm index 2da69d51..3a715fcf 100644 --- a/lib/VNDB/Handler/ULists.pm +++ b/lib/VNDB/Handler/ULists.pm @@ -6,7 +6,8 @@ use warnings; YAWF::register( - qr{v([1-9]\d*)/vote}, \&vnvote + qr{v([1-9]\d*)/vote}, \&vnvote, + qr{v([1-9]\d*)/wish}, \&vnwish, ); @@ -28,5 +29,23 @@ sub vnvote { } +sub vnwish { + my($self, $id) = @_; + + my $uid = $self->authInfo->{id}; + return $self->htmlDenied() if !$uid; + + my $f = $self->formValidate( + { name => 's', enum => [ -1..$#{$self->{wishlist_status}} ] } + ); + return 404 if $f->{_err}; + + $self->dbWishListDel($uid, $id) if $f->{s} == -1; + $self->dbWishListAdd($id, $uid, $f->{s}) if $f->{s} != -1; + + $self->resRedirect('/v'.$id, 'temp'); +} + + 1; diff --git a/lib/VNDB/Handler/VNPage.pm b/lib/VNDB/Handler/VNPage.pm index 331dfe1d..aa7e072b 100644 --- a/lib/VNDB/Handler/VNPage.pm +++ b/lib/VNDB/Handler/VNPage.pm @@ -118,8 +118,10 @@ sub page { _relations($self, \$i, $v) if @{$v->{relations}}; _anime($self, \$i, $v) if @{$v->{anime}}; + # User options if($self->authInfo->{id}) { my $vote = $self->dbVoteGet(uid => $self->authInfo->{id}, vid => $v->{id})->[0]; + my $wish = $self->dbWishListGet(uid => $self->authInfo->{id}, vid => $v->{id})->[0]; Tr ++$i % 2 ? (class => 'odd') : (); td 'User options'; td; @@ -130,6 +132,14 @@ sub page { end; option value => -1, 'revoke' if $vote; end; + br; + Select id => 'wishsel'; + option $wish ? "wishlist: $self->{wishlist_status}[$wish->{wstat}]" : 'not on your wishlist'; + optgroup label => $wish ? 'Change status' : 'Add to wishlist'; + option value => $_, $self->{wishlist_status}[$_] for (0..$#{$self->{wishlist_status}}); + end; + option value => -1, 'remove from wishlist'; + end; end; end; } |