diff --git a/migration/20.10/2010.sql b/migration/20.10/2010.sql index 82d0819100a10576237d58744d2fc698745d5b5a..5bf33828b4be1a39aabe551b03a00c09ac84cc59 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 6e78de30eea9777c619bbfa0bfda74ff4a7cfc09..14d9259b1f380742f68c596b48c91229d7e48fca 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 e03bcc9a5828bb867ff9f82f919d35381a5893b3..098b8946ab974373c265fdec50ccdd0926fd1101 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 c5304a32f72b60edb3126cbfbd93d432c15c4dd1..75b428ab6c91e29fa70f06177f2d1145cdeaaecf 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 2c785d3ef143b8106220bbd040c05b7236fbe4f2..f49209b189fe3b38cf6a86fc77c3e7fce0d6f6f8 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 6a3e73df43ec4097d80e000c66b01058a419ccc8..4e9a368b5f45b9cb5162ccbca32143a6e5ea7995 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 ba7fa2c1b22ca4812a14053555cce963f5daaebd..211b7d9173323228d4700505d42ca5cf90dfb2cc 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 e8ea8885c7f75867a755e3da541f76e361e4e4cd..0ee2a8697a443403f05eaaa406788cab44530ba3 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 f1011adde6df31de83f22f6df078ebe2b4695108..4febea0ff8533ec415a7afd10d203159840e8244 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