diff options
author | Yorhel <git@yorhel.nl> | 2021-07-29 18:40:11 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2021-07-30 11:25:27 +0200 |
commit | 45df2ef26b7df9d43093655f56e345d717a737a3 (patch) | |
tree | 0f94d359f92af64a88c279f6362a08e014871aba /lib | |
parent | d2b959a3ca4169fa43f9f422c2b869c3bede08a0 (diff) |
Add early test implementation of VN length voting
There's no way to list or aggregate the votes yet, and I'm not fully
sure the data model is what it should be. Hence testing.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VNWeb/Auth.pm | 2 | ||||
-rw-r--r-- | lib/VNWeb/User/Edit.pm | 11 | ||||
-rw-r--r-- | lib/VNWeb/VN/Elm.pm | 23 | ||||
-rw-r--r-- | lib/VNWeb/VN/Page.pm | 11 |
4 files changed, 40 insertions, 7 deletions
diff --git a/lib/VNWeb/Auth.pm b/lib/VNWeb/Auth.pm index 3408db77..06ca88ec 100644 --- a/lib/VNWeb/Auth.pm +++ b/lib/VNWeb/Auth.pm @@ -67,7 +67,7 @@ sub isMod { auth->permUsermod || auth->permDbmod || auth->permBoardmod || auth-> -my @perms = qw/board boardmod edit imgvote tag dbmod tagmod usermod review/; +my @perms = qw/board boardmod edit imgvote tag dbmod tagmod usermod review lengthvote/; sub listPerms { @perms } diff --git a/lib/VNWeb/User/Edit.pm b/lib/VNWeb/User/Edit.pm index d04647ad..ad74088f 100644 --- a/lib/VNWeb/User/Edit.pm +++ b/lib/VNWeb/User/Edit.pm @@ -128,11 +128,12 @@ elm_api UserEdit => $FORM_OUT, $FORM_IN, sub { tuwf->dbExeci(select => sql_func user_setperm_usermod => \$data->{id}, \auth->uid, sql_fromhex(auth->token), \$data->{admin}{perm_usermod}); $set{"perm_$_"} = $data->{admin}{"perm_$_"} for grep $_ ne 'usermod', auth->listPerms; } - $set{perm_board} = $data->{admin}{perm_board} if auth->permBoardmod; - $set{perm_review} = $data->{admin}{perm_review} if auth->permBoardmod; - $set{perm_edit} = $data->{admin}{perm_edit} if auth->permDbmod; - $set{perm_imgvote} = $data->{admin}{perm_imgvote} if auth->permDbmod; - $set{perm_tag} = $data->{admin}{perm_tag} if auth->permTagmod; + $set{perm_board} = $data->{admin}{perm_board} if auth->permBoardmod; + $set{perm_review} = $data->{admin}{perm_review} if auth->permBoardmod; + $set{perm_edit} = $data->{admin}{perm_edit} if auth->permDbmod; + $set{perm_imgvote} = $data->{admin}{perm_imgvote} if auth->permDbmod; + $set{perm_lengthvote} = $data->{admin}{perm_lengthvote} if auth->permDbmod; + $set{perm_tag} = $data->{admin}{perm_tag} if auth->permTagmod; if($own && $data->{password}) { return elm_InsecurePass if is_insecurepass $data->{password}{new}; diff --git a/lib/VNWeb/VN/Elm.pm b/lib/VNWeb/VN/Elm.pm index 3bf02d59..fb452a43 100644 --- a/lib/VNWeb/VN/Elm.pm +++ b/lib/VNWeb/VN/Elm.pm @@ -30,4 +30,27 @@ elm_api VN => undef, { '); }; + +our $LENGTHVOTE = form_compile any => { + uid => { vndbid => 'u' }, + vid => { vndbid => 'v' }, + vote => { type => 'hash', required => 0, keys => { + rid => { vndbid => 'r' }, + length => { uint => 1, range => [1,32767] }, + notes => { required => 0, default => '' }, + } }, +}; + +elm_api VNLengthVote => undef, $LENGTHVOTE, sub { + my($data) = @_; + return elm_Unauth if !auth->permLengthvote || $data->{uid} ne auth->uid; + my %where = ( uid => $data->{uid}, vid => $data->{vid} ); + tuwf->dbExeci('DELETE FROM vn_length_votes WHERE', \%where) if !$data->{vote}; + tuwf->dbExeci( + 'INSERT INTO vn_length_votes', { %where, $data->{vote}->%* }, + 'ON CONFLICT (uid, vid) DO UPDATE SET', $data->{vote} + ) if $data->{vote}; + return elm_Success; +}; + 1; diff --git a/lib/VNWeb/VN/Page.pm b/lib/VNWeb/VN/Page.pm index 6a45502c..10ac10ba 100644 --- a/lib/VNWeb/VN/Page.pm +++ b/lib/VNWeb/VN/Page.pm @@ -355,7 +355,16 @@ sub infobox_ { tr_ sub { td_ 'Length'; - td_ "$VN_LENGTH{$v->{length}}{txt} ($VN_LENGTH{$v->{length}}{time})"; + td_ sub { + txt_ "$VN_LENGTH{$v->{length}}{txt} ($VN_LENGTH{$v->{length}}{time})"; + if (auth->permLengthvote && canvote $v) { + my $vote = tuwf->dbRowi('SELECT rid, length, notes FROM vn_length_votes WHERE vid =', \$v->{id}, 'AND uid =', \auth->uid); + elm_ VNLengthVote => $VNWeb::VN::Elm::LENGTHVOTE, { + uid => auth->uid, vid => $v->{id}, + vote => $vote->{rid}?$vote:undef, + }, sub { span_ @_, ''}; + } + }; } if $v->{length}; infobox_producers_ $v; |