From 58cd3e90dd204833517bbc64f2636b230fe4a1ab Mon Sep 17 00:00:00 2001 From: Wruczek Date: Fri, 18 Oct 2019 19:58:05 +0200 Subject: [PATCH] Added required servergroups to use group assigner --- src/assigner.php | 9 +++++++-- src/installer/dbinstall_mysql.sql | 3 ++- src/private/php/Assigner.php | 30 ++++++++++++++++++++++++++++ src/private/templates/assigner.latte | 4 ++++ 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/src/assigner.php b/src/assigner.php index 08d1b29..84032df 100644 --- a/src/assigner.php +++ b/src/assigner.php @@ -6,10 +6,15 @@ use Wruczek\TSWebsite\Utils\TemplateUtils; require_once __DIR__ . "/private/php/load.php"; -$data = ["isLoggedIn" => Auth::isLoggedIn()]; +$data = [ + "isLoggedIn" => Auth::isLoggedIn() +]; if (Auth::isLoggedIn()) { - if (isset($_POST["assigner"])) { + $canUseAssigner = Assigner::canUseAssigner(); + $data["canUseAssigner"] = $canUseAssigner; + + if (isset($_POST["assigner"]) && $canUseAssigner) { $groups = array_keys($_POST["assigner"]); // get all group ids $groups = array_filter($groups, "is_int"); // only keep integers diff --git a/src/installer/dbinstall_mysql.sql b/src/installer/dbinstall_mysql.sql index e82faf7..615d09a 100644 --- a/src/installer/dbinstall_mysql.sql +++ b/src/installer/dbinstall_mysql.sql @@ -35,7 +35,8 @@ INSERT INTO `DBPREFIXconfig` (`identifier`, `type`, `value`, `user_editable`) VA ('cache_channelgroups', 'INT', '60', 1), ('adminstatus_offlinehiddenbydefault', 'BOOL', 'false', 1), ('imprint_enabled', 'BOOL', 'false', 1), -('imprint_url', 'STRING', 'imprint.php', 1); +('imprint_url', 'STRING', 'imprint.php', 1), +('assigner_required_sgids', 'JSON', '[]', 1); DROP TABLE IF EXISTS `DBPREFIXfaq`; CREATE TABLE `DBPREFIXfaq` ( diff --git a/src/private/php/Assigner.php b/src/private/php/Assigner.php index 13a9914..85236fc 100644 --- a/src/private/php/Assigner.php +++ b/src/private/php/Assigner.php @@ -133,4 +133,34 @@ class Assigner { return 0; } + public static function getRequiredSgids() { + return Config::get("assigner_required_sgids"); + } + + public static function canUseAssigner() { + // if there are no required sgids, the user can use assigner and + // we can skip the other, more expensive checks that will require + // fetching user groups from TS3 + if (empty(self::getRequiredSgids())) { + return true; + } + + $userGroups = Auth::getUserServerGroupIds(); + return self::canUseAssignerSgArray($userGroups); + } + + public static function canUseAssignerSgArray(array $serverGroups) { + // user needs to be in at least one of those groups to be able + // to use group assigner + $requiredSgid = self::getRequiredSgids(); + + foreach ($requiredSgid as $sgid) { + if (in_array($sgid, $serverGroups, false)) { + return true; + } + } + + return false; + } + } diff --git a/src/private/templates/assigner.latte b/src/private/templates/assigner.latte index 870cc99..aedddfd 100644 --- a/src/private/templates/assigner.latte +++ b/src/private/templates/assigner.latte @@ -23,6 +23,10 @@
{_"ASSIGNER_NOT_CONFIGURED"}
+ {elseif !$canUseAssigner} +
+ {_"ASSIGNER_NO_REQUIRED_GROUPS"} +
{else} {ifset $groupChangeStatus} {if $groupChangeStatus === 0} {* saved *}