[aur-dev] [PATCH 2/2] Automatically close requests

Lukas Fleischer archlinux at cryptocrack.de
Wed Mar 4 11:24:04 UTC 2015


Close requests automatically when a package is deleted or orphaned.

Implements FS#43799.

Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>
---
 web/lib/pkgbasefuncs.inc.php | 31 ++++++++++++++++++++++++++++++-
 web/lib/pkgreqfuncs.inc.php  | 21 +++++++++++++++++++++
 2 files changed, 51 insertions(+), 1 deletion(-)

diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index 6f9ef85..3f02bc7 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -509,6 +509,22 @@ function pkgbase_delete ($base_ids, $merge_base_id, $via, $grant=false) {
 		pkgreq_close(intval($via), 'accepted', '');
 	}
 
+	/* Scan through pending deletion requests and close them. */
+	if (!$action) {
+		$username = username_from_sid($_COOKIE['AURSID']);
+		foreach ($base_ids as $base_id) {
+			$pkgreq_ids = array_merge(
+				pkgreq_by_pkgbase($base_id, 'deletion'),
+				pkgreq_by_pkgbase($base_id, 'merge'),
+				pkgreq_by_pkgbase($base_id, 'orphan'));
+			foreach ($pkgreq_ids as $pkgreq_id) {
+				pkgreq_close(intval($pkgreq_id), 'accepted',
+					'The user ' .  $username .
+					' deleted the package.', true);
+			}
+		}
+	}
+
 	if ($merge_base_id) {
 		/* Merge comments */
 		$q = "UPDATE PackageComments ";
@@ -555,6 +571,8 @@ function pkgbase_delete ($base_ids, $merge_base_id, $via, $grant=false) {
  * @return array Tuple of success/failure indicator and error message
  */
 function pkgbase_adopt ($base_ids, $action=true, $via) {
+	$dbh = DB::connect();
+
 	$uid = uid_from_sid($_COOKIE["AURSID"]);
 	if (!$uid) {
 		if ($action) {
@@ -583,7 +601,18 @@ function pkgbase_adopt ($base_ids, $action=true, $via) {
 		pkgreq_close(intval($via), 'accepted', '');
 	}
 
-	$dbh = DB::connect();
+	/* Scan through pending orphan requests and close them. */
+	if (!$action) {
+		$username = username_from_sid($_COOKIE['AURSID']);
+		foreach ($base_ids as $base_id) {
+			$pkgreq_ids = pkgreq_by_pkgbase($base_id, 'orphan');
+			foreach ($pkgreq_ids as $pkgreq_id) {
+				pkgreq_close(intval($pkgreq_id), 'accepted',
+					'The user ' .  $username .
+					' disowned the package.', true);
+			}
+		}
+	}
 
 	$q = "UPDATE PackageBases ";
 	if ($action) {
diff --git a/web/lib/pkgreqfuncs.inc.php b/web/lib/pkgreqfuncs.inc.php
index 0fab447..e4c63b5 100644
--- a/web/lib/pkgreqfuncs.inc.php
+++ b/web/lib/pkgreqfuncs.inc.php
@@ -42,6 +42,27 @@ function pkgreq_list($offset, $limit) {
 }
 
 /**
+ * Get a list of all open package requests belonging to a certain package base
+ *
+ * @param int $baseid The package base ID to retrieve requests for
+ * @param int $type The type of requests to obtain
+ *
+ * @return array List of package request IDs
+ */
+function pkgreq_by_pkgbase($baseid, $type) {
+	$dbh = DB::connect();
+
+	$q = "SELECT PackageRequests.ID ";
+	$q.= "FROM PackageRequests INNER JOIN RequestTypes ON ";
+	$q.= "RequestTypes.ID = PackageRequests.ReqTypeID ";
+	$q.= "WHERE PackageRequests.Status = 0 ";
+	$q.= "AND PackageRequests.PackageBaseID = " . intval($baseid) . " ";
+	$q.= "AND RequestTypes.Name = " . $dbh->quote($type);
+
+	return $dbh->query($q)->fetchAll(PDO::FETCH_COLUMN, 0);
+}
+
+/**
  * Obtain the package base that belongs to a package request.
  *
  * @param int $id Package request ID to retrieve the package base for
-- 
2.3.1


More information about the aur-dev mailing list