[aur-dev] [PATCH 6/6] Add support for merge requests

Lukas Fleischer archlinux at cryptocrack.de
Wed Jun 25 05:44:39 EDT 2014


This adds a new "Merge" category to the list of available request types
and also adds a new "Merge into" field that is hidden via JavaScript
when "Deletion" or "Orphan" is selected.

Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>
---
 UPGRADING                       |  2 ++
 schema/aur-schema.sql           |  2 ++
 web/html/pkgbase.php            |  2 +-
 web/html/pkgmerge.php           |  5 ++++-
 web/html/pkgreq.php             | 21 ++++++++++++++++++++-
 web/lib/pkgbasefuncs.inc.php    | 11 +++++++----
 web/template/pkgreq_results.php |  6 ++++++
 7 files changed, 42 insertions(+), 7 deletions(-)

diff --git a/UPGRADING b/UPGRADING
index ceee6f5..0e8edf0 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -14,12 +14,14 @@ CREATE TABLE RequestTypes (
 ) ENGINE = InnoDB;
 INSERT INTO RequestTypes VALUES (1, 'deletion');
 INSERT INTO RequestTypes VALUES (2, 'orphan');
+INSERT INTO RequestTypes VALUES (3, 'merge');
 
 CREATE TABLE PackageRequests (
 	ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
 	ReqTypeID TINYINT UNSIGNED NOT NULL,
 	PackageBaseID INTEGER UNSIGNED NULL,
 	PackageBaseName VARCHAR(255) NOT NULL,
+	MergeBaseName VARCHAR(255) NULL,
 	UsersID INTEGER UNSIGNED NULL DEFAULT NULL,
 	Comments TEXT NOT NULL DEFAULT '',
 	RequestTS BIGINT UNSIGNED NOT NULL DEFAULT 0,
diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql
index 486beef..1ec7385 100644
--- a/schema/aur-schema.sql
+++ b/schema/aur-schema.sql
@@ -297,6 +297,7 @@ CREATE TABLE RequestTypes (
 ) ENGINE = InnoDB;
 INSERT INTO RequestTypes VALUES (1, 'deletion');
 INSERT INTO RequestTypes VALUES (2, 'orphan');
+INSERT INTO RequestTypes VALUES (3, 'merge');
 
 -- Package requests
 --
@@ -305,6 +306,7 @@ CREATE TABLE PackageRequests (
 	ReqTypeID TINYINT UNSIGNED NOT NULL,
 	PackageBaseID INTEGER UNSIGNED NULL,
 	PackageBaseName VARCHAR(255) NOT NULL,
+	MergeBaseName VARCHAR(255) NULL,
 	UsersID INTEGER UNSIGNED NULL DEFAULT NULL,
 	Comments TEXT NOT NULL DEFAULT '',
 	RequestTS BIGINT UNSIGNED NOT NULL DEFAULT 0,
diff --git a/web/html/pkgbase.php b/web/html/pkgbase.php
index da88210..0b0f6ef 100644
--- a/web/html/pkgbase.php
+++ b/web/html/pkgbase.php
@@ -97,7 +97,7 @@ if (check_token()) {
 	} elseif (current_action("do_ChangeCategory")) {
 		list($ret, $output) = pkgbase_change_category($base_id, $atype);
 	} elseif (current_action("do_FileRequest")) {
-		list($ret, $output) = pkgbase_file_request($ids, $_POST['type'], $_POST['comments']);
+		list($ret, $output) = pkgbase_file_request($ids, $_POST['type'], $_POST['merge_into'], $_POST['comments']);
 	} elseif (current_action("do_CloseRequest")) {
 		list($ret, $output) = pkgbase_close_request($_POST['reqid']);
 	}
diff --git a/web/html/pkgmerge.php b/web/html/pkgmerge.php
index dbc5eac..ba3f742 100644
--- a/web/html/pkgmerge.php
+++ b/web/html/pkgmerge.php
@@ -39,8 +39,11 @@ if ($atype == "Trusted User" || $atype == "Developer"): ?>
 			<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']) ?>" />
+			<?php if (isset($_GET['via'])): ?>
+			<input type="hidden" name="via" value="<?= intval($_GET['via']) ?>" />
+			<?php endif; ?>
 			<p><label for="merge_Into" ><?= __("Merge into:") ?></label>
-			<input type="text" id="merge_Into" name="merge_Into" /></p>
+			<input type="text" id="merge_Into" name="merge_Into" value="<?= isset($_GET['into']) ? $_GET['into'] : '' ?>" /></p>
 			<p><input type="checkbox" name="confirm_Delete" value="1" />
 			<?= __("Confirm package merge") ?></p>
 			<p><input type="submit" class="button" name="do_Delete" value="<?= __("Merge") ?>" /></p>
diff --git a/web/html/pkgreq.php b/web/html/pkgreq.php
index 05eeb51..2b46b02 100644
--- a/web/html/pkgreq.php
+++ b/web/html/pkgreq.php
@@ -90,11 +90,30 @@ if (!isset($base_id)) {
 			<input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
 			<p>
 				<label for="id_type"><?= __("Request type") ?>:</label>
-				<select name="type" id="id_type">
+				<select name="type" id="id_type" onchange="showHideMergeSection()">
 					<option value="deletion"><?= __('Deletion') ?></option>
+					<option value="merge"><?= __('Merge') ?></option>
 					<option value="orphan"><?= __('Orphan') ?></option>
 				</select>
 			</p>
+			<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+			<script type="text/javascript">
+			function showHideMergeSection() {
+				if ($('#id_type').val() == 'merge') {
+					$('#merge_section').show();
+				} else {
+					$('#merge_section').hide();
+				}
+			}
+
+			$(document).ready(function() {
+				showHideMergeSection();
+			});
+			</script>
+			<p id="merge_section">
+				<label for="id_merge_into"><?= __("Merge into") ?>:</label>
+				<input type="text" name="merge_into" id="id_merge_into" />
+			</p>
 			<p>
 				<label for="id_comments"><?= __("Comments") ?>:</label>
 				<textarea name="comments" id="id_comments" rows="5" cols="50"></textarea>
diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index 2444674..68dd656 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -984,6 +984,7 @@ function pkgbase_request_list() {
 	$q = "SELECT PackageRequests.ID, ";
 	$q.= "PackageRequests.PackageBaseID AS BaseID, ";
 	$q.= "PackageRequests.PackageBaseName AS Name, ";
+	$q.= "PackageRequests.MergeBaseName AS MergeInto, ";
 	$q.= "RequestTypes.Name AS Type, PackageRequests.Comments, ";
 	$q.= "Users.Username AS User, PackageRequests.RequestTS, ";
 	$q.= "PackageRequests.Status ";
@@ -1002,11 +1003,12 @@ function pkgbase_request_list() {
  * @global string $AUR_REQUEST_ML The request notification mailing list
  * @param string $ids The package base IDs to file the request against
  * @param string $type The type of the request
+ * @param string $merge_into The target of a merge operation
  * @param string $comments The comments to be added to the request
  *
  * @return void
  */
-function pkgbase_file_request($ids, $type, $comments) {
+function pkgbase_file_request($ids, $type, $merge_into, $comments) {
 	global $AUR_LOCATION;
 	global $AUR_REQUEST_ML;
 
@@ -1030,10 +1032,11 @@ function pkgbase_file_request($ids, $type, $comments) {
 	}
 
 	$q = "INSERT INTO PackageRequests ";
-	$q.= "(ReqTypeID, PackageBaseID, PackageBaseName, UsersID, ";
-	$q.= "Comments, RequestTS) VALUES (" . $type_id . ", ";
+	$q.= "(ReqTypeID, PackageBaseID, PackageBaseName, MergeBaseName, ";
+	$q.= "UsersID, Comments, RequestTS) VALUES (" . $type_id . ", ";
 	$q.= intval($base_id) . ", " .  $dbh->quote($pkgbase_name) . ", ";
-	$q.= $uid . ", " . $dbh->quote($comments) . ", UNIX_TIMESTAMP())";
+	$q.= $dbh->quote($merge_into) . ", " . $uid . ", ";
+	$q.= $dbh->quote($comments) . ", UNIX_TIMESTAMP())";
 	$dbh->exec($q);
 
 	/*
diff --git a/web/template/pkgreq_results.php b/web/template/pkgreq_results.php
index 8ab8351..042cc3a 100644
--- a/web/template/pkgreq_results.php
+++ b/web/template/pkgreq_results.php
@@ -36,7 +36,11 @@
 			<?php else: ?>
 			<td><?= htmlspecialchars($row["Name"]) ?></td>
 			<?php endif; ?>
+			<?php if ($row['Type'] == 'merge'): ?>
+			<td><?= htmlspecialchars(ucfirst($row['Type']), ENT_QUOTES); ?> (<?= htmlspecialchars(ucfirst($row['MergeInto']), ENT_QUOTES); ?>)</td>
+			<?php else: ?>
 			<td><?= htmlspecialchars(ucfirst($row['Type']), ENT_QUOTES); ?></td>
+			<?php endif; ?>
 			<td class="wrap"><?= htmlspecialchars($row['Comments'], ENT_QUOTES); ?></td>
 			<td>
 			<a href="<?= get_uri('/account/') . htmlspecialchars($row['User'], ENT_QUOTES) ?>" title="<?= __('View account information for %s', htmlspecialchars($row['User'])) ?>"><?= htmlspecialchars($row['User']) ?></a>
@@ -47,6 +51,8 @@
 				<?php if ($row['BaseID']): ?>
 				<?php if ($row['Type'] == 'deletion'): ?>
 				<a href="<?= get_pkgbase_uri($row['Name']) ?>delete/?via=<?= intval($row['ID']) ?>"><?= __('Accept') ?></a>
+				<?php elseif ($row['Type'] == 'merge'): ?>
+				<a href="<?= get_pkgbase_uri($row['Name']) ?>merge/?into=<?= urlencode($row['MergeInto']) ?>&via=<?= intval($row['ID']) ?>"><?= __('Accept') ?></a>
 				<?php elseif ($row['Type'] == 'orphan'): ?>
 				<form action="<?= get_pkgbase_uri($row['Name']) . 'disown/'; ?>" method="post">
 					<input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
-- 
2.0.0



More information about the aur-dev mailing list