From e455088a04bed29afcd66afdb9aa1dfb420a4ae6 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Thu, 29 Oct 2020 15:01:31 +0100
Subject: [PATCH] FEAT #14324 TIME 0:40 save featureTour in database

---
 migration/20.10/2010.sql                      |  2 ++
 rest/index.php                                |  1 +
 sql/structure.sql                             |  5 ++--
 .../controllers/ExportSEDATrait.php           | 18 +++--------
 .../controllers/RegisteredMailController.php  |  4 ++-
 src/app/user/controllers/UserController.php   | 30 ++++++++++++++++++-
 src/core/lang/lang-en.php                     |  1 +
 src/core/lang/lang-fr.php                     |  1 +
 src/core/lang/lang-nl.php                     |  1 +
 9 files changed, 45 insertions(+), 18 deletions(-)

diff --git a/migration/20.10/2010.sql b/migration/20.10/2010.sql
index 82d0819100a..5bf33828b4b 100755
--- a/migration/20.10/2010.sql
+++ b/migration/20.10/2010.sql
@@ -36,6 +36,8 @@ ALTER TABLE users ADD COLUMN mode users_modes NOT NULL DEFAULT 'standard';
 UPDATE users set mode = 'root_invisible' WHERE user_id = 'superadmin';
 ALTER TABLE users DROP COLUMN IF EXISTS authorized_api;
 ALTER TABLE users ADD COLUMN authorized_api jsonb NOT NULL DEFAULT '[]';
+ALTER TABLE users DROP COLUMN IF EXISTS feature_tour;
+ALTER TABLE users ADD COLUMN feature_tour jsonb NOT NULL DEFAULT '[]';
 
 DO $$ BEGIN
     IF (SELECT count(column_name) from information_schema.columns where table_name = 'users' and column_name = 'loginmode') THEN
diff --git a/rest/index.php b/rest/index.php
index 6e78de30eea..14d9259b1f3 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -567,6 +567,7 @@ $app->put('/versionsUpdateSQL', \VersionUpdate\controllers\VersionUpdateControll
 $app->get('/currentUser/profile', \User\controllers\UserController::class . ':getProfile');
 $app->put('/currentUser/profile', \User\controllers\UserController::class . ':updateProfile');
 $app->put('/currentUser/profile/preferences', \User\controllers\UserController::class . ':updateCurrentUserPreferences');
+$app->put('/currentUser/profile/featureTour', \User\controllers\UserController::class . ':updateCurrentUserFeatureTour');
 $app->post('/currentUser/emailSignature', \User\controllers\UserController::class . ':createCurrentUserEmailSignature');
 $app->put('/currentUser/emailSignature/{id}', \User\controllers\UserController::class . ':updateCurrentUserEmailSignature');
 $app->delete('/currentUser/emailSignature/{id}', \User\controllers\UserController::class . ':deleteCurrentUserEmailSignature');
diff --git a/sql/structure.sql b/sql/structure.sql
index e03bcc9a582..098b8946ab9 100755
--- a/sql/structure.sql
+++ b/sql/structure.sql
@@ -229,8 +229,9 @@ CREATE TABLE users
   reset_token text,
   failed_authentication INTEGER DEFAULT 0,
   locked_until TIMESTAMP without time zone,
-    authorized_api jsonb NOT NULL DEFAULT '[]',
-    external_id jsonb DEFAULT '{}',
+  authorized_api jsonb NOT NULL DEFAULT '[]',
+  external_id jsonb DEFAULT '{}',
+  feature_tour jsonb NOT NULL DEFAULT '[]';
   CONSTRAINT users_pkey PRIMARY KEY (user_id),
   CONSTRAINT users_id_key UNIQUE (id)
 )
diff --git a/src/app/external/exportSeda/controllers/ExportSEDATrait.php b/src/app/external/exportSeda/controllers/ExportSEDATrait.php
index c5304a32f72..75b428ab6c9 100644
--- a/src/app/external/exportSeda/controllers/ExportSEDATrait.php
+++ b/src/app/external/exportSeda/controllers/ExportSEDATrait.php
@@ -67,20 +67,10 @@ trait ExportSEDATrait
             return ['errors' => ['No senderOrgRegNumber found in config.json']];
         }
 
