diff options
Diffstat (limited to 'lib/VNDB/VNLists.pm')
-rw-r--r-- | lib/VNDB/VNLists.pm | 101 |
1 files changed, 100 insertions, 1 deletions
diff --git a/lib/VNDB/VNLists.pm b/lib/VNDB/VNLists.pm index 2a8be0a8..f2ad5d50 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| VNListMod VNMyList |; +@EXPORT = qw| VNListMod VNMyList VNVote RListMod RList |; sub VNListMod { @@ -93,5 +93,104 @@ sub VNMyList { } +sub VNVote { + my $self = shift; + my $id = shift; + + my $uid = $self->AuthInfo()->{id}; + return $self->ResDenied() if !$uid; + + my $f = $self->FormCheck( + { name => 'v', required => 0, default => 0, enum => [ '-1','1'..'10'] } + ); + return $self->ResNotFound() if !$f->{v}; + + + $self->DBDelVote($uid, $id) if $f->{v} == -1 || $self->DBGetVotes(uid => $uid, vid => $id)->[0]{vid}; + $self->DBAddVote($id, $uid, $f->{v}) if $f->{v} > 0; + + $self->ResRedirect('/v'.$id, 'temp'); +} + + +sub RListMod { + my $self = shift; + my $rid = shift; + + my $f = $self->FormCheck( + { name => 'd', required => 0 }, + { name => 'r', required => 0, enum => [ 0..$#$VNDB::RSTAT ] }, + { name => 'v', required => 0, enum => [ 0..$#$VNDB::VSTAT ] }, + ); + + return $self->ResNotFound if $f->{_err}; + return $self->ResDenied if !$self->AuthInfo->{id}; + + if($f->{d}) { + $self->DBDelRList($self->AuthInfo->{id}, $rid); + } else { + $self->DBEditRList( + uid => $self->AuthInfo->{id}, + rid => $rid, + rstat => $f->{r}, + vstat => $f->{v}, + ); + } + + my $r = $self->ReqHeader('Referer'); + $r = $r && $r =~ /([vr][0-9]+)$/ ? $1 : 'r'.$rid; + return $self->ResRedirect('/'.$r, 'temp'); +} + + +sub RList { + 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 vote| ] }, + { name => 'o', required => 0, default => 'a', enum => [ 'a','d' ] }, + { name => 'p', required => 0, template => 'int', default => 1 }, + { name => 'c', required => 0, default => 'all', enum => [ 'a'..'z', '0', 'all' ] }, + ); + return $self->ResNotFound if $f->{_err}; + + if($self->ReqMethod eq 'POST') { + my $frm = $self->FormCheck( + { name => 'vnlistchange', required => 1, enum => [ 'd', 'r0'..('r'.$#$VNDB::RSTAT), 'v0'..('v'.$#$VNDB::VSTAT) ] }, + { name => 'rsel', required => 1, multi => 1, template => 'int' }, + ); + if(!$frm->{_err} && @{$frm->{rsel}}) { + $self->DBDelRList($uid, $frm->{rsel}) if $frm->{vnlistchange} eq 'd'; + $self->DBEditRList( + uid => $uid, + rid => $frm->{rsel}, + substr($frm->{vnlistchange},0,1).'stat', substr($frm->{vnlistchange},1) + ) if $frm->{vnlistchange} ne 'd'; + } + } + + my $order = $f->{s} . ($f->{o} eq 'a' ? ' ASC' : ' DESC'); + my($list, $np) = $self->DBGetRLists( + uid => $uid, + results => 50, + page => $f->{p}, + order => $order, + char => $f->{c} eq 'all' ? undef : $f->{c}, + ); + + $self->ResAddTpl(rlist => { + user => $u, + list => $list, + char => $f->{c}, + order => [ $f->{s}, $f->{o} ], + page => $f->{p}, + npage => $np, + }); +} + 1; |