diff options
author | Yorhel <git@yorhel.nl> | 2020-10-15 16:02:23 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2020-10-15 16:04:22 +0200 |
commit | f0ba4719534608093c1b1cd7a2e34c392c86891e (patch) | |
tree | 889a65c13fd9eb2867f07c04a9841e73822c567e /lib | |
parent | 7430acd68bf99585e461ef4fad4b40be45466d70 (diff) |
reviews: Allow anonymous voting + display overrule counting
Anonymous votes count for 0.01, regular votes for 1 and overrule votes
for 1000. It's a bit crude, but ought to do the job.
Reason for this change is that most reviews don't seem to get any votes
at all. With this anonymous voting we can do some sort of
scoring/ordering even with potentially less reliable votes.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VNWeb/Reviews/Elm.pm | 5 | ||||
-rw-r--r-- | lib/VNWeb/Reviews/Lib.pm | 4 | ||||
-rw-r--r-- | lib/VNWeb/Reviews/List.pm | 2 | ||||
-rw-r--r-- | lib/VNWeb/Reviews/Page.pm | 2 | ||||
-rw-r--r-- | lib/VNWeb/Reviews/VNTab.pm | 2 |
5 files changed, 7 insertions, 8 deletions
diff --git a/lib/VNWeb/Reviews/Elm.pm b/lib/VNWeb/Reviews/Elm.pm index 385c8b0f..9b520501 100644 --- a/lib/VNWeb/Reviews/Elm.pm +++ b/lib/VNWeb/Reviews/Elm.pm @@ -13,13 +13,12 @@ my $VOTE_IN = form_compile in => $VOTE; our $VOTE_OUT = form_compile out => $VOTE; elm_api ReviewsVote => $VOTE_OUT, $VOTE_IN, sub { - return elm_Unauth if !auth; my($data) = @_; - my %id = (uid => auth->uid, id => $data->{id}); + my %id = (auth ? (uid => auth->uid) : (ip => tuwf->reqIP()), id => $data->{id}); my %val = (vote => $data->{my}?1:0, overrule => auth->permBoardmod ? $data->{overrule}?1:0 : 0, date => sql 'NOW()'); tuwf->dbExeci( defined $data->{my} - ? sql 'INSERT INTO reviews_votes', {%id,%val}, 'ON CONFLICT (id,uid) DO UPDATE SET', \%val + ? sql 'INSERT INTO reviews_votes', {%id,%val}, 'ON CONFLICT (id,', auth ? 'uid' : 'ip', ') DO UPDATE SET', \%val : sql 'DELETE FROM reviews_votes WHERE', \%id ); elm_Success diff --git a/lib/VNWeb/Reviews/Lib.pm b/lib/VNWeb/Reviews/Lib.pm index 2872966c..1f7c6e4e 100644 --- a/lib/VNWeb/Reviews/Lib.pm +++ b/lib/VNWeb/Reviews/Lib.pm @@ -7,8 +7,8 @@ our @EXPORT = qw/reviews_vote_ reviews_format/; sub reviews_vote_ { my($w) = @_; span_ sub { - elm_ 'Reviews.Vote' => $VNWeb::Reviews::Elm::VOTE_OUT, {%$w, mod => auth->permBoardmod} if auth && ($w->{can} || auth->permBoardmod); - b_ class => 'grayedout', sprintf ' %d/%d', $w->{c_up}, $w->{c_down} if auth->permBoardmod; + elm_ 'Reviews.Vote' => $VNWeb::Reviews::Elm::VOTE_OUT, {%$w, mod => auth->permBoardmod||0} if $w->{can} || auth->permBoardmod; + b_ class => 'grayedout', sprintf ' %.2f/%.2f', $w->{c_up}/100, $w->{c_down}/100 if auth->permBoardmod; } } diff --git a/lib/VNWeb/Reviews/List.pm b/lib/VNWeb/Reviews/List.pm index 94c65625..eed0abf9 100644 --- a/lib/VNWeb/Reviews/List.pm +++ b/lib/VNWeb/Reviews/List.pm @@ -27,7 +27,7 @@ sub tablebox_ { td_ class => 'tc3', fmtvote $_->{vote}; td_ class => 'tc4', $_->{isfull} ? 'Full' : 'Mini'; td_ class => 'tc5', sub { a_ href => "/$_->{id}", $_->{title}; b_ class => 'grayedout', ' (flagged)' if $_->{c_flagged} }; - td_ class => 'tc6', sprintf '👍 %d 👎 %d', $_->{c_up}, $_->{c_down} if auth->isMod; + td_ class => 'tc6', sprintf '👍 %.2f 👎 %.2f', $_->{c_up}/100, $_->{c_down}/100 if auth->isMod; td_ class => 'tc7', $_->{c_count}; td_ class => 'tc8', $_->{c_lastnum} ? sub { user_ $_, 'lu_'; diff --git a/lib/VNWeb/Reviews/Page.pm b/lib/VNWeb/Reviews/Page.pm index 7673996a..d70a612f 100644 --- a/lib/VNWeb/Reviews/Page.pm +++ b/lib/VNWeb/Reviews/Page.pm @@ -94,7 +94,7 @@ TUWF::get qr{/$RE{wid}(?:(?<sep>[\./])$RE{num})?}, sub { LEFT JOIN users u ON u.id = r.uid LEFT JOIN ulist_vns uv ON uv.uid = r.uid AND uv.vid = r.vid LEFT JOIN (SELECT id, COUNT(*) FROM reviews_posts GROUP BY id) AS c(id,count) ON c.id = r.id - LEFT JOIN reviews_votes rv ON rv.id = r.id AND rv.uid =', \auth->uid, ' + LEFT JOIN reviews_votes rv ON rv.id = r.id AND', auth ? ('rv.uid =', \auth->uid) : ('rv.ip =', \tuwf->reqIP()), ' LEFT JOIN reviews rm ON rm.vid = r.vid AND rm.uid =', \auth->uid, ' WHERE r.id =', \$id ); diff --git a/lib/VNWeb/Reviews/VNTab.pm b/lib/VNWeb/Reviews/VNTab.pm index 8b372e5a..30408299 100644 --- a/lib/VNWeb/Reviews/VNTab.pm +++ b/lib/VNWeb/Reviews/VNTab.pm @@ -14,7 +14,7 @@ sub reviews_ { FROM reviews r LEFT JOIN users u ON r.uid = u.id LEFT JOIN ulist_vns uv ON uv.uid = r.uid AND uv.vid = r.vid - LEFT JOIN reviews_votes rv ON rv.uid =', \auth->uid, ' AND rv.id = r.id + LEFT JOIN reviews_votes rv ON rv.id = r.id AND', auth ? ('rv.uid =', \auth->uid) : ('rv.ip =', \tuwf->reqIP()), ' LEFT JOIN reviews rm ON rm.vid = r.vid AND rm.uid =', \auth->uid, ' WhERE NOT r.c_flagged AND r.vid =', \$v->{id}, 'AND', ($mini ? 'NOT' : ''), 'r.isfull ORDER BY r.c_up-r.c_down DESC' |