-        if (empty($args['data']['packageName'])) {
-            return ['errors' => ['packageName is empty']];
-        }
-        if (empty($args['data']['archivalAgreement'])) {
-            return ['errors' => ['archivalAgreement is empty']];
-        }
-        if (empty($args['data']['slipId'])) {
-            return ['errors' => ['slipId is empty']];
-        }
-        if (empty($args['data']['entityArchiveRecipient'])) {
-            return ['errors' => ['entityArchiveRecipient is empty']];
-        }
-        if (empty($args['data']['archiveDescriptionLevel'])) {
-            return ['errors' => ['archiveDescriptionLevel is empty']];
+        foreach (['packageName', 'archivalAgreement', 'slipId', 'entityArchiveRecipient', 'archiveDescriptionLevel'] as $value) {
+            if (empty($args['data'][$value])) {
+                return ['errors' => [$value . ' is empty']];
+            }
         }
 
         foreach ($args['data']['archives'] as $archiveUnit) {
diff --git a/src/app/registeredMail/controllers/RegisteredMailController.php b/src/app/registeredMail/controllers/RegisteredMailController.php
index 2c785d3ef14..f49209b189f 100644
--- a/src/app/registeredMail/controllers/RegisteredMailController.php
+++ b/src/app/registeredMail/controllers/RegisteredMailController.php
@@ -1084,8 +1084,10 @@ class RegisteredMailController
             $registeredMail[0]['number']      = $registeredMail[0]['alt_identifier'];
             $registeredMail[0]['issuingSite'] = $registeredMail[0]['issuing_site'];
             unset($registeredMail[0]['issuing_site']);
+
+            return $registeredMail[0];
         }
 
-        return $registeredMail[0];
+        return [];
     }
 }
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index 6a3e73df43e..4e9a368b5f4 100755
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -527,9 +527,10 @@ class UserController
 
     public function getProfile(Request $request, Response $response)
     {
-        $user = UserModel::getById(['id' => $GLOBALS['id'], 'select' => ['id', 'user_id', 'firstname', 'lastname', 'phone', 'mail', 'initials', 'preferences', 'external_id', 'status', 'mode']]);
+        $user = UserModel::getById(['id' => $GLOBALS['id'], 'select' => ['id', 'user_id', 'firstname', 'lastname', 'phone', 'mail', 'initials', 'preferences', 'external_id', 'status', 'mode', 'feature_tour']]);
         $user['external_id']        = json_decode($user['external_id'], true);
         $user['preferences']        = json_decode($user['preferences'], true);
+        $user['featureTour']        = json_decode($user['feature_tour'], true);
         $user['signatures']         = UserSignatureModel::getByUserSerialId(['userSerialid' => $user['id']]);
         $user['emailSignatures']    = UserEmailSignatureModel::getByUserId(['userId' => $GLOBALS['id']]);
         $user['groups']             = UserModel::getGroupsByLogin(['login' => $user['user_id']]);
@@ -604,6 +605,33 @@ class UserController
         return $response->withStatus(204);
     }
 
+    public function updateCurrentUserFeatureTour(Request $request, Response $response)
+    {
+        $body = $request->getParsedBody();
+
+        if (!Validator::notEmpty()->validate($body['featureTour'])) {
+            return $response->withStatus(400)->withJson(['errors' => 'Body featureTour is empty']);
+        }
+
+        UserModel::update([
+            'set'   => [
+                'feature_tour' => json_encode($body['featureTour'])
+            ],
+            'where' => ['id = ?'],
+            'data'  => [$GLOBALS['id']]
+        ]);
+
+        HistoryController::add([
+            'tableName'    => 'users',
+            'recordId'     => $GLOBALS['id'],
+            'eventType'    => 'UP',
+            'eventId'      => 'userModification',
+            'info'         => _USER_FEATURE_TOUR_UPDATED . " {$user['firstname']} {$user['lastname']}"
+        ]);
+
+        return $response->withStatus(204);
+    }
+
     public function updateCurrentUserPreferences(Request $request, Response $response)
     {
         $body = $request->getParsedBody();
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index ba7fa2c1b22..211b7d91733 100755
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -417,6 +417,7 @@ define("_CANNOT_SYNCHRONIZE_M2M_ANNUARY", "Contact cannot be added in M2M annuar
 define("_DATE_LOCALE", "en_US.utf8");
 
 define("_USER_PREFERENCE_UPDATED", "User preferences updated");
+define("_USER_FEATURE_TOUR_UPDATED", "One or some steps done in the feature tour");
 
 define("_NO_SENDERS", "No sender linked to resource");
 
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index e8ea8885c7f..0ee2a8697a4 100755
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -417,6 +417,7 @@ define("_CANNOT_SYNCHRONIZE_M2M_ANNUARY", "Le contact ne peut pas être ajouté
 define("_DATE_LOCALE", "fr_FR.utf8");
 
 define("_USER_PREFERENCE_UPDATED", "Préférences utilisateur modifiées");
+define("_USER_FEATURE_TOUR_UPDATED", "Une ou plusieurs étapes du tutorial a été fait");
 
 define("_NO_SENDERS", "Aucun expéditeur lié au courrier");
 
diff --git a/src/core/lang/lang-nl.php b/src/core/lang/lang-nl.php
index f1011adde6d..4febea0ff85 100755
--- a/src/core/lang/lang-nl.php
+++ b/src/core/lang/lang-nl.php
@@ -418,6 +418,7 @@ define("_CANNOT_SYNCHRONIZE_M2M_ANNUARY", "Contact can not be added in M2M annua
 define("_DATE_LOCALE", "en_US.utf8");
 
 define("_USER_PREFERENCE_UPDATED", "User preferences updated"); //TO TRANSLATE
+define("_USER_FEATURE_TOUR_UPDATED", "One or some steps done in the feature tour"); //TO TRANSLATE
 
 define("_NO_SENDERS", "No sender linked to resource"); //TO TRANSLATE
 
-- 
GitLab