Require comments when flagging packages out-of-date

Implements FS#42827.

Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
Lukas Fleischer 2015-08-31 18:29:06 +02:00
parent 6b7e26a2d1
commit 396e50bdc8
6 changed files with 27 additions and 12 deletions

View file

@ -82,6 +82,7 @@ CREATE TABLE PackageBases (
NumVotes INTEGER UNSIGNED NOT NULL DEFAULT 0,
Popularity DECIMAL(10,6) UNSIGNED NOT NULL DEFAULT 0,
OutOfDateTS BIGINT UNSIGNED NULL DEFAULT NULL,
FlaggerComment VARCHAR(255) NOT NULL,
SubmittedTS BIGINT UNSIGNED NOT NULL,
ModifiedTS BIGINT UNSIGNED NOT NULL,
FlaggerUID BIGINT UNSIGNED NULL DEFAULT NULL, -- who flagged the package out-of-date?

View file

@ -139,14 +139,15 @@ def flag(cur, uid, pkgbase_id):
user = username_from_id(cur, uid)
pkgbase = pkgbase_from_id(cur, pkgbase_id)
to = [get_maintainer_email(cur, pkgbase_id)]
text = sys.stdin.read()
user_uri = aur_location + '/account/' + user + '/'
pkgbase_uri = aur_location + '/pkgbase/' + pkgbase + '/'
subject = 'AUR Out-of-date Notification for %s' % (pkgbase)
body = 'Your package %s [1] has been flagged out-of-date by %s [2]. ' % \
body = 'Your package %s [1] has been flagged out-of-date by %s [2]:' % \
(pkgbase, user)
body += '\n\n'
body += '\n\n' + text + '\n\n'
body += '[1] ' + pkgbase_uri + '\n'
body += '[2] ' + user_uri

View file

@ -8,10 +8,11 @@ ALTER TABLE PackageComments
ADD FOREIGN KEY (EditedUsersID) REFERENCES Users(ID) ON DELETE SET NULL;
----
2. Add a field to store the ID of the last user who flagged a package
out-of-date:
2. Add fields to store the ID and comment of the last user who flagged a
package out-of-date:
----
ALTER TABLE PackageBases
ADD COLUMN FlaggerUID BIGINT UNSIGNED NULL DEFAULT NULL;
ADD COLUMN FlaggerUID BIGINT UNSIGNED NULL DEFAULT NULL,
ADD COLUMN FlaggerComment VARCHAR(255) NOT NULL;
----

View file

@ -49,7 +49,12 @@ $output = "";
$fragment = "";
if (check_token()) {
if (current_action("do_Flag")) {
list($ret, $output) = pkgbase_flag($ids);
if (strlen($_POST['comments']) >= 3) {
list($ret, $output) = pkgbase_flag($ids, $_POST['comments']);
} else {
$output = __("The selected packages have not been flagged, please enter a comment.");
$ret = false;
}
} elseif (current_action("do_UnFlag")) {
list($ret, $output) = pkgbase_unflag($ids);
} elseif (current_action("do_Adopt")) {

View file

@ -25,12 +25,17 @@ if (has_credential(CRED_PKGBASE_FLAG)): ?>
<p>
<?= __('Please do %snot%s use this form to report bugs. Use the package comments instead.',
'<strong>', '</strong>'); ?>
<?= __('Enter details on why the package is out-of-date below, preferably including links to the release announcement or the new release tarball.'); ?>
</p>
<form action="<?= get_uri('/pkgbase/'); ?>" method="post">
<fieldset>
<input type="hidden" name="IDs[<?= $base_id ?>]" value="1" />
<input type="hidden" name="ID" value="<?= $base_id ?>" />
<input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
<p>
<label for="id_comments"><?= __("Comments") ?>:</label>
<textarea name="comments" id="id_comments" rows="5" cols="50"></textarea>
</p>
<p><input type="submit" class="button" name="do_Flag" value="<?= __("Flag") ?>" /></p>
</fieldset>
</form>

View file

@ -316,10 +316,11 @@ function pkgbase_maintainer_uids($base_ids) {
* Flag package(s) as out-of-date
*
* @param array $base_ids Array of package base IDs to flag/unflag
* @param string $comment The comment to add
*
* @return array Tuple of success/failure indicator and error message
*/
function pkgbase_flag($base_ids) {
function pkgbase_flag($base_ids, $comment) {
if (!has_credential(CRED_PKGBASE_FLAG)) {
return array(false, __("You must be logged in before you can flag packages."));
}
@ -332,14 +333,15 @@ function pkgbase_flag($base_ids) {
$uid = uid_from_sid($_COOKIE['AURSID']);
$dbh = DB::connect();
$q = "UPDATE PackageBases SET";
$q.= " OutOfDateTS = UNIX_TIMESTAMP(), FlaggerUID = " . $uid;
$q.= " WHERE ID IN (" . implode(",", $base_ids) . ")";
$q.= " AND OutOfDateTS IS NULL";
$q = "UPDATE PackageBases SET ";
$q.= "OutOfDateTS = UNIX_TIMESTAMP(), FlaggerUID = " . $uid . ", ";
$q.= "FlaggerComment = " . $dbh->quote($comment) . " ";
$q.= "WHERE ID IN (" . implode(",", $base_ids) . ") ";
$q.= "AND OutOfDateTS IS NULL";
$dbh->exec($q);
foreach ($base_ids as $base_id) {
notify(array('flag', $uid, $base_id));
notify(array('flag', $uid, $base_id), $comment);
}
return array(true, __("The selected packages have been flagged out-of-date."));