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 <[email protected]>
---
 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

Reply via email to