Bug 184309: Adds an optional disabled state to quips, which allows quips to be…

Bug 184309: Adds an optional disabled state to quips, which allows quips to be moderated if the admin so chooses. Patch by Tobias Burnus <burnus@gmx.de> r=joel, a=justdave
parent e86587aa
...@@ -191,7 +191,7 @@ sub GetQuip { ...@@ -191,7 +191,7 @@ sub GetQuip {
my $quip; my $quip;
SendSQL("SELECT quip FROM quips ORDER BY RAND() LIMIT 1"); SendSQL("SELECT quip FROM quips WHERE approved = 1 ORDER BY RAND() LIMIT 1");
if (MoreSQLData()) { if (MoreSQLData()) {
($quip) = FetchSQLData(); ($quip) = FetchSQLData();
......
...@@ -3844,6 +3844,10 @@ if ($sth->rows == 0) { ...@@ -3844,6 +3844,10 @@ if ($sth->rows == 0) {
} }
} }
# 2003-01-11, burnus@net-b.de, bug 184309
# Support for quips approval
AddField('quips', 'approved', 'tinyint(1) NOT NULL DEFAULT 1');
# 2002-11-XX Bug 180870 - remove manual shadowdb replication code # 2002-11-XX Bug 180870 - remove manual shadowdb replication code
if (TableExists('shadowlog')) { if (TableExists('shadowlog')) {
print "Removing shadowlog table\n"; print "Removing shadowlog table\n";
......
...@@ -226,11 +226,12 @@ sub check_netmask { ...@@ -226,11 +226,12 @@ sub check_netmask {
name => 'enablequips', name => 'enablequips',
desc => 'Controls the appearance of quips at the top of buglists.<ul> ' . desc => 'Controls the appearance of quips at the top of buglists.<ul> ' .
'<li>on - Bugzilla will display a quip, and lets users add to ' . '<li>on - Bugzilla will display a quip, and lets users add to ' .
'the list.</li><li>frozen - Bugzilla will display a quip but ' . 'the list.</li><li>approved - quips can be entered, but need ' .
'not permit new additions.</li><li>off - Bugzilla will not ' . 'be approved before shown</li><li>frozen - Bugzilla will display ' .
'display quips.</li></ul>', 'a quip but not permit new additions.</li><li>off - Bugzilla ' .
'will not display quips.</li></ul>',
type => 's', type => 's',
choices => ['on','frozen','off'], choices => ['on', 'approved', 'frozen', 'off'],
default => 'on', default => 'on',
checker => \&check_multi checker => \&check_multi
}, },
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
# Contributor(s): Owen Taylor <otaylor@redhat.com> # Contributor(s): Owen Taylor <otaylor@redhat.com>
# Gervase Markham <gerv@gerv.net> # Gervase Markham <gerv@gerv.net>
# David Fallon <davef@tetsubo.com> # David Fallon <davef@tetsubo.com>
# Tobias Burnus <burnus@net-b.de>
use strict; use strict;
...@@ -46,18 +47,20 @@ my $action = $::FORM{'action'} || ""; ...@@ -46,18 +47,20 @@ my $action = $::FORM{'action'} || "";
if ($action eq "show") { if ($action eq "show") {
# Read in the entire quip list # Read in the entire quip list
SendSQL("SELECT quipid,userid,quip FROM quips"); SendSQL("SELECT quipid, userid, quip, approved FROM quips");
my $quips; my $quips;
my @quipids; my @quipids;
while (MoreSQLData()) { while (MoreSQLData()) {
my ($quipid, $userid, $quip) = FetchSQLData(); my ($quipid, $userid, $quip, $approved) = FetchSQLData();
$quips->{$quipid} = {'userid' => $userid, 'quip' => $quip}; $quips->{$quipid} = {'userid' => $userid, 'quip' => $quip,
'approved' => $approved};
push(@quipids, $quipid); push(@quipids, $quipid);
} }
my $users; my $users;
foreach my $quipid (@quipids) { foreach my $quipid (@quipids) {
my $userid = $quips->{$quipid}{'userid'};
if (not defined $users->{$userid}) { if (not defined $users->{$userid}) {
SendSQL("SELECT login_name FROM profiles WHERE userid = $userid"); SendSQL("SELECT login_name FROM profiles WHERE userid = $userid");
$users->{$userid} = FetchSQLData(); $users->{$userid} = FetchSQLData();
...@@ -70,18 +73,49 @@ if ($action eq "show") { ...@@ -70,18 +73,49 @@ if ($action eq "show") {
} }
if ($action eq "add") { if ($action eq "add") {
(Param('enablequips') eq "on") || ThrowUserError("no_new_quips"); (Param('enablequips') eq "on" or Param('enablequips') eq "approved")
|| ThrowUserError("no_new_quips");
# Add the quip # Add the quip
my $approved = (Param('enablequips') eq "on") ? '1' : '0';
$approved = 1 if(UserInGroup('admin'));
my $comment = $::FORM{"quip"}; my $comment = $::FORM{"quip"};
$comment || ThrowUserError("need_quip"); $comment || ThrowUserError("need_quip");
$comment !~ m/</ || ThrowUserError("no_html_in_quips"); $comment !~ m/</ || ThrowUserError("no_html_in_quips");
SendSQL("INSERT INTO quips (userid, quip) VALUES (". $userid . ", " . SqlQuote($comment) . ")"); SendSQL("INSERT INTO quips (userid, quip, approved) VALUES " .
'(' . $userid . ', ' . SqlQuote($comment) . ', ' . $approved . ')');
$vars->{'added_quip'} = $comment; $vars->{'added_quip'} = $comment;
} }
if ($action eq 'approve') {
# Read in the entire quip list
SendSQL("SELECT quipid, approved FROM quips");
my %quips;
while (MoreSQLData()) {
my ($quipid, $approved) = FetchSQLData();
$quips{$quipid} = $approved;
}
my @approved;
my @unapproved;
foreach my $quipid (keys %quips) {
my $form = ($::FORM{'quipid_'.$quipid}) ? 1 : 0;
if($quips{$quipid} ne $form) {
if($form) { push(@approved, $quipid); }
else { push(@unapproved, $quipid); }
}
}
SendSQL("UPDATE quips SET approved = 1 WHERE quipid IN (" .
join(",", @approved) . ")") if($#approved > -1);
SendSQL("UPDATE quips SET approved = 0 WHERE quipid IN (" .
join(",", @unapproved) . ")") if($#unapproved > -1);
$vars->{ 'approved' } = \@approved;
$vars->{ 'unapproved' } = \@unapproved;
}
if ($action eq "delete") { if ($action eq "delete") {
if (!UserInGroup('admin')) { if (!UserInGroup('admin')) {
ThrowUserError("quips_edit_denied"); ThrowUserError("quips_edit_denied");
......
...@@ -35,6 +35,9 @@ ...@@ -35,6 +35,9 @@
<p> <p>
<font color="red"> <font color="red">
Your quip '<tt>[% added_quip FILTER html %]</tt>' has been added. Your quip '<tt>[% added_quip FILTER html %]</tt>' has been added.
[% IF Param("enablequips") == "approved" AND !UserInGroup('admin') %]
It will be used as soon as it gets approved.
[% END %]
</font> </font>
</p> </p>
[% END %] [% END %]
...@@ -47,10 +50,17 @@ ...@@ -47,10 +50,17 @@
</p> </p>
[% END %] [% END %]
[% IF approved or unapproved %]
<p>[% approved.size %] quips approved and [% unapproved.size %] quips unapproved</p>
[% END %]
<p> <p>
Bugzilla will pick a random quip for the headline on each bug list, and Bugzilla will pick a random quip for the headline on each bug list, and
you can extend the quip list. Type in something clever or funny or boring you can extend the quip list. Type in something clever or funny or boring
(but not obscene or offensive, please) and bonk on the button. (but not obscene or offensive, please) and bonk on the button.
[% IF Param("enablequips") == "approved" AND !UserInGroup('admin') %]
Note that your quip has to be approved before it is used.
[% END %]
</p> </p>
<form method="post" action="quips.cgi"> <form method="post" action="quips.cgi">
...@@ -67,35 +77,66 @@ ...@@ -67,35 +77,66 @@
Existing quips: Existing quips:
</h2> </h2>
<ul> <ul>
[% FOREACH quip = quips %] [% FOREACH quipid = quipids %]
<li>[% quip FILTER html %]</li> [% NEXT IF NOT quips.$quipid.approved %]
<li>[% quips.$quipid.quip FILTER html %]</li>
[% END %] [% END %]
</ul> </ul>
[% ELSE %] [% ELSE %]
<h2>Edit existing quips:</h2> <h2>Edit existing quips:</h2>
<table border="1"> <p>
<thead><tr> <strong>Note:</strong> Only approved quips will be shown.
<th>Quip</th> If enablequips is set to <q>on</q>, entered quips are automatically
<th>Author</th> approved.
<th>Action</th> </p>
</tr></thead><tbody> <form name="editform" method="post" action="quips.cgi">
[% FOREACH quipid = quipids %] <input type="hidden" name="action" value="approve">
<tr> <table border="1">
<td>[% quips.$quipid.quip FILTER html %]</td> <thead><tr>
<td> <th>Quip</th>
[% userid = quips.$quipid.userid %] <th>Author</th>
[% users.$userid FILTER html %] <th>Action</th>
[% "Unknown" IF NOT users.$userid %] <th>Approved</th>
</td> </tr></thead><tbody>
<td> [% FOREACH quipid = quipids %]
<a href="quips.cgi?action=delete&amp;quipid=[% quipid FILTER uri%]"> <tr>
Delete <td>[% quips.$quipid.quip FILTER html %]</td>
</a> <td>
</td> [% userid = quips.$quipid.userid %]
</tr> [% users.$userid FILTER html %]
[% END %] [% "Unknown" IF NOT users.$userid %]
</tbody> </td>
</table> <td>
<a href="quips.cgi?action=delete&amp;quipid=[% quipid FILTER uri%]">
Delete
</a>
</td>
<td>
<input type="checkbox" name="quipid_[% quipid FILTER uri%]"
id="quipid_[% quipid FILTER uri%]"
[%- ' checked="checked"' IF quips.$quipid.approved %]>
</td>
</tr>
[% END %]
</tbody>
</table>
<script type="text/javascript" language="JavaScript"><!--
var numelements = document.forms.editform.elements.length;
function SetCheckboxes(value) {
var item;
for (var i=0 ; i<numelements ; i++) {
item = document.forms.editform.elements[i];
item.checked = value;
}
}
document.write(' <input type="button" name="uncheck_all" '
+'value="Uncheck All" onclick="SetCheckboxes(false);">');
document.write(' <input type="button" name="check_all" '
+'value="Check All" onclick="SetCheckboxes(true);">');
//--></script>
<input type="submit" value="Update">
</form>
<br> <br>
[% END %] [% END %]
[% ELSE %] [% ELSE %]
......
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