summaryrefslogtreecommitdiff
path: root/lib/VNDB
diff options
context:
space:
mode:
authoryorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b>2008-08-01 10:35:11 +0000
committeryorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b>2008-08-01 10:35:11 +0000
commitb274ff8a37e90a90c7613b47a84bad1cdc6ddf5f (patch)
tree13798abeee6d3893af98093312ae8d694a404619 /lib/VNDB
parent68d66b006656ed90e08187a2d5ceb95b08e4f279 (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.pm67
-rw-r--r--lib/VNDB/VN.pm2
-rw-r--r--lib/VNDB/VNLists.pm77
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;