From 5981003bb1eada8f58a6951c1617c12bde4db18a Mon Sep 17 00:00:00 2001
From: Guillaume Heurtier <guillaume.heurtier@maarch.org>
Date: Wed, 20 Nov 2019 14:22:48 +0100
Subject: [PATCH] FIX #12161 TIME 0:30 added route to get privilege parameters

---
 rest/index.php                                |  1 +
 .../group/controllers/PrivilegeController.php | 26 +++++++++++++++++--
 .../group/models/PrivilegeModelAbstract.php   |  2 +-
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/rest/index.php b/rest/index.php
index 3ca2a66eca0..e5004cb230e 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -220,6 +220,7 @@ $app->put('/groups/{id}/reassign/{newGroupId}', \Group\controllers\GroupControll
 $app->post('/groups/{id}/privileges/{privilegeId}', \Group\controllers\PrivilegeController::class . ':addPrivilege');
 $app->delete('/groups/{id}/privileges/{privilegeId}', \Group\controllers\PrivilegeController::class . ':removePrivilege');
 $app->put('/groups/{id}/privileges/{privilegeId}/parameters', \Group\controllers\PrivilegeController::class . ':updateParameters');
+$app->get('/groups/{id}/privileges/{privilegeId}/parameters', \Group\controllers\PrivilegeController::class . ':getParameters');
 
 //Histories
 $app->get('/histories', \History\controllers\HistoryController::class . ':get');
diff --git a/src/app/group/controllers/PrivilegeController.php b/src/app/group/controllers/PrivilegeController.php
index ad202855125..db0a93abd9b 100644
--- a/src/app/group/controllers/PrivilegeController.php
+++ b/src/app/group/controllers/PrivilegeController.php
@@ -110,6 +110,28 @@ class PrivilegeController
         return $response->withStatus(204);
     }
 
+    public static function getParameters(Request $request, Response $response, array $args)
+    {
+        $group = GroupModel::getById(['id' => $args['id']]);
+        if (empty($group)) {
+            return $response->withStatus(400)->withJson(['errors' => 'Group not found']);
+        }
+
+        $queryParams = $request->getQueryParams();
+
+        $parameters = PrivilegeModel::getParametersFromGroupPrivilege(['groupId' => $group['group_id'], 'privilegeId' => $args['privilegeId']]);
+
+        if (!empty($queryParams['parameter'])) {
+            if (!isset($parameters[$queryParams['parameter']])) {
+                return $response->withStatus(400)->withJson(['errors' => 'Parameter not found']);
+            }
+
+            $parameters = $parameters[$queryParams['parameter']];
+        }
+
+        return $response->withJson($parameters);
+    }
+
     public static function hasPrivilege(array $args)
     {
         ValidatorModel::notEmpty($args, ['privilegeId', 'userId']);
@@ -169,8 +191,8 @@ class PrivilegeController
         $assignable = [];
         foreach ($userGroups as $userGroup) {
             $groups = PrivilegeModel::getParametersFromGroupPrivilege(['groupId' => $userGroup, 'privilegeId' => 'admin_users']);
-            if (isset($groups) && isset($groups->groups)) {
-                $groups = $groups->groups;
+            if (isset($groups) && isset($groups['groups'])) {
+                $groups = $groups['groups'];
                 $assignable = array_merge($assignable, $groups);
             }
         }
diff --git a/src/app/group/models/PrivilegeModelAbstract.php b/src/app/group/models/PrivilegeModelAbstract.php
index 8278fe99080..88eb486943e 100644
--- a/src/app/group/models/PrivilegeModelAbstract.php
+++ b/src/app/group/models/PrivilegeModelAbstract.php
@@ -126,7 +126,7 @@ abstract class PrivilegeModelAbstract
             return null;
         }
 
-        $extra = json_decode($extra[0]);
+        $extra = json_decode($extra[0], true);
 
         return $extra;
     }
-- 
GitLab