summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2010-12-20 19:30:21 +0100
committerYorhel <git@yorhel.nl>2010-12-20 19:30:21 +0100
commit5d39ff714a16df3e820f95a89ba4fd7d3c192141 (patch)
treefe59f26eb51bfeba45311274959d8fc2b6671c11
parent725b626dddd1acd033f61a94712336142c733937 (diff)
Added ability to batch-edit votes to /u+/votes
-rw-r--r--ChangeLog1
-rw-r--r--data/style.css2
-rw-r--r--lib/VNDB/DB/ULists.pm8
-rw-r--r--lib/VNDB/Handler/ULists.pm42
4 files changed, 47 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index c8880415..02d9bae9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -6,6 +6,7 @@
- RFC-01: Added vnlists feature and removed rlists.vstat option
- ULists::votelist: Don't give a 404 on /u+/votes when no votes found
- Added tab and link for /u+/votes to user tabs & main menu
+ - Added ability to batch-edit votes to /u+/votes
- ULists::votelist: Added first character selection
- Added advanced page-browsing tabs to threads
diff --git a/data/style.css b/data/style.css
index 60051cdc..c564213c 100644
--- a/data/style.css
+++ b/data/style.css
@@ -870,7 +870,7 @@ div.scr_uploader { visibility: hidden; overflow: hidden; width: 1px; height: 1px
/* vote lists */
-div.votelist td.tc1 { width: 70px }
+div.votelist td.tc1 { width: 80px; padding-top: 0; padding-bottom: 0 }
div.votelist td.tc2 { width: 50px; text-align: right; padding-right: 10px }
diff --git a/lib/VNDB/DB/ULists.pm b/lib/VNDB/DB/ULists.pm
index 27594a91..7c0d2660 100644
--- a/lib/VNDB/DB/ULists.pm
+++ b/lib/VNDB/DB/ULists.pm
@@ -251,14 +251,15 @@ sub dbVoteStats {
# Adds a new vote or updates an existing one
# Arguments: vid, uid, vote
+# vid can be an arrayref only when the rows are already present, in which case an update is done
sub dbVoteAdd {
my($self, $vid, $uid, $vote) = @_;
$self->dbExec(q|
UPDATE votes
SET vote = ?
- WHERE vid = ?
+ WHERE vid IN(!l)
AND uid = ?|,
- $vote, $vid, $uid
+ $vote, ref($vid) ? $vid : [$vid], $uid
) || $self->dbExec(q|
INSERT INTO votes
(vid, uid, vote)
@@ -269,10 +270,11 @@ sub dbVoteAdd {
# Arguments: uid, vid
+# vid can be an arrayref
sub dbVoteDel {
my($self, $uid, $vid) = @_;
$self->dbExec('DELETE FROM votes !W',
- { 'vid = ?' => $vid, 'uid = ?' => $uid }
+ { 'vid IN(!l)' => [ref($vid)?$vid:[$vid]], 'uid = ?' => $uid }
);
}
diff --git a/lib/VNDB/Handler/ULists.pm b/lib/VNDB/Handler/ULists.pm
index 2ab2e985..720701c1 100644
--- a/lib/VNDB/Handler/ULists.pm
+++ b/lib/VNDB/Handler/ULists.pm
@@ -118,6 +118,8 @@ sub votelist {
my $obj = $type eq 'v' ? $self->dbVNGet(id => $id)->[0] : $self->dbUserGet(uid => $id)->[0];
return 404 if !$obj->{id};
+ my $own = $type eq 'u' && $self->authInfo->{id} && $self->authInfo->{id} == $id;
+
my $f = $self->formValidate(
{ name => 'p', required => 0, default => 1, template => 'int' },
{ name => 'o', required => 0, default => 'd', enum => ['a', 'd'] },
@@ -125,6 +127,19 @@ sub votelist {
{ name => 'c', required => 0, default => 'all', enum => [ 'all', 'a'..'z', 0 ] },
);
+ if($own && $self->reqMethod eq 'POST') {
+ return if !$self->authCheckCode;
+ my $frm = $self->formValidate(
+ { name => 'vid', required => 1, multi => 1, template => 'int' },
+ { name => 'batchedit', required => 1, enum => [ -2, -1, 1..10 ] },
+ );
+ my @vid = grep $_ > 0, @{$frm->{vid}};
+ if(!$frm->{_err} && @vid && $frm->{batchedit} > -2) {
+ $self->dbVoteDel($id, \@vid) if $frm->{batchedit} == -1;
+ $self->dbVoteAdd(\@vid, $id, $frm->{batchedit}) if $frm->{batchedit} >= 0;
+ }
+ }
+
my($list, $np) = $self->dbVoteGet(
$type.'id' => $id,
what => $type eq 'v' ? 'user' : 'vn',
@@ -150,6 +165,11 @@ sub votelist {
p mt '_votelist_novotes' if !@$list;
end;
+ if($own) {
+ my $code = $self->authGetCode("/u$id/votes");
+ form action => "/u$id/votes?formcode=$code;c=$f->{c};s=$f->{s};p=$f->{p}", method => 'post';
+ }
+
@$list && $self->htmlBrowse(
class => 'votelist',
items => $list,
@@ -165,15 +185,33 @@ sub votelist {
row => sub {
my($s, $n, $l) = @_;
Tr $n % 2 ? (class => 'odd') : ();
- td class => 'tc1', $self->{l10n}->date($l->{date});
+ td class => 'tc1';
+ input type => 'checkbox', name => 'vid', value => $l->{vid} if $own;
+ txt ' '.$self->{l10n}->date($l->{date});
+ end;
td class => 'tc2', $l->{vote};
td class => 'tc3';
a href => $type eq 'v' ? ("/u$l->{uid}", $l->{username}) : ("/v$l->{vid}", shorten $l->{title}, 100);
end;
end;
},
+ $own ? (footer => sub {
+ Tr;
+ td colspan => 3, class => 'tc1';
+ input type => 'checkbox', class => 'checkall', name => 'vid', value => -1;
+ txt ' ';
+ Select name => 'batchedit', id => 'batchedit';
+ option value => -2, '-- with selected --';
+ optgroup label => 'Change vote';
+ option value => $_, "$_ (".mt("_vote_$_").')' for (reverse 1..10);
+ end;
+ option value => -1, 'revoke';
+ end;
+ end;
+ end;
+ }) : (),
);
-
+ end if $own;
$self->htmlFooter;
}