Sometimes, a user accidentally flags a package out-of-date. Allow users
to unflag packages that they flagged themselves, thereby providing a way
to undo these actions.

Implements FS#46145.

Signed-off-by: Lukas Fleischer <[email protected]>
---
 web/lib/pkgbasefuncs.inc.php     | 3 ++-
 web/lib/pkgfuncs.inc.php         | 2 +-
 web/template/pkg_details.php     | 3 ++-
 web/template/pkgbase_actions.php | 2 +-
 web/template/pkgbase_details.php | 3 ++-
 5 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index df1ae18..24d3393 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -150,6 +150,7 @@ function pkgbase_get_details($base_id) {
        $q.= "PackageBases.OutOfDateTS, PackageBases.SubmittedTS, ";
        $q.= "PackageBases.ModifiedTS, PackageBases.SubmitterUID, ";
        $q.= "PackageBases.MaintainerUID, PackageBases.PackagerUID, ";
+       $q.= "PackageBases.FlaggerUID, ";
        $q.= "(SELECT COUNT(*) FROM PackageRequests ";
        $q.= " WHERE PackageRequests.PackageBaseID = PackageBases.ID ";
        $q.= " AND PackageRequests.Status = 0) AS RequestCount ";
@@ -370,7 +371,7 @@ function pkgbase_unflag($base_ids) {
 
        $maintainers = array_merge(pkgbase_maintainer_uids($base_ids), 
pkgbase_get_comaintainer_uids($base_ids));
        if (!has_credential(CRED_PKGBASE_UNFLAG, $maintainers)) {
-               $q.= "AND MaintainerUID = " . $uid;
+               $q.= "AND (MaintainerUID = " . $uid . " OR FlaggerUID = " . 
$uid. ")";
        }
 
        $result = $dbh->exec($q);
diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index f403471..d760429 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -435,7 +435,7 @@ function pkg_get_details($id=0) {
        $q.= "PackageBases.Popularity, PackageBases.OutOfDateTS, ";
        $q.= "PackageBases.SubmittedTS, PackageBases.ModifiedTS, ";
        $q.= "PackageBases.SubmitterUID, PackageBases.MaintainerUID, ";
-       $q.= "PackageBases.PackagerUID, ";
+       $q.= "PackageBases.PackagerUID, PackageBases.FlaggerUID, ";
        $q.= "(SELECT COUNT(*) FROM PackageRequests ";
        $q.= " WHERE PackageRequests.PackageBaseID = Packages.PackageBaseID ";
        $q.= " AND PackageRequests.Status = 0) AS RequestCount ";
diff --git a/web/template/pkg_details.php b/web/template/pkg_details.php
index f4eed51..5ba3607 100644
--- a/web/template/pkg_details.php
+++ b/web/template/pkg_details.php
@@ -21,8 +21,9 @@ $packager = username_from_id($row["PackagerUID"]);
 if ($row["MaintainerUID"] !== NULL) {
        $maintainers = array_merge(array($row["MaintainerUID"]), 
pkgbase_get_comaintainer_uids(array($base_id)));
 } else {
-       $maintainers = NULL;
+       $maintainers = array();
 }
+$unflaggers = array_merge($maintainers, array($row["FlaggerUID"]));
 
 $votes = $row['NumVotes'];
 $popularity = $row['Popularity'];
diff --git a/web/template/pkgbase_actions.php b/web/template/pkgbase_actions.php
index c7428ee..dea348e 100644
--- a/web/template/pkgbase_actions.php
+++ b/web/template/pkgbase_actions.php
@@ -11,7 +11,7 @@
                        <li><span class="flagged"><?php if ($row["OutOfDateTS"] 
!== NULL) { echo __('Flagged out-of-date')." (${out_of_date_time})"; } 
?></span></li>
                        <?php if ($row["OutOfDateTS"] === NULL): ?>
                        <li><?= html_action_form($base_uri . 'flag/', 
"do_Flag", __('Flag package out-of-date')) ?></li>
-                       <?php elseif (($row["OutOfDateTS"] !== NULL) && 
has_credential(CRED_PKGBASE_UNFLAG, $maintainers)): ?>
+                       <?php elseif (($row["OutOfDateTS"] !== NULL) && 
has_credential(CRED_PKGBASE_UNFLAG, $unflaggers)): ?>
                        <li><?= html_action_form($base_uri . 'unflag/', 
"do_UnFlag", __('Unflag package')) ?></li>
                        <?php endif; ?>
 
diff --git a/web/template/pkgbase_details.php b/web/template/pkgbase_details.php
index d4304e3..1012c4e 100644
--- a/web/template/pkgbase_details.php
+++ b/web/template/pkgbase_details.php
@@ -20,8 +20,9 @@ $packager = username_from_id($row["PackagerUID"]);
 if ($row["MaintainerUID"] !== NULL) {
        $maintainers = array_merge(array($row["MaintainerUID"]), 
pkgbase_get_comaintainer_uids(array($base_id)));
 } else {
-       $maintainers = NULL;
+       $maintainers = array();
 }
+$unflaggers = array_merge($maintainers, array($row["FlaggerUID"]));
 
 $votes = $row['NumVotes'];
 $popularity = $row['Popularity'];
-- 
2.5.0

Reply via email to