Add support for merge requests

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@cryptocrack.de>
This commit is contained in:
Lukas Fleischer 2014-06-25 11:29:17 +02:00
parent 959c61a77d
commit 91e6b5cb2f
7 changed files with 42 additions and 7 deletions

View file

@ -14,12 +14,14 @@ CREATE TABLE RequestTypes (
) ENGINE = InnoDB; ) ENGINE = InnoDB;
INSERT INTO RequestTypes VALUES (1, 'deletion'); INSERT INTO RequestTypes VALUES (1, 'deletion');
INSERT INTO RequestTypes VALUES (2, 'orphan'); INSERT INTO RequestTypes VALUES (2, 'orphan');
INSERT INTO RequestTypes VALUES (3, 'merge');
CREATE TABLE PackageRequests ( CREATE TABLE PackageRequests (
ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
ReqTypeID TINYINT UNSIGNED NOT NULL, ReqTypeID TINYINT UNSIGNED NOT NULL,
PackageBaseID INTEGER UNSIGNED NULL, PackageBaseID INTEGER UNSIGNED NULL,
PackageBaseName VARCHAR(255) NOT NULL, PackageBaseName VARCHAR(255) NOT NULL,
MergeBaseName VARCHAR(255) NULL,
UsersID INTEGER UNSIGNED NULL DEFAULT NULL, UsersID INTEGER UNSIGNED NULL DEFAULT NULL,
Comments TEXT NOT NULL DEFAULT '', Comments TEXT NOT NULL DEFAULT '',
RequestTS BIGINT UNSIGNED NOT NULL DEFAULT 0, RequestTS BIGINT UNSIGNED NOT NULL DEFAULT 0,

View file

@ -297,6 +297,7 @@ CREATE TABLE RequestTypes (
) ENGINE = InnoDB; ) ENGINE = InnoDB;
INSERT INTO RequestTypes VALUES (1, 'deletion'); INSERT INTO RequestTypes VALUES (1, 'deletion');
INSERT INTO RequestTypes VALUES (2, 'orphan'); INSERT INTO RequestTypes VALUES (2, 'orphan');
INSERT INTO RequestTypes VALUES (3, 'merge');
-- Package requests -- Package requests
-- --
@ -305,6 +306,7 @@ CREATE TABLE PackageRequests (
ReqTypeID TINYINT UNSIGNED NOT NULL, ReqTypeID TINYINT UNSIGNED NOT NULL,
PackageBaseID INTEGER UNSIGNED NULL, PackageBaseID INTEGER UNSIGNED NULL,
PackageBaseName VARCHAR(255) NOT NULL, PackageBaseName VARCHAR(255) NOT NULL,
MergeBaseName VARCHAR(255) NULL,
UsersID INTEGER UNSIGNED NULL DEFAULT NULL, UsersID INTEGER UNSIGNED NULL DEFAULT NULL,
Comments TEXT NOT NULL DEFAULT '', Comments TEXT NOT NULL DEFAULT '',
RequestTS BIGINT UNSIGNED NOT NULL DEFAULT 0, RequestTS BIGINT UNSIGNED NOT NULL DEFAULT 0,

View file

@ -97,7 +97,7 @@ if (check_token()) {
} elseif (current_action("do_ChangeCategory")) { } elseif (current_action("do_ChangeCategory")) {
list($ret, $output) = pkgbase_change_category($base_id, $atype); list($ret, $output) = pkgbase_change_category($base_id, $atype);
} elseif (current_action("do_FileRequest")) { } 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")) { } elseif (current_action("do_CloseRequest")) {
list($ret, $output) = pkgbase_close_request($_POST['reqid']); list($ret, $output) = pkgbase_close_request($_POST['reqid']);
} }

View file

@ -39,8 +39,11 @@ if ($atype == "Trusted User" || $atype == "Developer"): ?>
<input type="hidden" name="IDs[<?= $base_id ?>]" value="1" /> <input type="hidden" name="IDs[<?= $base_id ?>]" value="1" />
<input type="hidden" name="ID" value="<?= $base_id ?>" /> <input type="hidden" name="ID" value="<?= $base_id ?>" />
<input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" /> <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> <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" /> <p><input type="checkbox" name="confirm_Delete" value="1" />
<?= __("Confirm package merge") ?></p> <?= __("Confirm package merge") ?></p>
<p><input type="submit" class="button" name="do_Delete" value="<?= __("Merge") ?>" /></p> <p><input type="submit" class="button" name="do_Delete" value="<?= __("Merge") ?>" /></p>

