From b8c49b992ee2e0bb41e8c21b6650350cd48a8f18 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Thu, 19 Sep 2019 09:28:45 +0100
Subject: [PATCH] FEAT #11279 TIME 2 actions list for indexing

---
 rest/index.php                                |  3 ++
 .../action/controllers/ActionController.php   |  4 +-
 src/app/group/models/GroupModelAbstract.php   | 15 +++++++
 .../controllers/IndexingController.php        | 43 +++++++++++++++++++
 4 files changed, 62 insertions(+), 3 deletions(-)
 create mode 100755 src/app/resource/controllers/IndexingController.php

diff --git a/rest/index.php b/rest/index.php
index 0cd7ef9fac0..c07d0dda54b 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -307,6 +307,9 @@ $app->get('/natures', \Resource\controllers\ResController::class . ':getNatures'
 $app->get('/resources/{resId}/isAllowed', \Resource\controllers\ResController::class . ':isAllowedForCurrentUser');
 $app->post('/resources/checkFileUpload', \Resource\controllers\StoreController::class . ':checkFileUpload');
 
+//Indexing
+$app->get('/indexing/{groupId}/actions', \Resource\controllers\IndexingController::class . ':getIndexingActions');
+
 //ResourcesList
 $app->get('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}', \Resource\controllers\ResourceListController::class . ':get');
 $app->get('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/actions', \Resource\controllers\ResourceListController::class . ':getActions');
diff --git a/src/app/action/controllers/ActionController.php b/src/app/action/controllers/ActionController.php
index 4f9d52e1526..0df80360e68 100755
--- a/src/app/action/controllers/ActionController.php
+++ b/src/app/action/controllers/ActionController.php
@@ -258,9 +258,7 @@ class ActionController
         $obj['action']['id_status']        = '_NOSTATUS_';
         $obj['categoriesList']             = ResModel::getCategories();
 
-        foreach ($obj['categoriesList'] as $key => $value) {
-            $obj['action']['actionCategories'][] = $value['id'];
-        }
+        $obj['action']['actionCategories'] = array_column($obj['categoriesList'], 'id');
 
         $obj['statuses'] = StatusModel::get();
         array_unshift($obj['statuses'], ['id'=>'_NOSTATUS_','label_status'=> _UNCHANGED]);
diff --git a/src/app/group/models/GroupModelAbstract.php b/src/app/group/models/GroupModelAbstract.php
index 532f811e5e3..baa7d04b69a 100755
--- a/src/app/group/models/GroupModelAbstract.php
+++ b/src/app/group/models/GroupModelAbstract.php
@@ -216,6 +216,21 @@ abstract class GroupModelAbstract
         return $allGroups;
     }
 
+    public static function getGroupByLogin(array $aArgs = [])
+    {
+        ValidatorModel::notEmpty($aArgs, ['login', 'groupId']);
+        ValidatorModel::stringType($aArgs, ['login', 'groupId']);
+
+        $aGroups = DatabaseModel::select([
+            'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
+            'table'     => ['usergroup_content, usergroups'],
+            'where'     => ['usergroup_content.group_id = usergroups.group_id', 'usergroup_content.user_id = ?', 'usergroups.id = ?'],
+            'data'      => [$aArgs['login'], $aArgs['groupId']]
+        ]);
+
+        return $aGroups;
+    }
+
     public static function getSecurityByGroupId(array $aArgs = [])
     {
         ValidatorModel::notEmpty($aArgs, ['groupId']);
diff --git a/src/app/resource/controllers/IndexingController.php b/src/app/resource/controllers/IndexingController.php
new file mode 100755
index 00000000000..76b902624f0
--- /dev/null
+++ b/src/app/resource/controllers/IndexingController.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+* Copyright Maarch since 2008 under licence GPLv3.
+* See LICENCE.txt file at the root folder for more details.
+* This file is part of Maarch software.
+*
+*/
+
+/**
+* @brief Indexing Controller
+* @author dev@maarch.org
+*/
+
+namespace Resource\controllers;
+
+use Action\models\ActionModel;
+use Group\models\GroupModel;
+use Slim\Http\Request;
+use Slim\Http\Response;
+
+class IndexingController
+{
+    public function getIndexingActions(Request $request, Response $response, array $aArgs)
+    {
+        $group = GroupModel::getGroupByLogin(['login' => $GLOBALS['userId'], 'groupId' => $aArgs['groupId'], 'select' => ['can_index', 'indexation_parameters']]);
+        if (empty($group)) {
+            return $response->withStatus(403)->withJson(['errors' => 'This user is not in this group']);
+        }
+        if (!$group[0]['can_index']) {
+            return $response->withStatus(403)->withJson(['errors' => 'This group can not index document']);
+        }
+
+        $group[0]['indexation_parameters'] = json_decode($group[0]['indexation_parameters'], true);
+
+        $actions = [];
+        foreach ($group[0]['indexation_parameters']['actions'] as $value) {
+            $actions[] = ActionModel::getById(['id' => $value, 'select' => ['id', 'label_action', 'component']]);
+        }
+
+        return $response->withJson(['actions' => $actions]);
+    }
+}
-- 
GitLab