diff options
author | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-08-01 10:35:11 +0000 |
---|---|---|
committer | yorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b> | 2008-08-01 10:35:11 +0000 |
commit | b274ff8a37e90a90c7613b47a84bad1cdc6ddf5f (patch) | |
tree | 13798abeee6d3893af98093312ae8d694a404619 /lib/VNDB | |
parent | 68d66b006656ed90e08187a2d5ceb95b08e4f279 (diff) |
Added wishlist feature and re-added "my profile" link to user menu
git-svn-id: svn://vndb.org/vndb@77 1fe2e327-d9db-4752-bcf7-ef0cb4a1748b
Diffstat (limited to 'lib/VNDB')
-rw-r--r-- | lib/VNDB/Util/DB.pm | 67 | ||||
-rw-r--r-- | lib/VNDB/VN.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/VNLists.pm | 77 |
3 files changed, 144 insertions, 2 deletions
diff --git a/lib/VNDB/Util/DB.pm b/lib/VNDB/Util/DB.pm index 76a9a790..34ca9ca0 100644 --- a/lib/VNDB/Util/DB.pm +++ b/lib/VNDB/Util/DB.pm @@ -16,6 +16,7 @@ $VERSION = $VNDB::VERSION; DBGetUser DBAddUser DBUpdateUser DBDelUser DBGetVotes DBVoteStats DBAddVote DBDelVote DBGetVNList DBDelVNList + DBGetWishList DBEditWishList DBDelWishList DBGetRList DBGetRLists DBEditRList DBDelRList DBGetVN DBAddVN DBEditVN DBHideVN DBUndefRG DBVNCache DBGetRelease DBAddRelease DBEditRelease DBHideRelease @@ -358,6 +359,7 @@ sub DBDelUser { # uid $s->DBExec($_, $id) for ( q|DELETE FROM vnlists WHERE uid = %d|, q|DELETE FROM rlists WHERE uid = %d|, + q|DELETE FROM wlists WHERE uid = %d|, q|DELETE FROM votes WHERE uid = %d|, q|UPDATE changes SET requester = 0 WHERE requester = %d|, q|UPDATE threads_posts SET uid = 0 WHERE uid = %d|, @@ -509,6 +511,71 @@ sub DBDelVNList { # uid, @vid # uid = 0 to delete all #-----------------------------------------------------------------------------# +# U S E R W I S H L I S T S # +#-----------------------------------------------------------------------------# + + +sub DBGetWishList { # %options->{ uid vid what order page results } + my($s, %o) = @_; + + $o{order} ||= 'wl.wstat ASC'; + $o{page} ||= 1; + $o{results} ||= 50; + $o{what} ||= ''; + + my %where = ( + 'wl.uid = %d' => $o{uid}, + $o{vid} ? ( 'wl.vid = %d' => $o{vid} ) : (), + ); + + my $select = 'wl.vid, wl.wstat, wl.added'; + my @join; + if($o{what} =~ /vn/) { + $select .= ', vr.title'; + push @join, 'JOIN vn v ON v.id = wl.vid', + 'JOIN vn_rev vr ON vr.id = v.latest'; + } + + my $r = $s->DBAll(qq| + SELECT $select + FROM wlists wl + @join + WHERE !W + ORDER BY %s + LIMIT %d OFFSET %d|, + \%where, + $o{order}, + $o{results}+(wantarray?1:0), $o{results}*($o{page}-1) + ); + return $r if !wantarray; + return ($r, 0) if $#$r < $o{results}; + pop @$r; + return ($r, 1); +} + + +sub DBEditWishList { # %options->{ uid vid wstat } + my($s, %o) = @_; + $s->DBExec(q|UPDATE wlists SET wstat = %d WHERE uid = %d AND vid IN(!l)|, + $o{wstat}, $o{uid}, ref($o{vid}) eq 'ARRAY' ? $o{vid} : [ $o{vid} ]) + || + $s->DBExec(q|INSERT INTO wlists (uid, vid, wstat) + VALUES(%d, %d, %d)|, + @o{qw| uid vid wstat |}); +} + + +sub DBDelWishList { # uid, vids + my($s, $uid, $vid) = @_; + $s->DBExec(q|DELETE FROM wlists WHERE uid = %d AND vid IN(!l)|, $uid, $vid); +} + + + + + + +#-----------------------------------------------------------------------------# # U S E R R E L E A S E L I S T S # #-----------------------------------------------------------------------------# diff --git a/lib/VNDB/VN.pm b/lib/VNDB/VN.pm index c94705cc..40702107 100644 --- a/lib/VNDB/VN.pm +++ b/lib/VNDB/VN.pm @@ -50,7 +50,7 @@ sub VNPage { $self->ResAddTpl(vnpage => { vote => $self->AuthInfo->{id} ? $self->DBGetVotes(uid => $self->AuthInfo->{id}, vid => $id)->[0] : {}, - list => $self->AuthInfo->{id} ? $self->DBGetVNList(uid => $self->AuthInfo->{id}, vid => $id)->[0] : {}, + wlist => $self->AuthInfo->{id} ? $self->DBGetWishList(uid => $self->AuthInfo->{id}, vid => $id)->[0] : {}, vn => $v, rel => $rel, prev => $c, diff --git a/lib/VNDB/VNLists.pm b/lib/VNDB/VNLists.pm index a50df2e4..0b7a5207 100644 --- a/lib/VNDB/VNLists.pm +++ b/lib/VNDB/VNLists.pm @@ -7,7 +7,7 @@ use Exporter 'import'; use vars ('$VERSION', '@EXPORT'); $VERSION = $VNDB::VERSION; -@EXPORT = qw| VNMyList VNVote RListMod RList |; +@EXPORT = qw| VNMyList VNVote RListMod RList WListMod WList |; sub VNMyList { @@ -152,4 +152,79 @@ sub RList { } +sub WListMod { + my $self = shift; + my $vid = shift; + + my $f = $self->FormCheck( + { name => 'w', required => 1, enum => [ -1..$#$VNDB::RSTAT ] }, + ); + + return $self->ResNotFound if $f->{_err}; + return $self->ResDenied if !$self->AuthInfo->{id}; + + if($f->{w} == -1) { + $self->DBDelWishList($self->AuthInfo->{id}, [ $vid ]); + } else { + $self->DBEditWishList( + uid => $self->AuthInfo->{id}, + vid => $vid, + wstat => $f->{w} + ); + } + + return $self->ResRedirect('/v'.$vid, 'temp'); +} + + +sub WList { + my $self = shift; + my $uid = shift; + + my $u = $self->DBGetUser(uid => $uid)->[0]; + return $self->ResNotFound if !$uid || !$u || (($self->AuthInfo->{id}||0) != $uid && !($u->{flags} & $VNDB::UFLAGS->{list})); + + my $f = $self->FormCheck( + { name => 's', required => 0, default => 'title', enum => [ qw|title wstat added| ] }, + { name => 'o', required => 0, default => 'a', enum => [ 'a','d' ] }, + { name => 'p', required => 0, template => 'int', default => 1 }, + ); + return $self->ResNotFound if $f->{_err}; + + if($self->ReqMethod eq 'POST') { + return $self->ResDenied if $uid != $self->AuthInfo->{id}; + my $frm = $self->FormCheck( + { name => 'sel', required => 1, multi => 1, template => 'int' }, + { name => 'vnlistchange', required => 1, enum => [ 'd', '0'.."$#$VNDB::WLIST" ] }, + ); + if(!$frm->{_err} && @{$frm->{sel}}) { + $self->DBDelWishList($uid, $frm->{sel}) if $frm->{vnlistchange} eq 'd'; + $self->DBEditWishList( + uid => $uid, + vid => $frm->{sel}, + wstat => $frm->{vnlistchange} + ) if $frm->{vnlistchange} ne 'd'; + } + } + + my $order = $f->{s} . ($f->{o} eq 'a' ? ' ASC' : ' DESC'); + $order .= ', title' . ($f->{o} eq 'a' ? ' ASC' : ' DESC') if $f->{s} eq 'wstat'; + my($list, $np) = $self->DBGetWishList( + uid => $u->{id}, + order => $order, + results => 50, + what => 'vn', + page => $f->{p}, + ); + + $self->ResAddTpl(wlist => { + npage => $np, + page => $f->{p}, + list => $list, + order => [ $f->{s}, $f->{o} ], + user => $u, + }); +} + + 1; |