summaryrefslogtreecommitdiff
path: root/lib/VNDB/VNLists.pm
blob: 2a8be0a8f50cce7883a21a5d74ef656a00db62a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97

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 },
  );
  return $self->ResNotFound if $f->{_err};

  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;