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
|
package VNWeb::VN::Votes;
use VNWeb::Prelude;
sub listing_ {
my($opt, $count, $lst) = @_;
my sub url { '?'.query_encode %$opt, @_ }
paginate_ \&url, $opt->{p}, [ $count, 50 ], 't';
div_ class => 'mainbox browse votelist', sub {
table_ class => 'stripe', sub {
thead_ sub { tr_ sub {
td_ class => 'tc1', sub { txt_ 'Date'; sortable_ 'date', $opt, \&url; debug_ $lst };
td_ class => 'tc2', sub { txt_ 'Vote'; sortable_ 'vote', $opt, \&url; };
td_ class => 'tc3', sub { txt_ 'User'; sortable_ 'title', $opt, \&url; };
} };
tr_ sub {
td_ class => 'tc1', fmtdate $_->{date};
td_ class => 'tc2', fmtvote $_->{vote};
td_ class => 'tc3', sub {
b_ class => 'grayedout', 'hidden' if $_->{hide_list};
user_ $_ if !$_->{hide_list};
};
} for @$lst;
};
};
paginate_ \&url, $opt->{p}, [ $count, 50 ], 'b';
}
TUWF::get qr{/$RE{vid}/votes}, sub {
my $id = tuwf->capture('id');
my $v = tuwf->dbRowi('SELECT id, title, hidden AS entry_hidden, locked AS entry_locked FROM vn WHERE id =', \$id);
return tuwf->resNotFound if !$v->{id} || $v->{hidden};
my $opt = eval { tuwf->validate(get =>
p => { page => 1 },
o => { required => 0, default => 'd', enum => ['a','d'] },
s => { required => 0, default => 'date', enum => ['date', 'title', 'vote' ] }
)->data } || { p => 1, o => 'd', s => 'date' };
my $fromwhere = sql
'FROM ulist_vns uv
JOIN users u ON u.id = uv.uid
WHERE uv.vid =', \$v->{id}, 'AND uv.vote IS NOT NULL
AND NOT EXISTS(SELECT 1 FROM users u WHERE u.id = uv.uid AND u.ign_votes)';
my $count = tuwf->dbVali('SELECT COUNT(*)', $fromwhere);
my $lst = tuwf->dbPagei({results => 50, page => $opt->{p}},
'SELECT uv.vote,', sql_totime('uv.vote_date'), 'as date, ', sql_user(), '
, NOT EXISTS(SELECT 1 FROM ulist_vns_labels uvl JOIN ulist_labels ul ON ul.uid = uvl.uid AND ul.id = uvl.lbl WHERE uvl.uid = uv.uid AND uvl.vid = uv.vid AND NOT ul.private) AS hide_list
', $fromwhere, 'ORDER BY', sprintf
{ date => 'uv.vote_date %s', vote => 'uv.vote %s', title => '(CASE WHEN hide_list THEN NULL ELSE u.username END) %s, uv.vote_date' }->{$opt->{s}},
{ a => 'ASC', d => 'DESC' }->{$opt->{o}}
);
framework_ title => "Votes for $v->{title}", type => 'v', dbobj => $v, sub {
div_ class => 'mainbox', sub {
h1_ "Votes for $v->{title}";
p_ 'No votes to list. :(' if !@$lst;
};
listing_ $opt, $count, $lst if @$lst;
};
};
1;
|