When a user disowns a package and promotes a co-maintainer, remove that
new maintainer from the list of package co-maintainers. Since only the
package maintainer can manage co-maintainers, this must happen before
the actual disown operation.

Signed-off-by: Lukas Fleischer <[email protected]>
---
 web/lib/pkgbasefuncs.inc.php | 33 ++++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 13 deletions(-)

diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index 5b8b52f..327b7f9 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -629,32 +629,39 @@ function pkgbase_adopt ($base_ids, $action=true, $via) {
                }
        }
 
-       $q = "UPDATE PackageBases ";
+       /* Adopt or disown the package. */
        if ($action) {
+               $q = "UPDATE PackageBases ";
                $q.= "SET MaintainerUID = $uid ";
+               $q.= "WHERE ID IN (" . implode(",", $base_ids) . ") ";
+               $dbh->exec($q);
        } else {
-               $q.= "SET MaintainerUID = NULL ";
-       }
-       $q.= "WHERE ID IN (" . implode(",", $base_ids) . ") ";
-       $dbh->exec($q);
-
-       /* Update package co-maintainers when disowning a package. */
-       if (!$action) {
+               /* Update the co-maintainer list when disowning a package. */
                if (has_credential(CRED_PKGBASE_DISOWN)) {
                        foreach ($base_ids as $base_id) {
-                               pkgbase_set_comaintainers($base_id, "");
+                               pkgbase_set_comaintainers($base_id, array());
                        }
+
+                       $q = "UPDATE PackageBases ";
+                       $q.= "SET MaintainerUID = NULL ";
+                       $q.= "WHERE ID IN (" . implode(",", $base_ids) . ") ";
+                       $dbh->exec($q);
                } else {
                        foreach ($base_ids as $base_id) {
                                $comaintainers = 
pkgbase_get_comaintainers($base_id);
 
                                if (count($comaintainers) > 0) {
                                        $uid = 
uid_from_username($comaintainers[0]);
-                                       $q = "UPDATE PackageBases ";
-                                       $q.= "SET MaintainerUID = " . $uid .  " 
";
-                                       $q.= "WHERE ID = " . $base_id;
-                                       $dbh->exec($q);
+                                       $comaintainers = 
array_diff($comaintainers, array($comaintainers[0]));
+                                       pkgbase_set_comaintainers($base_id, 
$comaintainers);
+                               } else {
+                                       $uid = "NULL";
                                }
+
+                               $q = "UPDATE PackageBases ";
+                               $q.= "SET MaintainerUID = " . $uid .  " ";
+                               $q.= "WHERE ID = " . $base_id;
+                               $dbh->exec($q);
                        }
                }
        }
-- 
2.4.1

Reply via email to