This button allows for accepting a request, disowning the affected
package or redirecting to the package deletion page. The request is
closed automatically when the action has been performed.

Signed-off-by: Lukas Fleischer <[email protected]>
---
 web/html/pkgbase.php            | 10 ++++++----
 web/html/pkgdel.php             |  3 +++
 web/lib/pkgbasefuncs.inc.php    | 14 ++++++++++++--
 web/template/pkgreq_results.php | 11 +++++++++++
 4 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/web/html/pkgbase.php b/web/html/pkgbase.php
index 9047f5b..da88210 100644
--- a/web/html/pkgbase.php
+++ b/web/html/pkgbase.php
@@ -59,23 +59,25 @@ if (check_token()) {
        } elseif (current_action("do_UnFlag")) {
                list($ret, $output) = pkgbase_unflag($atype, $ids);
        } elseif (current_action("do_Adopt")) {
-               list($ret, $output) = pkgbase_adopt($atype, $ids, true);
+               list($ret, $output) = pkgbase_adopt($atype, $ids, true, NULL);
        } elseif (current_action("do_Disown")) {
-               list($ret, $output) = pkgbase_adopt($atype, $ids, false);
+               $via = isset($_POST['via']) ? $_POST['via'] : NULL;
+               list($ret, $output) = pkgbase_adopt($atype, $ids, false, $via);
        } elseif (current_action("do_Vote")) {
                list($ret, $output) = pkgbase_vote($atype, $ids, true);
        } elseif (current_action("do_UnVote")) {
                list($ret, $output) = pkgbase_vote($atype, $ids, false);
        } elseif (current_action("do_Delete")) {
                if (isset($_POST['confirm_Delete'])) {
+                       $via = isset($_POST['via']) ? $_POST['via'] : NULL;
                        if (!isset($_POST['merge_Into']) || 
empty($_POST['merge_Into'])) {
-                               list($ret, $output) = pkgbase_delete($atype, 
$ids, NULL);
+                               list($ret, $output) = pkgbase_delete($atype, 
$ids, NULL, $via);
                                unset($_GET['ID']);
                        }
                        else {
                                $merge_base_id = 
pkgbase_from_name($_POST['merge_Into']);
                                if ($merge_base_id) {
-                                       list($ret, $output) = 
pkgbase_delete($atype, $ids, $merge_base_id);
+                                       list($ret, $output) = 
pkgbase_delete($atype, $ids, $merge_base_id, $via);
                                        unset($_GET['ID']);
                                }
                                else {
diff --git a/web/html/pkgdel.php b/web/html/pkgdel.php
index 39fe81a..621c3c9 100644
--- a/web/html/pkgdel.php
+++ b/web/html/pkgdel.php
@@ -37,6 +37,9 @@ 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><input type="checkbox" name="confirm_Delete" 
value="1" />
                        <?= __("Confirm package deletion") ?></p>
                        <p><input type="submit" class="button" name="do_Delete" 
value="<?= __("Delete") ?>" /></p>
diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index a039f83..2444674 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -438,10 +438,11 @@ function pkgbase_unflag($atype, $base_ids) {
  * @param string $atype Account type, output of account_from_sid
  * @param array $base_ids Array of package base IDs to delete
  * @param int $merge_base_id Package base to merge the deleted ones into
+ * @param int $via Package request to close upon deletion
  *
  * @return array Tuple of success/failure indicator and error message
  */
-function pkgbase_delete ($atype, $base_ids, $merge_base_id) {
+function pkgbase_delete ($atype, $base_ids, $merge_base_id, $via) {
        if (!$atype) {
                return array(false, __("You must be logged in before you can 
delete packages."));
        }
@@ -537,6 +538,10 @@ function pkgbase_delete ($atype, $base_ids, 
$merge_base_id) {
        $q = "DELETE FROM PackageBases WHERE ID IN (" . implode(",", $base_ids) 
. ")";
        $dbh->exec($q);
 
+       if ($via) {
+               pkgbase_close_request(intval($via));
+       }
+
        return array(true, __("The selected packages have been deleted."));
 }
 
@@ -546,10 +551,11 @@ function pkgbase_delete ($atype, $base_ids, 
$merge_base_id) {
  * @param string $atype Account type, output of account_from_sid
  * @param array $base_ids Array of package base IDs to adopt/disown
  * @param bool $action Adopts if true, disowns if false. Adopts by default
+ * @param int $via Package request to close upon adoption
  *
  * @return array Tuple of success/failure indicator and error message
  */
-function pkgbase_adopt ($atype, $base_ids, $action=true) {
+function pkgbase_adopt ($atype, $base_ids, $action=true, $via) {
        if (!$atype) {
                if ($action) {
                        return array(false, __("You must be logged in before 
you can adopt packages."));
@@ -590,6 +596,10 @@ function pkgbase_adopt ($atype, $base_ids, $action=true) {
 
        $dbh->exec($q);
 
+       if ($via) {
+               pkgbase_close_request(intval($via));
+       }
+
        if ($action) {
                pkgbase_notify(account_from_sid($_COOKIE["AURSID"]), $base_ids);
                return array(true, __("The selected packages have been 
adopted."));
diff --git a/web/template/pkgreq_results.php b/web/template/pkgreq_results.php
index 213f180..8ab8351 100644
--- a/web/template/pkgreq_results.php
+++ b/web/template/pkgreq_results.php
@@ -44,6 +44,17 @@
                        <td<?php if (time() - intval($row['RequestTS']) > 
$REQUEST_IDLE_TIME): ?> class="flagged"<?php endif; ?>><?= gmdate("Y-m-d H:i", 
intval($row['RequestTS'])) ?></td>
                        <?php if ($row['Status'] == 0): ?>
                        <td>
+                               <?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'] == 'orphan'): ?>
+                               <form action="<?= get_pkgbase_uri($row['Name']) 
. 'disown/'; ?>" method="post">
+                                       <input type="hidden" name="token" 
value="<?= htmlspecialchars($_COOKIE['AURSID']) ?>" />
+                                       <input type="hidden" name="via" 
value="<?= intval($row['ID']) ?>" />
+                                       <input type="submit" class="button 
text-button" name="do_Disown" value="<?= __('Accept') ?>" />
+                               </form>
+                               <?php endif; ?>
+                               <?php endif; ?>
                                <form action="<?= get_uri('/pkgbase/'); ?>" 
method="post">
                                        <fieldset>
                                                <input type="hidden" 
name="IDs[<?= $row['BaseID'] ?>]" value="1" />
-- 
2.0.0

Reply via email to