summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2008-12-07 12:30:46 +0100
committerYorhel <git@yorhel.nl>2008-12-07 12:30:46 +0100
commit22fcb9d63cb265a89aec31521084dad605f64228 (patch)
tree39c7f54f1b2ecf411d9143163935eb6e5faf8fe5 /lib
parentb5d73e4a9d7df30320b23d07ef62cf78167e71db (diff)
Modify wishlist from VN pages
Diffstat (limited to 'lib')
-rw-r--r--lib/VNDB/DB/WishList.pm75
-rw-r--r--lib/VNDB/Handler/ULists.pm21
-rw-r--r--lib/VNDB/Handler/VNPage.pm10
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;
}