virtualGroups = new VirtualGroups(); } // region handlers /** @inheritdoc */ public function handle() { global $INPUT; global $auth; if ($INPUT->has('addusergroups')) { $this->addUserGroups($INPUT->str('user'), $INPUT->str('groups')); } elseif ($INPUT->has('addgroupusers')) { $this->addGroupUsers($INPUT->str('group'), $INPUT->str('users')); } elseif ($INPUT->has('deleteuser')) { $this->deleteUser($INPUT->str('user')); } elseif ($INPUT->has('deletegroup')) { $this->deleteGroup($INPUT->str('group')); } elseif ($INPUT->has('editusergroups')) { $this->editUserGroups($INPUT->str('user'), $INPUT->str('groups')); } elseif ($INPUT->has('editgroupusers')) { $this->editGroupUsers($INPUT->str('group'), $INPUT->str('users')); } // remove all input to avoid re-submitting on reload $INPUT->remove('user'); $INPUT->remove('users'); $INPUT->remove('group'); $INPUT->remove('groups'); // load user data if requested if ($INPUT->has('loaduser')) { $INPUT->set('user', $auth->cleanUser($INPUT->str('loaduser'))); $INPUT->set('groups', implode( ',', $this->virtualGroups->getUserGroups($auth->cleanUser($INPUT->str('loaduser'))) )); } // load group data if requested if ($INPUT->has('loadgroup')) { $INPUT->set('group', $auth->cleanGroup($INPUT->str('loadgroup'))); $INPUT->set('users', implode( ',', $this->virtualGroups->getGroupUsers($auth->cleanGroup($INPUT->str('loadgroup'))) )); } } /** * Add groups to a user * * @param string $user user name * @param string $groups comma separated list of groups * @return void */ protected function addUserGroups($user, $groups) { global $auth; if (!checkSecurityToken()) return; $user = $auth->cleanUser($user); $groups = array_unique(array_map( static fn($group) => $auth->cleanGroup($group), explode(',', $groups) )); if ($user && $groups) { $this->virtualGroups->addGroupsToUser($user, $groups); } } /** * Add users to a group * * @param string $group group name * @param string $users comma separated list of users * @return void */ protected function addGroupUsers($group, $users) { global $auth; if (!checkSecurityToken()) return; $group = $auth->cleanGroup($group); $users = array_unique(array_map( static fn($user) => $auth->cleanUser($user), explode(',', $users) )); if ($group && $users) { $this->virtualGroups->addUsersToGroup($group, $users); } } /** * Delete a user * * @param string $user user name * @return void */ protected function deleteUser($user) { global $auth; if (!checkSecurityToken()) return; $user = $auth->cleanUser($user); if ($user) { $this->virtualGroups->removeUser($user); } } /** * Delete a group * * @param string $group group name * @return void */ protected function deleteGroup($group) { global $auth; if (!checkSecurityToken()) return; $group = $auth->cleanGroup($group); if ($group) { $this->virtualGroups->removeGroup($group); } } /** * Set the groups of a user * * @param string $user user name * @param string $groups comma separated list of groups * @return void */ protected function editUserGroups($user, $groups) { global $auth; if (!checkSecurityToken()) return; $user = $auth->cleanUser($user); $groups = array_unique(array_map( static fn($group) => $auth->cleanGroup($group), explode(',', $groups) )); if ($user && $groups) { $this->virtualGroups->setUserGroups($user, $groups); } } /** * Set the users of a group * * @param string $group group name * @param string $users comma separated list of users * @return void */ protected function editGroupUsers($group, $users) { global $auth; if (!checkSecurityToken()) return; $group = $auth->cleanGroup($group); $users = array_unique(array_map( static fn($user) => $auth->cleanUser($user), explode(',', $users) )); if ($group && $users) { $this->virtualGroups->setGroupUsers($group, $users); } } // endregion // region HTML output /** @inheritdoc */ public function html() { global $INPUT; $tab = $INPUT->str('tab', 'byuser'); echo '
' . hsc($this->getLang('user')) . ' | '; echo '' . hsc($this->getLang('grps')) . ' | '; echo ''; echo ' |
---|---|---|
' . hsc($user) . ' | '; echo '' . hsc(implode(', ', $groups)) . ' | '; echo '';
echo $this->buttonDeleteUser($user);
echo '';
echo inlineSVG(__DIR__ . '/images/pencil.svg');
echo '' . $this->getLang('edit') . '';
echo '';
echo ' | ';
echo '
' . hsc($this->getLang('grp')) . ' | '; echo '' . hsc($this->getLang('users')) . ' | '; echo ''; echo ' |
---|---|---|
' . hsc($group) . ' | '; echo '' . hsc(implode(', ', $users)) . ' | '; echo '';
echo $this->buttonDeleteGroup($group);
echo '';
echo inlineSVG(__DIR__ . '/images/pencil.svg');
echo '' . $this->getLang('edit') . '';
echo '';
echo ' | ';
echo '