mirror of
https://gitlab.archlinux.org/archlinux/aurweb.git
synced 2025-02-03 10:43:03 +01:00
Add support for package base co-maintainers
This allows for having multiple co-maintainers for AUR packages. Co-maintainers have push access to the package base Git repository but are not allowed to change the package base category, disown the package or modify the list of co-maintainers. The primary maintainer of an AUR package can edit the list of co-maintainers from the Package Actions box. Implements FS#17911. Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
This commit is contained in:
parent
b32458cb8a
commit
fc23a9bd50
12 changed files with 156 additions and 9 deletions
|
@ -928,3 +928,67 @@ function pkgbase_update_category($base_id, $category_id) {
|
|||
$category_id, $base_id);
|
||||
$dbh->exec($q);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of package base co-maintainers
|
||||
*
|
||||
* @param int $base_id The package base ID to retrieve the co-maintainers for
|
||||
*
|
||||
* @return array An array of co-maintainer user names
|
||||
*/
|
||||
function pkgbase_get_comaintainers($base_id) {
|
||||
$dbh = DB::connect();
|
||||
$q = "SELECT UserName FROM PackageComaintainers ";
|
||||
$q .= "INNER JOIN Users ON Users.ID = PackageComaintainers.UsersID ";
|
||||
$q .= "WHERE PackageComaintainers.PackageBaseID = " . intval($base_id);
|
||||
$result = $dbh->query($q);
|
||||
|
||||
if ($result) {
|
||||
return $result->fetchAll(PDO::FETCH_COLUMN, 0);
|
||||
} else {
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the list of co-maintainers of a package base
|
||||
*
|
||||
* @param int $base_id The package base ID to update the co-maintainers of
|
||||
* @param array $users Array of co-maintainer user names
|
||||
*
|
||||
* @return array Tuple of success/failure indicator and error message
|
||||
*/
|
||||
function pkgbase_set_comaintainers($base_id, $users) {
|
||||
if (!has_credential(CRED_PKGBASE_EDIT_COMAINTAINERS, array(pkgbase_maintainer_uid($base_id)))) {
|
||||
return array(false, __("You are not allowed to manage co-maintainers of this package base."));
|
||||
}
|
||||
|
||||
/* Remove empty and duplicate user names. */
|
||||
$users = array_unique(array_filter(array_map('trim', $users)));
|
||||
|
||||
$dbh = DB::connect();
|
||||
|
||||
$uids = array();
|
||||
foreach($users as $user) {
|
||||
$q = "SELECT ID FROM Users ";
|
||||
$q .= "WHERE UserName = " . $dbh->quote($user);
|
||||
$result = $dbh->query($q);
|
||||
$uid = $result->fetchColumn(0);
|
||||
|
||||
if (!$uid) {
|
||||
return array(false, __("Invalid user name: %s", $user));
|
||||
}
|
||||
|
||||
$uids[] = $uid;
|
||||
}
|
||||
|
||||
$q = sprintf("DELETE FROM PackageComaintainers WHERE PackageBaseID = %d", $base_id);
|
||||
$dbh->exec($q);
|
||||
|
||||
foreach ($uids as $uid) {
|
||||
$q = sprintf("INSERT INTO PackageComaintainers (PackageBaseID, UsersID) VALUES (%d, %d)", $base_id, $uid);
|
||||
$dbh->exec($q);
|
||||
}
|
||||
|
||||
return array(true, __("The package base co-maintainers have been updated."));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue