From 1dcf792a710a9112325dfc13afff0ec12d670901 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Fri, 15 Mar 2019 14:03:05 +0100
Subject: [PATCH] FEAT #9685 Redirect without mode

---
 rest/index.php                                |   3 +-
 sql/data_en.sql                               |   5 +-
 sql/data_fr.sql                               |   5 +-
 .../PreProcessActionController.php            | 137 +++++++++---------
 4 files changed, 69 insertions(+), 81 deletions(-)

diff --git a/rest/index.php b/rest/index.php
index 2400a0ea101..214ea7a0d96 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -216,7 +216,6 @@ $app->get('/listTemplates/types/{typeId}/roles', \Entity\controllers\ListTemplat
 $app->put('/listTemplates/types/{typeId}/roles', \Entity\controllers\ListTemplateController::class . ':updateTypeRoles');
 
 //Notes
-$app->get('/res/{resId}/notes/templates', \Note\controllers\NoteController::class . ':getTemplatesByResId');
 $app->get('/notes/templates', \Note\controllers\NoteController::class . ':getTemplates');
 $app->get('/res/{resId}/notes', \Note\controllers\NoteController::class . ':getByResId');
 $app->post('/res/{resId}/notes', \Note\controllers\NoteController::class . ':create');
@@ -278,7 +277,7 @@ $app->get('/resourcesList/exportTemplate', \Resource\controllers\ExportControlle
 $app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/acknowledgementReceipt', \AcknowledgementReceipt\controllers\AcknowledgementReceiptController::class . ':createPaperAcknowledgement');
 //PreProcess
 $app->post('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/checkAcknowledgementReceipt', \Action\controllers\PreProcessActionController::class . ':checkAcknowledgementReceipt');
-$app->get('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/actions/{actionId}/getRedirect/{mode}', \Action\controllers\PreProcessActionController::class . ':getRedirectInformations');
+$app->get('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}/actions/{actionId}/getRedirect', \Action\controllers\PreProcessActionController::class . ':getRedirectInformations');
 
 //SignatureBook
 $app->get('/signatureBook/users/{userId}/groups/{groupId}/baskets/{basketId}/resources', \SignatureBook\controllers\SignatureBookController::class . ':getResources');
diff --git a/sql/data_en.sql b/sql/data_en.sql
index 26b63013f59..635f99e83ea 100644
--- a/sql/data_en.sql
+++ b/sql/data_en.sql
@@ -566,7 +566,6 @@ TRUNCATE TABLE listmodels;
 DELETE FROM entities WHERE entity_id = 'ACME';
 INSERT INTO entities (entity_id, entity_label, short_label, enabled, adrs_1, adrs_2, adrs_3, zipcode, city, country, email, business_id, parent_entity_id, entity_type) VALUES ('ACME', 'ACME – A Company that Makes Everything', 'ACME – A Company that Makes Everything', 'Y', '', '', '', '', '', '', 'info@maarch.org', '', '', 'Direction');
 DELETE FROM listmodels WHERE object_id = 'ACME' AND object_type = 'entity_id';
-INSERT INTO listmodels (object_id, object_type, "sequence", item_id, item_type, item_mode, title, description, process_comment, visible) VALUES ('ACME', 'entity_id', 0, '', 'user_id', 'dest', 'ACME – A Company that Makes Everything','ACME – A Company that Makes Everything', '', 'Y');
 DELETE FROM entities WHERE entity_id = 'CAB';
 INSERT INTO entities (entity_id, entity_label, short_label, enabled, adrs_1, adrs_2, adrs_3, zipcode, city, country, email, business_id, parent_entity_id, entity_type) VALUES ('CAB', 'Presidency', 'Presidency', 'Y', '', '', '', '', '', '', 'info@maarch.org', '', 'ACME', 'Direction');
 DELETE FROM listmodels WHERE object_id = 'CAB' AND object_type = 'entity_id';
@@ -660,11 +659,9 @@ INSERT INTO listmodels (object_id, object_type, "sequence", item_id, item_type,
 DELETE FROM entities WHERE entity_id = 'ELUS';
 INSERT INTO entities (entity_id, entity_label, short_label, enabled, adrs_1, adrs_2, adrs_3, zipcode, city, country, email, business_id, parent_entity_id, entity_type) VALUES ('ELUS', 'Board', 'Board', 'Y', '', '', '', '', '', '', 'info@maarch.org', '', 'ACME', 'Direction');
 DELETE FROM listmodels WHERE object_id = 'ELUS' AND object_type = 'entity_id';
-INSERT INTO listmodels (object_id, object_type, "sequence", item_id, item_type, item_mode, title, description, process_comment, visible) VALUES ('ELUS', 'entity_id', 0, '', 'user_id', 'dest', 'Board','Board', '', 'Y');
 DELETE FROM entities WHERE entity_id = 'ACME_FC';
 INSERT INTO entities (entity_id, entity_label, short_label, enabled, adrs_1, adrs_2, adrs_3, zipcode, city, country, email, business_id, parent_entity_id, entity_type) VALUES ('ACME_FC', 'ACME Football Club', 'ACME Football Club', 'Y', '', '', '', '', '', '', 'info@maarch.org', '', '', 'Direction');
 DELETE FROM listmodels WHERE object_id = 'ACME_FC' AND object_type = 'entity_id';
-INSERT INTO listmodels (object_id, object_type, "sequence", item_id, item_type, item_mode, title, description, process_comment, visible) VALUES ('ACME_FC', 'entity_id', 0, '', 'user_id', 'dest', 'ACME Football Club','ACME Football Club', '', 'Y');
 
 -- Create BASKETS
 TRUNCATE TABLE baskets;
@@ -1028,7 +1025,7 @@ INSERT INTO parameters (id, param_value_string, param_value_int, param_value_dat
 INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('folder_id_increment', '', 200, NULL);
 INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('work_batch_autoimport_id', NULL, 1, NULL);
 INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('postindexing_workbatch', NULL, 1, NULL);
-INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('database_version', '18.10.1', NULL, NULL);
+INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('database_version', '19.04.1', NULL, NULL);
 INSERT INTO parameters (id, param_value_string, param_value_int, param_value_date) VALUES ('user_quota', '', 0, NULL);
 INSERT INTO parameters (id, description, param_value_string, param_value_int, param_value_date) VALUES ('defaultDepartment', 'Département par défaut sélectionné dans le formulaire des adresses', NULL, 75, NULL);
 INSERT INTO parameters (id, description, param_value_string) VALUES ('homepage_message', 'Texte apparaissant dans la bannière sur la page d''accueil, mettre un espace pour supprimer la bannière.', 'Bienvenue dans votre <b>G</b>estion <b>E</b>lectronique du <b>C</b>ourrier.');
diff --git a/sql/data_fr.sql b/sql/data_fr.sql
index c26fc047c3f..7eb561dd0e0 100755
--- a/sql/data_fr.sql
+++ b/sql/data_fr.sql
@@ -698,7 +698,6 @@ TRUNCATE TABLE listmodels;
 DELETE FROM entities WHERE entity_id = 'VILLE';
 INSERT INTO entities (entity_id, entity_label, short_label, enabled, adrs_1, adrs_2, adrs_3, zipcode, city, country, email, business_id, parent_entity_id, entity_type) VALUES ('VILLE', 'Ville de Maarch-les-bains', 'Ville de Maarch-les-bains', 'Y', '', '', '', '', '', '', 'info@maarch.org', '', '', 'Direction');
 DELETE FROM listmodels WHERE object_id = 'VILLE' AND object_type = 'entity_id';
-INSERT INTO listmodels (object_id, object_type, "sequence", item_id, item_type, item_mode, title, description, process_comment, visible) VALUES ('VILLE', 'entity_id', 0, '', 'user_id', 'dest', 'Ville de Maarch-les-bains','Ville de Maarch-les-bains', '', 'Y');
 DELETE FROM entities WHERE entity_id = 'CAB';
 INSERT INTO entities (entity_id, entity_label, short_label, enabled, adrs_1, adrs_2, adrs_3, zipcode, city, country, email, business_id, parent_entity_id, entity_type) VALUES ('CAB', 'Cabinet du Maire', 'Cabinet du Maire', 'Y', '', '', '', '', '', '', 'info@maarch.org', '', 'VILLE', 'Direction');
 DELETE FROM listmodels WHERE object_id = 'CAB' AND object_type = 'entity_id';
@@ -792,11 +791,9 @@ INSERT INTO listmodels (object_id, object_type, "sequence", item_id, item_type,
 DELETE FROM entities WHERE entity_id = 'ELUS';
 INSERT INTO entities (entity_id, entity_label, short_label, enabled, adrs_1, adrs_2, adrs_3, zipcode, city, country, email, business_id, parent_entity_id, entity_type) VALUES ('ELUS', 'Ensemble des élus', 'ELUS:Ensemble des élus', 'Y', '', '', '', '', '', '', 'info@maarch.org', '', 'VILLE', 'Direction');
 DELETE FROM listmodels WHERE object_id = 'ELUS' AND object_type = 'entity_id';
-INSERT INTO listmodels (object_id, object_type, "sequence", item_id, item_type, item_mode, title, description, process_comment, visible) VALUES ('ELUS', 'entity_id', 0, '', 'user_id', 'dest', 'ELUS:Ensemble des élus','ELUS:Ensemble des élus', '', 'Y');
 DELETE FROM entities WHERE entity_id = 'CCAS';
 INSERT INTO entities (entity_id, entity_label, short_label, enabled, adrs_1, adrs_2, adrs_3, zipcode, city, country, email, business_id, parent_entity_id, entity_type) VALUES ('CCAS', 'Centre Communal d''Action Sociale', 'Centre Communal d''Action Sociale', 'Y', '', '', '', '', '', '', 'info@maarch.org', '', '', 'Direction');
 DELETE FROM listmodels WHERE object_id = 'CCAS' AND object_type = 'entity_id';
-INSERT INTO listmodels (object_id, object_type, "sequence", item_id, item_type, item_mode, title, description, process_comment, visible) VALUES ('CCAS', 'entity_id', 0, '', 'user_id', 'dest', 'Centre Communal d''Action Sociale','Centre Communal d''Action Sociale', '', 'Y');
 
 -- Create BASKETS
 TRUNCATE TABLE baskets;
@@ -1166,7 +1163,7 @@ INSERT INTO parameters (id, param_value_string, param_value_int, param_value_dat
 INSERT INTO parameters (id, description, param_value_string, param_value_int, param_value_date) VALUES ('defaultDepartment', 'Département par défaut sélectionné dans le formulaire des adresses', NULL, 75, NULL);
 INSERT INTO parameters (id, description, param_value_string) VALUES ('homepage_message', 'Texte apparaissant dans la bannière sur la page d''accueil, mettre un espace pour supprimer la bannière.', 'Bienvenue dans votre <b>G</b>estion <b>E</b>lectronique du <b>C</b>ourrier.');
 INSERT INTO parameters (id, description, param_value_string) VALUES ('thumbnailsSize', 'Taille des imagettes', '750x900');
-INSERT INTO parameters (id, description, param_value_int) VALUES ('keepDestForRedirection', 'Si activé (1), mets le destinataire en copie de la liste de diffusion lors d''une action de redirection', 0);
+INSERT INTO parameters (id, description, param_value_int) VALUES ('keepDestForRedirection', 'Si activé (1), met le destinataire en copie de la liste de diffusion lors d''une action de redirection', 0);
 ------------
 --DIFFLIST_TYPES
 ------------
diff --git a/src/app/action/controllers/PreProcessActionController.php b/src/app/action/controllers/PreProcessActionController.php
index aa79ab03d03..40653b68250 100644
--- a/src/app/action/controllers/PreProcessActionController.php
+++ b/src/app/action/controllers/PreProcessActionController.php
@@ -59,94 +59,89 @@ class PreProcessActionController
             'SAME_LEVEL_ENTITIES'   => '@sisters_entities[@my_primary_entity]'
         ];
 
-        if ($args['mode'] == 'users') {
-            $mode = 'USERS';
-        } else {
-            $mode = 'ENTITY';
-        }
+        $users = [];
+        $allEntities = [];
+
+        foreach (['ENTITY', 'USERS'] as $mode) {
+
+            $entityRedirects = GroupBasketRedirectModel::get([
+                'select'    => ['entity_id', 'keyword'],
+                'where'     => ['basket_id = ?', 'group_id = ?', 'action_id = ?', 'redirect_mode = ?'],
+                'data'      => [$basket['basket_id'], $group['group_id'], $args['actionId'], $mode]
+            ]);
 
-        $entityRedirects = GroupBasketRedirectModel::get([
-            'select'    => ['entity_id', 'keyword'],
-            'where'     => ['basket_id = ?', 'group_id = ?', 'action_id = ?', 'redirect_mode = ?'],
-            'data'      => [$basket['basket_id'], $group['group_id'], $args['actionId'], $mode]
-        ]);
-
-        $allowedEntities = [];
-        $clauseToProcess = '';
-        foreach ($entityRedirects as $entityRedirect) {
-            if (!empty($entityRedirect['entity_id'])) {
-                $allowedEntities[] = $entityRedirect['entity_id'];
-            } elseif (!empty($entityRedirect['keyword'])) {
-                if (!empty($keywords[$entityRedirect['keyword']])) {
-                    if (!empty($clauseToProcess)) {
-                        $clauseToProcess .= ', ';
+            $allowedEntities = [];
+            $clauseToProcess = '';
+            foreach ($entityRedirects as $entityRedirect) {
+                if (!empty($entityRedirect['entity_id'])) {
+                    $allowedEntities[] = $entityRedirect['entity_id'];
+                } elseif (!empty($entityRedirect['keyword'])) {
+                    if (!empty($keywords[$entityRedirect['keyword']])) {
+                        if (!empty($clauseToProcess)) {
+                            $clauseToProcess .= ', ';
+                        }
+                        $clauseToProcess .= $keywords[$entityRedirect['keyword']];
                     }
-                    $clauseToProcess .= $keywords[$entityRedirect['keyword']];
                 }
             }
-        }
 
-        if (!empty($clauseToProcess)) {
-            $preparedClause = PreparedClauseController::getPreparedClause(['clause' => $clauseToProcess, 'login' => $user['user_id']]);
-            $preparedEntities = EntityModel::get(['select' => ['entity_id'], 'where' => ['enabled = ?', "entity_id in {$preparedClause}"], 'data' => ['Y']]);
-            foreach ($preparedEntities as $preparedEntity) {
-                $allowedEntities[] = $preparedEntity['entity_id'];
+            if (!empty($clauseToProcess)) {
+                $preparedClause = PreparedClauseController::getPreparedClause(['clause' => $clauseToProcess, 'login' => $user['user_id']]);
+                $preparedEntities = EntityModel::get(['select' => ['entity_id'], 'where' => ['enabled = ?', "entity_id in {$preparedClause}"], 'data' => ['Y']]);
+                foreach ($preparedEntities as $preparedEntity) {
+                    $allowedEntities[] = $preparedEntity['entity_id'];
+                }
             }
-        }
 
-        $allowedEntities = array_unique($allowedEntities);
-
-        $redirectInformations = [];
-        if ($args['mode'] == 'users') {
-            $users = [];
-            if (!empty($allowedEntities)) {
-                $users = UserEntityModel::getWithUsers([
-                    'select'    => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname'],
-                    'where'     => ['users_entities.entity_id in (?)', 'status not in (?)'],
-                    'data'      => [$allowedEntities, ['DEL', 'ABS']],
-                    'orderBy'   => ['lastname', 'firstname']
-                ]);
+            $allowedEntities = array_unique($allowedEntities);
 
-                foreach ($users as $key => $user) {
-                    $users[$key]['labelToDisplay'] = "{$user['firstname']} {$user['lastname']}";
-                }
-            }
-            $redirectInformations['users'] = $users;
-        } else {
-            $primaryEntity = UserModel::getPrimaryEntityByUserId(['userId' => $GLOBALS['userId']]);
-
-            $allEntities = EntityModel::get(['select' => ['id', 'entity_id', 'entity_label', 'parent_entity_id'], 'where' => ['enabled = ?'], 'data' => ['Y'], 'orderBy' => ['parent_entity_id']]);
-            foreach ($allEntities as $key => $value) {
-                $allEntities[$key]['id'] = $value['entity_id'];
-                $allEntities[$key]['serialId'] = $value['id'];
-                if (empty($value['parent_entity_id'])) {
-                    $allEntities[$key]['parent'] = '#';
-                    $allEntities[$key]['icon'] = "fa fa-building";
-                } else {
-                    $allEntities[$key]['parent'] = $value['parent_entity_id'];
-                    $allEntities[$key]['icon'] = "fa fa-sitemap";
+            if ($mode == 'USERS') {
+                if (!empty($allowedEntities)) {
+                    $users = UserEntityModel::getWithUsers([
+                        'select'    => ['DISTINCT users.id', 'users.user_id', 'firstname', 'lastname'],
+                        'where'     => ['users_entities.entity_id in (?)', 'status not in (?)'],
+                        'data'      => [$allowedEntities, ['DEL', 'ABS']],
+                        'orderBy'   => ['lastname', 'firstname']
+                    ]);
+
+                    foreach ($users as $key => $user) {
+                        $users[$key]['labelToDisplay'] = "{$user['firstname']} {$user['lastname']}";
+                        $users[$key]['descriptionToDisplay'] = UserModel::getPrimaryEntityByUserId(['userId' => $user['user_id']])['entity_label'];
+                    }
                 }
-                if (in_array($value['entity_id'], $allowedEntities)) {
-                    $allEntities[$key]['allowed'] = true;
-                    $allEntities[$key]['state']['opened'] = true;
-                    if ($primaryEntity['entity_id'] == $value['entity_id']) {
-                        $allEntities[$key]['state']['selected'] = true;
+            } elseif ($mode == 'ENTITY') {
+                $primaryEntity = UserModel::getPrimaryEntityByUserId(['userId' => $GLOBALS['userId']]);
+
+                $allEntities = EntityModel::get(['select' => ['id', 'entity_id', 'entity_label', 'parent_entity_id'], 'where' => ['enabled = ?'], 'data' => ['Y'], 'orderBy' => ['parent_entity_id']]);
+                foreach ($allEntities as $key => $value) {
+                    $allEntities[$key]['id'] = $value['entity_id'];
+                    $allEntities[$key]['serialId'] = $value['id'];
+                    if (empty($value['parent_entity_id'])) {
+                        $allEntities[$key]['parent'] = '#';
+                        $allEntities[$key]['icon'] = "fa fa-building";
+                    } else {
+                        $allEntities[$key]['parent'] = $value['parent_entity_id'];
+                        $allEntities[$key]['icon'] = "fa fa-sitemap";
                     }
-                } else {
-                    $allEntities[$key]['allowed'] = false;
-                    $allEntities[$key]['state']['disabled'] = true;
                     $allEntities[$key]['state']['opened'] = false;
+                    if (in_array($value['entity_id'], $allowedEntities)) {
+                        $allEntities[$key]['allowed'] = true;
+                        if ($primaryEntity['entity_id'] == $value['entity_id']) {
+                            $allEntities[$key]['state']['opened'] = true;
+                            $allEntities[$key]['state']['selected'] = true;
+                        }
+                    } else {
+                        $allEntities[$key]['allowed'] = false;
+                        $allEntities[$key]['state']['disabled'] = true;
+                    }
+                    $allEntities[$key]['text'] = $value['entity_label'];
                 }
-                $allEntities[$key]['text'] = $value['entity_label'];
             }
-            $redirectInformations['entities'] = $allEntities;
         }
 
         $parameter = ParameterModel::getById(['select' => ['param_value_int'], 'id' => 'keepDestForRedirection']);
 
-        $redirectInformations['keepDestForRedirection'] = !empty($parameter['param_value_int']);
-
-        return $response->withJson($redirectInformations);
+        return $response->withJson(['entities' => $allEntities, 'users' => $users, 'keepDestForRedirection' => !empty($parameter['param_value_int'])]);
     }
 
     public function checkAcknowledgementReceipt(Request $request, Response $response, array $aArgs)
-- 
GitLab