[aur-dev] [PATCH v2] Add "mergepkgid" argument to pkg_delete()

Lukas Fleischer archlinux at cryptocrack.de
Thu Aug 11 08:50:56 EDT 2011


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 at cryptocrack.de>
---
Queries should be SQL standard compliant now. Hopefully.

 web/lib/pkgfuncs.inc.php |   31 ++++++++++++++++++++++++++++++-
 1 files changed, 30 insertions(+), 1 deletions(-)

diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index bb5a592..eb2900b 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -659,10 +659,11 @@ function pkg_flag ($atype, $ids, $action = True) {
  *
  * @param string $atype Account type, output of account_from_sid
  * @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
  */
-function pkg_delete ($atype, $ids) {
+function pkg_delete ($atype, $ids, $mergepkgid) {
 	if (!$atype) {
 		return __("You must be logged in before you can delete packages.");
 	}
@@ -678,6 +679,34 @@ function pkg_delete ($atype, $ids) {
 	}
 
 	$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) . ")";
 	$result = db_query($q, $dbh);
 
-- 
1.7.6



More information about the aur-dev mailing list