summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2020-04-16 10:02:19 +0200
committerYorhel <git@yorhel.nl>2020-04-16 10:02:22 +0200
commit8f9ffbba7d5ea62d7b4cf7305ddf341aa5fe1ab7 (patch)
treef4bdfcf7312a2a2868ec3a8b4070c27ac0e73c1f /lib
parentbe0aafedcd48d86a408a6310c331330a9229e08d (diff)
User::Lists: Always allow filtering on "Voted" label, even when private
Same idea as last commit, but now also for the web interface.
Diffstat (limited to 'lib')
-rw-r--r--lib/VNWeb/User/Lists.pm19
1 files changed, 15 insertions, 4 deletions
diff --git a/lib/VNWeb/User/Lists.pm b/lib/VNWeb/User/Lists.pm
index 3b9c0121..d4a5b800 100644
--- a/lib/VNWeb/User/Lists.pm
+++ b/lib/VNWeb/User/Lists.pm
@@ -422,17 +422,19 @@ sub vn_ {
sub listing_ {
my($uid, $own, $opt, $labels, $url) = @_;
- my @l = grep $_ > 0, $opt->{l}->@*;
+ my @l = grep $_ > 0 && $_ != 7, $opt->{l}->@*;
my($unlabeled) = grep $_ == -1, $opt->{l}->@*;
+ my($voted) = grep $_ == 7, $opt->{l}->@*;
my @where_vns = (
- @l ? sql('uv.vid IN(SELECT vid FROM ulist_vns_labels WHERE uid =', \$uid, 'AND lbl IN', \@l, ')') :
- !$own ? sql('uv.vid IN(SELECT vid FROM ulist_vns_labels WHERE uid =', \$uid, 'AND lbl IN(SELECT id FROM ulist_labels WHERE uid =', \$uid, 'AND NOT private))') : (),
- $unlabeled ? sql('NOT EXISTS(SELECT 1 FROM ulist_vns_labels WHERE uid =', \$uid, 'AND vid = uv.vid AND lbl <> ', \7, ')') : ()
+ @l ? sql('uv.vid IN(SELECT vid FROM ulist_vns_labels WHERE uid =', \$uid, 'AND lbl IN', \@l, ')') : (),
+ $unlabeled ? sql('NOT EXISTS(SELECT 1 FROM ulist_vns_labels WHERE uid =', \$uid, 'AND vid = uv.vid AND lbl <> ', \7, ')') : (),
+ $voted ? sql('uv.vote IS NOT NULL') : ()
);
my $where = sql_and
sql('uv.uid =', \$uid),
+ !$own ? sql('uv.vid IN(SELECT vid FROM ulist_vns_labels WHERE uid =', \$uid, 'AND lbl IN(SELECT id FROM ulist_labels WHERE uid =', \$uid, 'AND NOT private))') : (),
@where_vns ? sql_or(@where_vns) : (),
$opt->{q} ? map sql('v.c_search like', \"%$_%"), normalize_query $opt->{q} : (),
defined($opt->{ch}) && $opt->{ch} ? sql('LOWER(SUBSTR(v.title, 1, 1)) =', \$opt->{ch}) : (),
@@ -535,6 +537,15 @@ TUWF::get qr{/$RE{uid}/ulist}, sub {
# All visible labels that can be filtered on, including "virtual" labels like 'No label'
my $filtlabels = [
@$labels,
+ # Consider label 7 (Voted) a virtual label if it's set to private.
+ !grep($_->{id} == 7, @$labels) ? {
+ id => 7, label => 'Voted', count => tuwf->dbVali(
+ 'SELECT count(*)
+ FROM ulist_vns uv
+ WHERE uv.vote IS NOT NULL AND 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)
+ AND uid =', \$u->{id}
+ )
+ } : (),
$own ? {
id => -1, label => 'No label', count => tuwf->dbVali(
'SELECT count(*)