diff options
Diffstat (limited to 'lib/VNDB/VNLists.pm')
-rw-r--r-- | lib/VNDB/VNLists.pm | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/lib/VNDB/VNLists.pm b/lib/VNDB/VNLists.pm new file mode 100644 index 00000000..c0f1ac1d --- /dev/null +++ b/lib/VNDB/VNLists.pm @@ -0,0 +1,96 @@ + +package VNDB::VNLists; + +use strict; +use warnings; +use Exporter 'import'; + +use vars ('$VERSION', '@EXPORT'); +$VERSION = $VNDB::VERSION; +@EXPORT = qw| VNListMod VNMyList |; + + +sub VNListMod { + my $self = shift; + my $vid = shift; + + my $uid = $self->AuthInfo()->{id}; + return $self->ResDenied() if !$uid; + + my $f = $self->FormCheck( + { name => 's', required => 1, enum => [ -1..$#$VNDB::LSTAT ] }, + { name => 'c', required => 0, default => '', maxlength => 500 }, + ); + return $self->ResNotFound if $f->{_err}; + + if($f->{s} == -1) { + $self->DBDelVNList($uid, $vid); + } elsif($self->DBGetVNList(uid => $uid, vid => $vid)->[0]{vid}) { + $self->DBEditVNList(uid => $uid, status => $f->{s}, vid => [ $vid ], + $f->{s} == 6 ? ( comments => $f->{c} ) : ()); + } else { + $self->DBAddVNList($uid, $vid, $f->{s}, $f->{c}); + } + + $self->ResRedirect('/v'.$vid, 'temp'); +} + + +sub VNMyList { + my $self = shift; + my $user = shift; + + my $u = $self->DBGetUser(uid => $user)->[0]; + return $self->ResNotFound if !$user || !$u || (($self->AuthInfo->{id}||0) != $user && !($u->{flags} & $VNDB::UFLAGS->{list})); + + my $f = $self->FormCheck( + { name => 's', required => 0, default => 'title', enum => [ qw|title date| ] }, + { name => 'o', required => 0, default => 'a', enum => [ 'a','d' ] }, + { name => 'p', required => 0, template => 'int', default => 1 }, + { name => 't', required => 0, enum => [ -1..$#$VNDB::LSTAT ], default => -1 }, + ); + + if($self->ReqMethod eq 'POST') { + my $frm = $self->FormCheck( + { name => 'vnlistchange', required => 1, enum => [ -2..$#$VNDB::LSTAT ] }, + { name => 'comments', required => 0, default => '', maxlength => 500 }, + { name => 'sel', required => 1, multi => 1 }, + ); + if(!$frm->{_err}) { + my @change = map { /^[0-9]+$/ ? $_ : () } @{$frm->{sel}}; + $self->DBDelVNList($user, @change) if @change && $frm->{vnlistchange} eq '-1'; + $self->DBEditVNList( + uid => $user, + vid => \@change, + $frm->{vnlistchange} eq '-2' ? ( + comments => $frm->{comments} + ) : ( + status => $frm->{vnlistchange} + ), + ) if @change && $frm->{vnlistchange} ne '-1'; + } + } + + my $order = $f->{s} . ($f->{o} eq 'a' ? ' ASC' : ' DESC'); + my($list, $np) = $self->DBGetVNList( + uid => $u->{id}, + order => $order, + results => 50, + page => $f->{p}, + $f->{t} >= 0 ? ( + status => $f->{t} ) : () + ); + + $self->ResAddTpl(vnlist => { + npage => $np, + page => $f->{p}, + list => $list, + order => [ $f->{s}, $f->{o} ], + user => $u, + status => $f->{t}, + }); +} + + + +1; |