aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJan-Hendrik Willms <tleilax+studip@gmail.com>2023-05-02 11:25:49 +0000
committerJan-Hendrik Willms <tleilax+studip@gmail.com>2023-05-02 11:25:49 +0000
commit6e15a2bc5a99f579cd12f7069051c2ad87a5e402 (patch)
tree0285e660ad72f002f9e85aeb5beac1db63edb2fb /lib
parent99e6757bf03e25dab1576847c6cfe020234c26e0 (diff)
add user lookup filter for roles and use that for auto inserting, fixes #2029
Closes #2029 Merge request studip/studip!1323
Diffstat (limited to 'lib')
-rw-r--r--lib/classes/AutoInsert.class.php9
-rw-r--r--lib/classes/UserLookup.class.php47
-rw-r--r--lib/plugins/db/RolePersistence.class.php1
3 files changed, 51 insertions, 6 deletions
diff --git a/lib/classes/AutoInsert.class.php b/lib/classes/AutoInsert.class.php
index 6eb0097..417e6ff 100644
--- a/lib/classes/AutoInsert.class.php
+++ b/lib/classes/AutoInsert.class.php
@@ -89,7 +89,7 @@ class AutoInsert
/**
* Trägt den Benutzer in den Eingestellten veranstaltungen automatisch ein.
* @param string $user_id
- * @param bool $status Wenn Status nicht angegeben wird, wird der Status des Users aus user_id genommen
+ * @param string|bool $status Wenn Status nicht angegeben wird, wird der Status des Users aus user_id genommen
* @return array 'added' Namen der Seminare in die der User eingetragen wurde
* array 'removed' Namen der Seminare aus denen der User ausgetragen wurde
*/
@@ -112,7 +112,6 @@ class AutoInsert
$key = $domain . '.' . $status;
if (is_array($this->settings[$key])) {
- $id = key($this->settings[$key]);
foreach ($this->settings[$key] as $id => $value) {
$settings[$id] = $value;
}
@@ -241,13 +240,15 @@ class AutoInsert
* Removes a seminar from the autoinsertion process.
* @param string $seminar_id Id of the seminar
*/
- public static function deleteSeminar($seminar_id)
+ public static function deleteSeminar($seminar_id): bool
{
$query = "DELETE FROM auto_insert_sem WHERE seminar_id = ?";
$statement = DBManager::get()->prepare($query);
- $statement->execute([$seminar_id]);
+ $result = $statement->execute([$seminar_id]);
unset(self::getSeminarCache()[$seminar_id]);
+
+ return $result > 0;
}
/**
diff --git a/lib/classes/UserLookup.class.php b/lib/classes/UserLookup.class.php
index 61732ae..ddf9276 100644
--- a/lib/classes/UserLookup.class.php
+++ b/lib/classes/UserLookup.class.php
@@ -67,8 +67,12 @@ class UserLookup
'values' => 'UserLookup::statusValues',
],
'domain' => [
- 'filter' =>'UserLookup::domainFilter',
- 'values' =>'UserLookup::domainValues'
+ 'filter' => 'UserLookup::domainFilter',
+ 'values' => 'UserLookup::domainValues',
+ ],
+ 'role' => [
+ 'filter' => 'UserLookup::roleFilter',
+ 'values' => 'UserLookup::roleValues',
],
];
@@ -457,4 +461,43 @@ class UserLookup
return $domains;
}
+
+ /**
+ * Return all users with a matching assigned role given in $needles
+ *
+ * @param array $needles List of domain ids to filter against
+ * @return array List of user ids matching the given filter
+ */
+ protected static function roleFilter($needles): array
+ {
+ if (!$needles) {
+ return [];
+ }
+
+ $user_ids = [];
+ foreach ($needles as $role_id) {
+ $users = RolePersistence::getUsersWithRoleById($role_id, false);
+ foreach ($users as $user) {
+ $user_ids[$user->id] = $user->id;
+ }
+ }
+
+ return array_values($user_ids);
+ }
+
+ /**
+ * Return all valid roles
+ *
+ * @return array Associative array of domain id and name
+ */
+ protected static function roleValues(): array
+ {
+ $roles = [];
+ $roles['keine'] = _('Ohne Rollenzuweisung');
+ foreach (RolePersistence::getAllRoles() as $role) {
+ $roles[$role->getRoleid()] = $role->getRolename();
+ }
+
+ return $roles;
+ }
}
diff --git a/lib/plugins/db/RolePersistence.class.php b/lib/plugins/db/RolePersistence.class.php
index 85f47a2..d2b0347 100644
--- a/lib/plugins/db/RolePersistence.class.php
+++ b/lib/plugins/db/RolePersistence.class.php
@@ -22,6 +22,7 @@ class RolePersistence
/**
* Returns all available roles.
*
+ * @param bool $grouped Return the roles grouped by system type or other
* @return Role[]|array{system: Role[], other: Role[]}
*/
public static function getAllRoles(bool $grouped = false): array