Commit cc928066 authored by jake%acutex.net's avatar jake%acutex.net

Fix for bug 95634 - Improvements to Param('voteremovedmail')

Patch by Matthew Tuck <matty@chariot.net.au> r= jake@acutex.net
parent 54995494
...@@ -555,17 +555,19 @@ DefParam("emailsuffix", ...@@ -555,17 +555,19 @@ DefParam("emailsuffix",
DefParam("voteremovedmail", DefParam("voteremovedmail",
q{This is a mail message to send to anyone who gets a vote removed from a bug for any reason. %to% gets replaced by a comma-separated list of people who used to be voting for this bug. %bugid% gets replaced by the bug number. %reason% gets replaced by a short reason describing why the vote was removed. %count% is how many votes got removed.%<i>anythingelse</i>% gets replaced by the definition of that parameter (as defined on this page).}, q{This is a mail message to send to anyone who gets a vote removed from a bug for any reason. %to% gets replaced by the person who used to be voting for this bug. %bugid% gets replaced by the bug number. %reason% gets replaced by a short reason describing why the vote(s) were removed. %votesremoved%, %votesold% and %votesnew% is the number of votes removed, before and after respectively. %votesremovedtext%, %votesoldtext% and %votesnewtext% are these as sentences, eg "You had 2 votes on this bug." %count% is also supported for backwards compatibility. %<i>anythingelse</i>% gets replaced by the definition of that parameter (as defined on this page).},
"l", "l",
"From: bugzilla-daemon "From: bugzilla-daemon
To: %to% To: %to%
Subject: [Bug %bugid%] Your vote has been removed from this bug Subject: [Bug %bugid%] Some or all of your votes have been removed.
You used to have a vote on bug %bugid%, but it has been removed. Some or all of your votes have been removed from bug %bugid%.
Reason: %reason% %votesoldtext%
%votesnewtext%
Votes removed: %count% Reason: %reason%
%urlbase%show_bug.cgi?id=%bugid% %urlbase%show_bug.cgi?id=%bugid%
"); ");
......
...@@ -1195,33 +1195,45 @@ sub RemoveVotes { ...@@ -1195,33 +1195,45 @@ sub RemoveVotes {
$whopart); $whopart);
my @list; my @list;
while (MoreSQLData()) { while (MoreSQLData()) {
my ($name, $userid, $count, $votesperuser, $maxvotesperbug) = (FetchSQLData()); my ($name, $userid, $oldvotes, $votesperuser, $maxvotesperbug) = (FetchSQLData());
push(@list, [$name, $userid, $count, $votesperuser, $maxvotesperbug]); push(@list, [$name, $userid, $oldvotes, $votesperuser, $maxvotesperbug]);
} }
if (0 < @list) { if (0 < @list) {
foreach my $ref (@list) { foreach my $ref (@list) {
my ($name, $userid, $count, $votesperuser, $maxvotesperbug) = (@$ref); my ($name, $userid, $oldvotes, $votesperuser, $maxvotesperbug) = (@$ref);
my $s;
$maxvotesperbug = $votesperuser if ($votesperuser < $maxvotesperbug);
# If this product allows voting and the user's votes are in # If this product allows voting and the user's votes are in
# the acceptable range, then don't do anything. # the acceptable range, then don't do anything.
next if $votesperuser && $count <= $maxvotesperbug; next if $votesperuser && $oldvotes <= $maxvotesperbug;
# If the user has more votes on this bug than this product # If the user has more votes on this bug than this product
# allows, then reduce the number of votes so it fits # allows, then reduce the number of votes so it fits
my $newvotes = $votesperuser ? $maxvotesperbug : 0; my $newvotes = $votesperuser ? $maxvotesperbug : 0;
my $removedvotes = $oldvotes - $newvotes;
$s = $oldvotes == 1 ? "" : "s";
my $oldvotestext = "You had $oldvotes vote$s on this bug.";
$s = $removedvotes == 1 ? "" : "s";
my $removedvotestext = "You had $removedvotes vote$s removed from this bug.";
my $newvotestext;
if ($newvotes) { if ($newvotes) {
SendSQL("UPDATE votes SET count = $newvotes " . SendSQL("UPDATE votes SET count = $newvotes " .
"WHERE bug_id = $id AND who = $userid"); "WHERE bug_id = $id AND who = $userid");
my $s = $newvotes == 1 ? "" : "s"; $s = $newvotes == 1 ? "" : "s";
$count = ($count - $newvotes) . $newvotestext = "You still have $newvotes vote$s on this bug."
"\n You still have $newvotes vote$s on this bug";
} else { } else {
SendSQL("DELETE FROM votes WHERE bug_id = $id AND who = $userid"); SendSQL("DELETE FROM votes WHERE bug_id = $id AND who = $userid");
$count = "$count\n You have no more votes remaining on this bug"; $newvotestext = "You have no more votes remaining on this bug.";
} }
# Notice that we did not make sure that the user fit within the $votesperuser # Notice that we did not make sure that the user fit within the $votesperuser
# range. This is considered to be an acceptable alternative to loosing votes # range. This is considered to be an acceptable alternative to losing votes
# during product moves. Then next time the user attempts to change their votes, # during product moves. Then next time the user attempts to change their votes,
# they will be forced to fit within the $votesperuser limit. # they will be forced to fit within the $votesperuser limit.
...@@ -1233,10 +1245,21 @@ sub RemoveVotes { ...@@ -1233,10 +1245,21 @@ sub RemoveVotes {
} }
if (open(SENDMAIL, "|/usr/lib/sendmail $sendmailparm -t")) { if (open(SENDMAIL, "|/usr/lib/sendmail $sendmailparm -t")) {
my %substs; my %substs;
$substs{"to"} = $name; $substs{"to"} = $name;
$substs{"bugid"} = $id; $substs{"bugid"} = $id;
$substs{"reason"} = $reason; $substs{"reason"} = $reason;
$substs{"count"} = $count;
$substs{"votesremoved"} = $removedvotes;
$substs{"votesold"} = $oldvotes;
$substs{"votesnew"} = $newvotes;
$substs{"votesremovedtext"} = $removedvotestext;
$substs{"votesoldtext"} = $oldvotestext;
$substs{"votesnewtext"} = $newvotestext;
$substs{"count"} = $removedvotes . "\n " . $newvotestext;
my $msg = PerformSubsts(Param("voteremovedmail"), my $msg = PerformSubsts(Param("voteremovedmail"),
\%substs); \%substs);
print SENDMAIL $msg; print SENDMAIL $msg;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment