summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2021-08-04 08:58:46 +0200
committerYorhel <git@yorhel.nl>2021-08-04 08:58:46 +0200
commit868a6a609e31ffee1a7f0c91f431cf450795230a (patch)
treebaf5ba3f803caf6d39669fd8fcd5bcba583c9ab0 /lib
parentfd8c51b3e47a97ffb06d66140f2458b565c37fe9 (diff)
Add global /lengthvotes listing
Diffstat (limited to 'lib')
-rw-r--r--lib/VNWeb/VN/Length.pm52
1 files changed, 26 insertions, 26 deletions
diff --git a/lib/VNWeb/VN/Length.pm b/lib/VNWeb/VN/Length.pm
index 05ce509f..b041f8bd 100644
--- a/lib/VNWeb/VN/Length.pm
+++ b/lib/VNWeb/VN/Length.pm
@@ -6,23 +6,21 @@ use VNWeb::Prelude;
sub can_vote { auth->permDbmod || (auth->permLengthvote && !global_settings->{lockdown_edit}) }
sub opts {
- my($vn) = @_;
+ my($mode) = @_;
tableopts
date => { name => 'Date', sort_id => 0, sort_sql => 'l.date', sort_default => 'desc' },
length => { name => 'Time', sort_id => 1, sort_sql => 'l.length' },
speed => { name => 'Speed', sort_id => 2, sort_sql => 'l.speed ?o, l.length' },
- $vn ? (
- username => { name => 'User', sort_id => 3, sort_sql => 'u.username' },
- ) : (
- title => { name => 'Title', sort_id => 4, sort_sql => 'v.title' },
- );
+ $mode ne 'u' ? (
+ username => { name => 'User', sort_id => 3, sort_sql => 'u.username' } ) : (),
+ $mode ne 'v' ? (
+ title => { name => 'Title', sort_id => 4, sort_sql => 'v.title' } ) : ()
}
-my $TABLEOPTS_U = opts 0;
-my $TABLEOPTS_V = opts 1;
+my %TABLEOPTS = map +($_, opts $_), '', 'v', 'u';
sub listing_ {
- my($opt, $count, $list, $vn) = @_;
+ my($opt, $count, $list, $mode) = @_;
my sub url { '?'.query_encode %$opt, @_ }
@@ -31,8 +29,8 @@ sub listing_ {
table_ class => 'stripe', sub {
thead_ sub { tr_ sub {
td_ class => 'tc1', sub { txt_ 'Date'; sortable_ 'date', $opt, \&url };
- td_ class => 'tc2', sub { txt_ 'User'; sortable_ 'username', $opt, \&url } if $vn;
- td_ class => 'tc2', sub { txt_ 'Title'; sortable_ 'title', $opt, \&url } if !$vn;
+ td_ class => 'tc2', sub { txt_ 'User'; sortable_ 'username', $opt, \&url } if $mode ne 'u';
+ td_ class => 'tc2', sub { txt_ 'Title'; sortable_ 'title', $opt, \&url } if $mode ne 'v';
td_ class => 'tc3', sub { txt_ 'Time'; sortable_ 'length', $opt, \&url };
td_ class => 'tc4', sub { txt_ 'Speed'; sortable_ 'speed', $opt, \&url };
td_ class => 'tc5', 'Rel';
@@ -40,10 +38,10 @@ sub listing_ {
} };
tr_ sub {
td_ class => 'tc1', fmtdate $_->{date};
- td_ class => 'tc2', sub { user_ $_ } if $vn;
+ td_ class => 'tc2', sub { user_ $_ } if $mode ne 'u';
td_ class => 'tc2', sub {
a_ href => "/$_->{vid}", title => $_->{original}||$_->{title}, $_->{title};
- } if !$vn;
+ } if $mode ne 'v';
td_ class => 'tc3', sub { vnlength_ $_->{length} };
td_ class => 'tc4', ['Slow','Normal','Fast']->[$_->{speed}];
td_ class => 'tc5', sub { a_ href => "/$_->{rid}", $_->{rid} };
@@ -55,38 +53,40 @@ sub listing_ {
}
-TUWF::get qr{/(?<thing>$RE{vid}|$RE{uid})/lengthvotes}, sub {
- my $o = dbobj tuwf->capture('thing');
- return tuwf->resNotFound if !$o->{id} || $o->{entry_hidden};
- my $vn = $o->{id} =~ /^v/;
+TUWF::get qr{/(?:(?<thing>$RE{vid}|$RE{uid})/)?lengthvotes}, sub {
+ my $thing = tuwf->capture('thing');
+ my $o = $thing && dbobj $thing;
+ return tuwf->resNotFound if $thing && (!$o->{id} || $o->{entry_hidden});
+ my $mode = !$thing ? '' : $o->{id} =~ /^v/ ? 'v' : 'u';
my $opt = tuwf->validate(get =>
p => { page => 1 },
- s => { tableopts => $vn ? $TABLEOPTS_V : $TABLEOPTS_U },
+ s => { tableopts => $TABLEOPTS{$mode} },
)->data;
my $where = sql_and
- $vn ? 'NOT EXISTS(SELECT 1 FROM users WHERE users.id = l.uid AND NOT perm_lengthvote)' : (),
- sql($vn ? 'l.vid =' : 'l.uid =', \$o->{id});
+ $mode ne 'u' ? 'NOT EXISTS(SELECT 1 FROM users WHERE users.id = l.uid AND NOT perm_lengthvote)' : (),
+ $mode ? sql($mode eq 'v' ? 'l.vid =' : 'l.uid =', \$o->{id}) : ();
my $count = tuwf->dbVali('SELECT COUNT(*) FROM vn_length_votes l WHERE', $where);
my $lst = tuwf->dbPagei({results => $opt->{s}->results, page => $opt->{p}},
- 'SELECT l.uid, l.vid, l.length, l.speed, l.notes, l.rid, ', sql_totime('l.date'), 'AS date, ',
- $vn ? sql_user() : 'v.title, v.original', '
+ 'SELECT l.uid, l.vid, l.length, l.speed, l.notes, l.rid, ', sql_totime('l.date'), 'AS date',
+ $mode ne 'u' ? (', ', sql_user()) : (),
+ $mode ne 'v' ? ', v.title, v.original' : (), '
FROM vn_length_votes l',
- $vn ? 'LEFT JOIN users u ON u.id = l.uid'
- : 'JOIN vn v ON v.id = l.vid',
+ $mode ne 'u' ? 'LEFT JOIN users u ON u.id = l.uid' : (),
+ $mode ne 'v' ? 'JOIN vn v ON v.id = l.vid' : (),
'WHERE', $where,
'ORDER BY', $opt->{s}->sql_order(),
);
- my $title = 'Length votes '.($vn ? 'for ' : 'by ').$o->{title};
+ my $title = 'Length votes'.($mode ? ($mode eq 'v' ? ' for ' : ' by ').$o->{title} : '');
framework_ title => $title, dbobj => $o, sub {
div_ class => 'mainbox', sub {
h1_ $title;
p_ 'Nothing to list. :(' if !@$lst;
};
- listing_ $opt, $count, $lst, $vn if @$lst;
+ listing_ $opt, $count, $lst, $mode if @$lst;
};
};