diff options
author | Yorhel <git@yorhel.nl> | 2020-04-16 10:02:19 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2020-04-16 10:02:22 +0200 |
commit | 8f9ffbba7d5ea62d7b4cf7305ddf341aa5fe1ab7 (patch) | |
tree | f4bdfcf7312a2a2868ec3a8b4070c27ac0e73c1f /lib | |
parent | be0aafedcd48d86a408a6310c331330a9229e08d (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.pm | 19 |
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(*) |