Transfer notifications when merging packages

When a package base is merged into another one, followers of the old
package base usually want to be notified about comments the new package
base as well.

Fixes FS#27687.

Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
This commit is contained in:
Lukas Fleischer 2015-09-13 14:45:15 +02:00
parent f9476c1093
commit 34e7f7084a
2 changed files with 17 additions and 4 deletions

View file

@ -167,10 +167,9 @@ def delete(cur, uid, old_pkgbase_id, new_pkgbase_id=None):
if new_pkgbase_id:
new_pkgbase_uri = aur_location + '/pkgbase/' + new_pkgbase + '/'
body = '%s [1] merged %s [2] into %s [3].\n\n' \
'You will no longer receive notifications about this ' \
'package, please go to [3] and click "%s" if you wish to ' \
'receive them again.' % \
(user, old_pkgbase, new_pkgbase, 'Notify of new comments')
'If you no longer wish receive notifications about the new ' \
'package, please go to [3] and click "%s".' %\
(user, old_pkgbase, new_pkgbase, 'Disable notifications')
body += '\n\n'
body += '[1] ' + user_uri + '\n'
body += '[2] ' + pkgbase_uri + '\n'

View file

@ -448,6 +448,20 @@ function pkgbase_delete ($base_ids, $merge_base_id, $via, $grant=false) {
$q.= "WHERE PackageBaseID IN (" . implode(",", $base_ids) . ")";
$dbh->exec($q);
/* Merge notifications */
$q = "SELECT DISTINCT UserID FROM CommentNotify cn ";
$q.= "WHERE PackageBaseID IN (" . implode(",", $base_ids) . ") ";
$q.= "AND NOT EXISTS (SELECT * FROM CommentNotify cn2 ";
$q.= "WHERE cn2.PackageBaseID = " . intval($merge_base_id) . " ";
$q.= "AND cn2.UserID = cn.UserID)";
$result = $dbh->query($q);
while ($notify_uid = $result->fetch(PDO::FETCH_COLUMN, 0)) {
$q = "INSERT INTO CommentNotify (UserID, PackageBaseID) ";
$q.= "VALUES (" . intval($notify_uid) . ", " . intval($merge_base_id) . ")";
$dbh->exec($q);
}
/* Merge votes */
foreach ($base_ids as $base_id) {
$q = "UPDATE PackageVotes ";