Trusted Users now have the ability to overwrite packages without
changing ownership. This allows for adding small fixes to PKGBUILDs
without disowning the package.

Implements FS#32807.

Signed-off-by: Lukas Fleischer <[email protected]>
---
 web/html/pkgsubmit.php       | 10 ++++++++--
 web/lib/aur.inc.php          |  5 +++++
 web/lib/pkgbasefuncs.inc.php |  7 ++++---
 3 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php
index f07580b..969eb35 100644
--- a/web/html/pkgsubmit.php
+++ b/web/html/pkgsubmit.php
@@ -346,9 +346,15 @@ if ($uid):
                                 * base, the database ID needs to be preserved
                                 * so that any votes are retained.
                                 */
-                               $was_orphan = (pkgbase_maintainer_uid($base_id) 
=== NULL);
+                               $maintainer_uid = 
pkgbase_maintainer_uid($base_id);
+                               $was_orphan = ($maintainer_uid === NULL);
 
-                               pkgbase_update($base_id, 
$pkgbase_info['pkgbase'], $uid);
+                               if ($was_orphan) {
+                                       /* Adopt orphan packages. */
+                                       $maintainer_uid = $uid;
+                               }
+
+                               pkgbase_update($base_id, 
$pkgbase_info['pkgbase'], $maintainer_uid, $uid);
 
                                if ($category_id > 1) {
                                        pkgbase_update_category($base_id, 
$category_id);
diff --git a/web/lib/aur.inc.php b/web/lib/aur.inc.php
index ff46455..9fc3378 100644
--- a/web/lib/aur.inc.php
+++ b/web/lib/aur.inc.php
@@ -293,6 +293,11 @@ function html_footer($ver="") {
  * @return int 0 if the user can't submit, 1 if the user can submit
  */
 function can_submit_pkgbase($name="", $sid="") {
+       $atype = account_from_sid($_COOKIE["AURSID"]);
+       if ($atype == "Trusted User" || $atype == "Developer") {
+               return 1;
+       }
+
        if (!$name || !$sid) {return 0;}
        $dbh = DB::connect();
        $q = "SELECT MaintainerUID ";
diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index 9f80ef2..9dbdff6 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -934,17 +934,18 @@ function pkgbase_create($name, $category_id, $uid) {
  *
  * @param string $name Name of the updated package base
  * @param int $base_id The package base ID of the affected package
- * @param int $uid User ID of the package uploader
+ * @param int $maintainer_uid User ID of the package mainainer
+ * @param int $packager_uid User ID of the package uploader
  *
  * @return void
  */
-function pkgbase_update($base_id, $name, $uid) {
+function pkgbase_update($base_id, $name, $maintainer_uid, $packager_uid) {
        $dbh = DB::connect();
        $q = sprintf("UPDATE PackageBases SET  " .
                "Name = %s, ModifiedTS = UNIX_TIMESTAMP(), " .
                "MaintainerUID = %d, PackagerUID = %d, OutOfDateTS = NULL " .
                "WHERE ID = %d",
-               $dbh->quote($name), $uid, $uid, $base_id);
+               $dbh->quote($name), $maintainer_uid, $packager_uid, $base_id);
        $dbh->exec($q);
 }
 
-- 
1.9.3

Reply via email to