From 201ffccacef9f54778f79aba9f164295c18d6017 Mon Sep 17 00:00:00 2001 From: Yorhel Date: Sun, 7 Dec 2008 13:33:25 +0100 Subject: Wishlist browsing --- lib/VNDB/DB/WishList.pm | 3 +- lib/VNDB/Handler/ULists.pm | 70 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) (limited to 'lib/VNDB') diff --git a/lib/VNDB/DB/WishList.pm b/lib/VNDB/DB/WishList.pm index 970b7b4a..a75ce41f 100644 --- a/lib/VNDB/DB/WishList.pm +++ b/lib/VNDB/DB/WishList.pm @@ -9,7 +9,7 @@ use Exporter 'import'; our @EXPORT = qw|dbWishListGet dbWishListAdd dbWishListDel|; -# %options->{ uid vid what order page results } +# %options->{ uid vid wstat what order page results } # what: vn sub dbWishListGet { my($self, %o) = @_; @@ -22,6 +22,7 @@ sub dbWishListGet { my %where = ( 'wl.uid = ?' => $o{uid}, $o{vid} ? ( 'wl.vid = ?' => $o{vid} ) : (), + defined $o{wstat} ? ( 'wl.wstat = ?' => $o{wstat} ) : (), ); my $select = 'wl.vid, wl.wstat, wl.added'; diff --git a/lib/VNDB/Handler/ULists.pm b/lib/VNDB/Handler/ULists.pm index 3a715fcf..bb714b6e 100644 --- a/lib/VNDB/Handler/ULists.pm +++ b/lib/VNDB/Handler/ULists.pm @@ -3,11 +3,14 @@ package VNDB::Handler::ULists; use strict; use warnings; +use YAWF ':html'; +use VNDB::Func; YAWF::register( qr{v([1-9]\d*)/vote}, \&vnvote, qr{v([1-9]\d*)/wish}, \&vnwish, + qr{u([1-9]\d*)/wish}, \&wishlist, ); @@ -47,5 +50,72 @@ sub vnwish { } +sub wishlist { + my($self, $uid) = @_; + + my $own = $self->authInfo->{id} && $self->authInfo->{id} == $uid; + my $u = $self->dbUserGet(uid => $uid)->[0]; + return 404 if !$u || !$own && !$u->{show_list}; + + my $f = $self->formValidate( + { name => 'p', required => 0, default => 1, template => 'int' }, + { name => 'o', required => 0, default => 'a', enum => [ 'a', 'd' ] }, + { name => 's', required => 0, default => 'title', enum => [qw|title added|] }, + { name => 'f', required => 0, default => -1, enum => [ -1..$#{$self->{wishlist_status}} ] }, + ); + return 404 if $f->{_err}; + + my($list, $np) = $self->dbWishListGet( + uid => $uid, + order => $f->{s}.' '.($f->{o} eq 'a' ? 'ASC' : 'DESC'), + $f->{f} != -1 ? (wstat => $f->{f}) : (), + what => 'vn', + results => 50, + page => $f->{p}, + ); + + my $title = $own ? 'My wishlist' : "\u$u->{username}'s wishlist"; + $self->htmlHeader(title => $title, noindex => 1); + $self->htmlMainTabs('u', $u, 'wish'); + div class => 'mainbox'; + h1 $title; + if(!@$list && $f->{f} == -1) { + p 'Wishlist empty...'; + end; + return $self->htmlFooter; + } + p class => 'browseopts'; + a $f->{f} == $_ ? (class => 'optselected') : (), href => "/u$uid/wish?f=$_", + $_ == -1 ? 'All priorities' : ucfirst $self->{wishlist_status}[$_] + for (-1..$#{$self->{wishlist_status}}); + end; + end; + + $self->htmlBrowse( + items => $list, + nextpage => $np, + options => $f, + pageurl => "/u$uid/wish?f=$f->{f};o=$f->{o};s=$f->{s}", + sorturl => "/u$uid/wish?f=$f->{f}", + header => [ + [ Title => 'title' ], + [ Priority => '' ], + [ Added => 'added' ], + ], + row => sub { + my($s, $n, $i) = @_; + Tr $n % 2 == 0 ? (class => 'odd') : (); + td class => 'tc1'; + a href => "/v$i->{vid}", title => $i->{original}||$i->{title}, shorten $i->{title}, 70; + end; + td class => 'tc2', ucfirst $self->{wishlist_status}[$i->{wstat}]; + td class => 'tc3', date $i->{added}, 'compact'; + end; + } + ); + $self->htmlFooter; +} + + 1; -- cgit v1.2.3