Add "mergepkgid" argument to pkg_delete()

This allows for merging comments and votes of deleted packages into
another one which is useful if a package needs to be renamed.

Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Lukas Fleischer 2011-07-31 19:05:00 +02:00
parent 0ac8970b62
commit f481645e64

View file

@ -659,10 +659,11 @@ function pkg_flag ($atype, $ids, $action = True) {
* *
* @param string $atype Account type, output of account_from_sid * @param string $atype Account type, output of account_from_sid
* @param array $ids Array of package IDs to delete * @param array $ids Array of package IDs to delete
* @param int $mergepkgid Package to merge the deleted ones into
* *
* @return string Translated error or success message * @return string Translated error or success message
*/ */
function pkg_delete ($atype, $ids) { function pkg_delete ($atype, $ids, $mergepkgid) {
if (!$atype) { if (!$atype) {
return __("You must be logged in before you can delete packages."); return __("You must be logged in before you can delete packages.");
} }
@ -678,6 +679,34 @@ function pkg_delete ($atype, $ids) {
} }
$dbh = db_connect(); $dbh = db_connect();
if ($mergepkgid) {
/* Merge comments */
$q = "UPDATE PackageComments ";
$q.= "SET PackageID = " . intval($mergepkgid) . " ";
$q.= "WHERE PackageID IN (" . implode(",", $ids) . ")";
db_query($q, $dbh);
/* Merge votes */
foreach ($ids as $pkgid) {
$q = "UPDATE PackageVotes ";
$q.= "SET PackageID = " . intval($mergepkgid) . " ";
$q.= "WHERE PackageID = " . $pkgid . " ";
$q.= "AND UsersID NOT IN (";
$q.= "SELECT * FROM (SELECT UsersID ";
$q.= "FROM PackageVotes ";
$q.= "WHERE PackageID = " . intval($mergepkgid);
$q.= ") temp)";
db_query($q, $dbh);
}
$q = "UPDATE Packages ";
$q.= "SET NumVotes = (SELECT COUNT(*) FROM PackageVotes ";
$q.= "WHERE PackageID = " . intval($mergepkgid) . ") ";
$q.= "WHERE ID = " . intval($mergepkgid);
db_query($q, $dbh);
}
$q = "DELETE FROM Packages WHERE ID IN (" . implode(",", $ids) . ")"; $q = "DELETE FROM Packages WHERE ID IN (" . implode(",", $ids) . ")";
$result = db_query($q, $dbh); $result = db_query($q, $dbh);