summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Fleischer <archlinux@cryptocrack.de>2014-06-25 09:29:07 +0200
committerLukas Fleischer <archlinux@cryptocrack.de>2014-06-25 11:34:31 +0200
commitfc1db28c9b1b13c5b9e6baf6d24963081f18f017 (patch)
treed4adc2a358772396febfbc3a9f7c7e8a25536d20
parent8260111bcce49b73bd4973ae80296c913af2631d (diff)
downloadaurweb-fc1db28c9b1b13c5b9e6baf6d24963081f18f017.tar.xz
Allow for closing package requests
This allows Trusted Users to close package requests via the request list. Also, entries are now sorted such that open requests are shown before closed requests. Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
-rw-r--r--UPGRADING1
-rw-r--r--schema/aur-schema.sql1
-rw-r--r--web/html/css/aur.css30
-rw-r--r--web/html/pkgbase.php8
-rw-r--r--web/lib/pkgbasefuncs.inc.php26
-rw-r--r--web/lib/routing.inc.php6
-rw-r--r--web/template/pkgreq_results.php18
7 files changed, 73 insertions, 17 deletions
diff --git a/UPGRADING b/UPGRADING
index 455118e..ceee6f5 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -23,6 +23,7 @@ CREATE TABLE PackageRequests (
UsersID INTEGER UNSIGNED NULL DEFAULT NULL,
Comments TEXT NOT NULL DEFAULT '',
RequestTS BIGINT UNSIGNED NOT NULL DEFAULT 0,
+ Status TINYINT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (ID),
INDEX (UsersID),
INDEX (PackageBaseID),
diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql
index 88f9974..486beef 100644
--- a/schema/aur-schema.sql
+++ b/schema/aur-schema.sql
@@ -308,6 +308,7 @@ CREATE TABLE PackageRequests (
UsersID INTEGER UNSIGNED NULL DEFAULT NULL,
Comments TEXT NOT NULL DEFAULT '',
RequestTS BIGINT UNSIGNED NOT NULL DEFAULT 0,
+ Status TINYINT UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (ID),
INDEX (UsersID),
INDEX (PackageBaseID),
diff --git a/web/html/css/aur.css b/web/html/css/aur.css
index 78fd4ce..cbebb30 100644
--- a/web/html/css/aur.css
+++ b/web/html/css/aur.css
@@ -24,20 +24,6 @@
padding: 0;
}
-#actionlist .text-button {
- color: #07b;
- background: none;
- border: none;
- padding: 0;
- cursor: pointer;
- font-size: 100%;
-}
-
-#actionlist .text-button:hover {
- text-decoration: underline;
- color: #666;
-}
-
.arch-bio-entry ul {
list-style: none;
padding: 0;
@@ -61,3 +47,19 @@
#pkg-updates td.pkg-date {
text-align:right;
}
+
+.text-button {
+ background: transparent;
+ border: none !important;
+ margin: 0 !important;
+ padding: 0 !important;
+ font: normal 100% sans-serif;
+ text-decoration: none;
+ color: #07b;
+ cursor: pointer;
+}
+
+.text-button:hover {
+ text-decoration: underline;
+ color: #666;
+}
diff --git a/web/html/pkgbase.php b/web/html/pkgbase.php
index dd09977..9047f5b 100644
--- a/web/html/pkgbase.php
+++ b/web/html/pkgbase.php
@@ -96,6 +96,8 @@ if (check_token()) {
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']);
+ } elseif (current_action("do_CloseRequest")) {
+ list($ret, $output) = pkgbase_close_request($_POST['reqid']);
}
if (isset($_REQUEST['comment'])) {
@@ -105,7 +107,11 @@ if (check_token()) {
}
if ($ret) {
- if (isset($base_id)) {
+ if (current_action("do_CloseRequest")) {
+ /* Redirect back to package request page on success. */
+ header('Location: ' . get_pkgreq_route());
+ exit();
+ } if (isset($base_id)) {
/* Redirect back to package base page on success. */
header('Location: ' . get_pkgbase_uri($pkgbase_name));
exit();
diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index 505bb51..a039f83 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -975,10 +975,12 @@ function pkgbase_request_list() {
$q.= "PackageRequests.PackageBaseID AS BaseID, ";
$q.= "PackageRequests.PackageBaseName AS Name, ";
$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.= "FROM PackageRequests INNER JOIN RequestTypes ON ";
$q.= "RequestTypes.ID = PackageRequests.ReqTypeID ";
- $q.= "INNER JOIN Users ON Users.ID = PackageRequests.UsersID";
+ $q.= "INNER JOIN Users ON Users.ID = PackageRequests.UsersID ";
+ $q.= "ORDER BY Status ASC, RequestTS DESC";
return $dbh->query($q)->fetchAll();
}
@@ -1070,3 +1072,23 @@ function pkgbase_file_request($ids, $type, $comments) {
return array(true, __("Added request successfully."));
}
+
+/**
+ * Close a deletion/orphan request
+ *
+ * @param int $id The package request to close
+ *
+ * @return void
+ */
+function pkgbase_close_request($id) {
+ $dbh = DB::connect();
+
+ if (!check_user_privileges()) {
+ return array(false, __("Only TUs and developers can close requests."));
+ }
+
+ $q = "UPDATE PackageRequests SET Status = 1 WHERE ID = " . intval($id);
+ $dbh->exec($q);
+
+ return array(true, __("Request closed successfully."));
+}
diff --git a/web/lib/routing.inc.php b/web/lib/routing.inc.php
index 5836a13..2fa3e1f 100644
--- a/web/lib/routing.inc.php
+++ b/web/lib/routing.inc.php
@@ -21,6 +21,7 @@ $ROUTES = array(
$PKG_PATH = '/packages';
$PKGBASE_PATH = '/pkgbase';
+$PKGREQ_PATH = '/requests';
$USER_PATH = '/account';
function get_route($path) {
@@ -55,6 +56,11 @@ function get_pkgbase_route() {
return $PKGBASE_PATH;
}
+function get_pkgreq_route() {
+ global $PKGREQ_PATH;
+ return $PKGREQ_PATH;
+}
+
function get_pkg_uri($pkgname) {
global $USE_VIRTUAL_URLS;
global $PKG_PATH;
diff --git a/web/template/pkgreq_results.php b/web/template/pkgreq_results.php
index 7cbdcc4..33195c7 100644
--- a/web/template/pkgreq_results.php
+++ b/web/template/pkgreq_results.php
@@ -24,6 +24,7 @@
<th><?= __("Comments") ?></th>
<th><?= __("Filed by") ?></th>
<th><?= __("Date") ?></th>
+ <th><?= __("Status") ?></th>
</tr>
</thead>
<tbody>
@@ -41,6 +42,23 @@
<a href="<?= get_uri('/account/') . htmlspecialchars($row['User'], ENT_QUOTES) ?>" title="<?= __('View account information for %s', htmlspecialchars($row['User'])) ?>"><?= htmlspecialchars($row['User']) ?></a>
</td>
<td><?= gmdate("Y-m-d H:i", intval($row['RequestTS'])) ?></td>
+ <?php if ($row['Status'] == 0): ?>
+ <td>
+ <form action="<?= get_uri('/pkgbase/'); ?>" method="post">
+ <fieldset>
+ <input type="hidden" name="IDs[<?= $row['BaseID'] ?>]" value="1" />
+ <input type="hidden" name="ID" value="<?= $row['BaseID'] ?>" />
+ <input type="hidden" name="token" value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
+ <input type="hidden" name="reqid" value="<?= $row['ID'] ?>" />
+ <div>
+ <input type="submit" class="button text-button" name="do_CloseRequest" value="<?= __("Close") ?>" />
+ </div>
+ </fieldset>
+ </form>
+ </td>
+ <?php else: ?>
+ <td><?= __("Closed") ?></td>
+ <?php endif; ?>
</tr>
<?php endwhile; ?>