View file

@ -90,11 +90,30 @@ if (!isset($base_id)) {
<input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" /> <input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
<p> <p>
<label for="id_type"><?= __("Request type") ?>:</label> <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="deletion"><?= __('Deletion') ?></option>
<option value="merge"><?= __('Merge') ?></option>
<option value="orphan"><?= __('Orphan') ?></option> <option value="orphan"><?= __('Orphan') ?></option>
</select> </select>
</p> </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> <p>
<label for="id_comments"><?= __("Comments") ?>:</label> <label for="id_comments"><?= __("Comments") ?>:</label>
<textarea name="comments" id="id_comments" rows="5" cols="50"></textarea> <textarea name="comments" id="id_comments" rows="5" cols="50"></textarea>

View file

@ -984,6 +984,7 @@ function pkgbase_request_list() {
$q = "SELECT PackageRequests.ID, "; $q = "SELECT PackageRequests.ID, ";
$q.= "PackageRequests.PackageBaseID AS BaseID, "; $q.= "PackageRequests.PackageBaseID AS BaseID, ";
$q.= "PackageRequests.PackageBaseName AS Name, "; $q.= "PackageRequests.PackageBaseName AS Name, ";
$q.= "PackageRequests.MergeBaseName AS MergeInto, ";
$q.= "RequestTypes.Name AS Type, PackageRequests.Comments, "; $q.= "RequestTypes.Name AS Type, PackageRequests.Comments, ";
$q.= "Users.Username AS User, PackageRequests.RequestTS, "; $q.= "Users.Username AS User, PackageRequests.RequestTS, ";
$q.= "PackageRequests.Status "; $q.= "PackageRequests.Status ";
@ -1002,11 +1003,12 @@ function pkgbase_request_list() {
* @global string $AUR_REQUEST_ML The request notification mailing 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 $ids The package base IDs to file the request against
* @param string $type The type of the request * @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 * @param string $comments The comments to be added to the request
* *
* @return void * @return void
*/ */
function pkgbase_file_request($ids, $type, $comments) { function pkgbase_file_request($ids, $type, $merge_into, $comments) {
global $AUR_LOCATION; global $AUR_LOCATION;
global $AUR_REQUEST_ML; global $AUR_REQUEST_ML;
@ -1030,10 +1032,11 @@ function pkgbase_file_request($ids, $type, $comments) {
} }
$q = "INSERT INTO PackageRequests "; $q = "INSERT INTO PackageRequests ";
$q.= "(ReqTypeID, PackageBaseID, PackageBaseName, UsersID, "; $q.= "(ReqTypeID, PackageBaseID, PackageBaseName, MergeBaseName, ";
$q.= "Comments, RequestTS) VALUES (" . $type_id . ", "; $q.= "UsersID, Comments, RequestTS) VALUES (" . $type_id . ", ";
$q.= intval($base_id) . ", " . $dbh->quote($pkgbase_name) . ", "; $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); $dbh->exec($q);
/* /*

View file

@ -36,7 +36,11 @@
<?php else: ?> <?php else: ?>
<td><?= htmlspecialchars($row["Name"]) ?></td> <td><?= htmlspecialchars($row["Name"]) ?></td>
<?php endif; ?> <?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> <td><?= htmlspecialchars(ucfirst($row['Type']), ENT_QUOTES); ?></td>
<?php endif; ?>
<td class="wrap"><?= htmlspecialchars($row['Comments'], ENT_QUOTES); ?></td> <td class="wrap"><?= htmlspecialchars($row['Comments'], ENT_QUOTES); ?></td>
<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> <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['BaseID']): ?>
<?php if ($row['Type'] == 'deletion'): ?> <?php if ($row['Type'] == 'deletion'): ?>
<a href="<?= get_pkgbase_uri($row['Name']) ?>delete/?via=<?= intval($row['ID']) ?>"><?= __('Accept') ?></a> <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'): ?> <?php elseif ($row['Type'] == 'orphan'): ?>
<form action="<?= get_pkgbase_uri($row['Name']) . 'disown/'; ?>" method="post"> <form action="<?= get_pkgbase_uri($row['Name']) . 'disown/'; ?>" method="post">
<input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" /> <input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />