From 70586d89e80df2e0e99fbecab3acc3d717074c50 Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Fri, 4 May 2018 10:29:29 +0200
Subject: [PATCH] FEAT #7710 Lang + refactoring

---
 modules/reports/xml/reports.xml               |   4 +-
 src/app/action/models/ActionModelAbstract.php |  20 +-
 .../models/AttachmentModelAbstract.php        |   2 +-
 src/app/basket/models/BasketModelAbstract.php |   6 +-
 .../models/GroupBasketModelAbstract.php       |   4 +-
 .../contact/controllers/ContactController.php |   4 +-
 .../contact/models/ContactModelAbstract.php   |  49 ++--
 src/app/entity/models/EntityModelAbstract.php |  10 +-
 .../models/ListInstanceModelAbstract.php      |   2 +-
 .../models/ListTemplateModelAbstract.php      |   2 +-
 .../folder/models/FolderTypeModelAbstract.php |   8 +-
 src/app/group/models/GroupModelAbstract.php   |   3 +-
 src/app/group/models/ServiceModelAbstract.php |   2 +-
 .../history/models/HistoryModelAbstract.php   |   2 +-
 src/app/link/controllers/LinkController.php   |   6 +-
 src/app/link/models/LinkModelAbstract.php     |   2 +-
 src/app/note/models/NoteModelAbstract.php     |   2 +-
 .../controllers/NotificationController.php    |  15 +-
 .../NotificationScheduleController.php        |  15 +-
 .../NotificationsEventsController.php         |   7 +-
 .../models/NotificationModelAbstract.php      |  13 +-
 .../NotificationScheduleModelAbstract.php     |  11 +-
 .../NotificationsEventsModelAbstract.php      |   7 +-
 .../models/ParameterModelAbstract.php         |   2 +-
 .../controllers/PriorityController.php        |  12 +
 .../priority/models/PriorityModelAbstract.php |   3 +-
 .../report/controllers/ReportController.php   |   1 -
 src/app/report/models/ReportModelAbstract.php |   2 +-
 .../resource/controllers/ResController.php    |   2 +-
 src/app/resource/models/ChronoModel.php       |   1 -
 src/app/resource/models/ResModelAbstract.php  |   2 +-
 .../controllers/SignatureBookController.php   |   5 +-
 .../status/controllers/StatusController.php   |  34 +--
 .../models/StatusImagesModelAbstract.php      |   5 +-
 src/app/status/models/StatusModelAbstract.php |   3 +-
 .../template/models/TemplateModelAbstract.php |   2 +-
 src/app/user/controllers/UserController.php   |  24 +-
 .../UserBasketPreferenceModelAbstract.php     |   2 +-
 .../user/models/UserEntityModelAbstract.php   |   2 +-
 src/app/user/models/UserModelAbstract.php     |  86 ++-----
 .../models/UserSignatureModelAbstract.php     |  53 +++-
 src/core/controllers/CoreController.php       |   1 -
 src/core/lang/lang-en.php                     | 229 ++++++++---------
 src/core/lang/lang-fr.php                     | 230 +++++++++---------
 src/core/models/ValidatorModel.php            |   1 -
 45 files changed, 442 insertions(+), 456 deletions(-)

diff --git a/modules/reports/xml/reports.xml b/modules/reports/xml/reports.xml
index 3bcd1092b8d..dd4704062ac 100755
--- a/modules/reports/xml/reports.xml
+++ b/modules/reports/xml/reports.xml
@@ -3,7 +3,7 @@
 	<REPORT>
 		<ID>folder_view_stat</ID>
 		<LABEL>_FOLDER_VIEW_STAT</LABEL>
-		<DESCRIPTION>_FOLDER_VIEW_STAT_DESC</DESCRIPTION>
+		<DESCRIPTION>_FOLDER_VIEW_STAT</DESCRIPTION>
 		<URL>folder_view_stats</URL>
 		<IN_MENU_REPORTS>true</IN_MENU_REPORTS><!--  the report can be accessed by the menu report -->
 		<ENABLED>true</ENABLED>
@@ -58,7 +58,7 @@
 	<REPORT>
 		<ID>users_logs</ID>
 		<LABEL>_USERS_LOGS</LABEL>
-		<DESCRIPTION>_USERS_LOGS_DESC</DESCRIPTION>
+		<DESCRIPTION>_USERS_LOGS</DESCRIPTION>
 		<URL>users_logs</URL>
 		<IN_MENU_REPORTS>true</IN_MENU_REPORTS>
 		<ENABLED>false</ENABLED>
diff --git a/src/app/action/models/ActionModelAbstract.php b/src/app/action/models/ActionModelAbstract.php
index 5d605ebb9d4..692993c7290 100644
--- a/src/app/action/models/ActionModelAbstract.php
+++ b/src/app/action/models/ActionModelAbstract.php
@@ -1,13 +1,15 @@
 <?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.
+ * 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   ActionModelAbstract
-* @author  dev <dev@maarch.org>
-* @ingroup core
+/**
+* @brief   Action Model Abstract
+* @author  dev@maarch.org
 */
 
 namespace Action\models;
@@ -16,7 +18,7 @@ use SrcCore\models\ValidatorModel;
 use SrcCore\models\CoreConfigModel;
 use SrcCore\models\DatabaseModel;
 
-class ActionModelAbstract
+abstract class ActionModelAbstract
 {
     public static function get(array $aArgs = [])
     {
@@ -161,12 +163,12 @@ class ActionModelAbstract
                 if (!empty((string) $actionPage->MODULE)) {
                     $origin = (string) $actionPage->MODULE;
                 } else {
-                    $origin =  'apps';
+                    $origin = 'apps';
                 }
                 if (!empty((string) $actionPage->DESC)) {
                     $desc = constant((string) $actionPage->DESC);
                 } else {
-                    $desc =  'no description';
+                    $desc = 'no description';
                 }
                 $tabActions_pages['actionsPageList'][] = array(
                     'id'     => (string) $actionPage->ID,
diff --git a/src/app/attachment/models/AttachmentModelAbstract.php b/src/app/attachment/models/AttachmentModelAbstract.php
index c988968c01e..69066fc3a97 100644
--- a/src/app/attachment/models/AttachmentModelAbstract.php
+++ b/src/app/attachment/models/AttachmentModelAbstract.php
@@ -18,7 +18,7 @@ use SrcCore\models\CoreConfigModel;
 use SrcCore\models\DatabaseModel;
 use SrcCore\models\ValidatorModel;
 
-class AttachmentModelAbstract
+abstract class AttachmentModelAbstract
 {
     public static function getOnView(array $aArgs)
     {
diff --git a/src/app/basket/models/BasketModelAbstract.php b/src/app/basket/models/BasketModelAbstract.php
index 0f0186a1332..2b7117ccb9f 100644
--- a/src/app/basket/models/BasketModelAbstract.php
+++ b/src/app/basket/models/BasketModelAbstract.php
@@ -8,8 +8,8 @@
 */
 
 /**
-* @brief   BasketModelAbstract
-* @author  <dev@maarch.org>
+* @brief   Basket Model Abstract
+* @author  dev@maarch.org
 */
 
 namespace Basket\models;
@@ -22,7 +22,7 @@ use SrcCore\models\DatabaseModel;
 use User\models\UserBasketPreferenceModel;
 use User\models\UserModel;
 
-class BasketModelAbstract
+abstract class BasketModelAbstract
 {
     public static function get(array $aArgs = [])
     {
diff --git a/src/app/basket/models/GroupBasketModelAbstract.php b/src/app/basket/models/GroupBasketModelAbstract.php
index df4c25d2210..4eaa3cd9575 100644
--- a/src/app/basket/models/GroupBasketModelAbstract.php
+++ b/src/app/basket/models/GroupBasketModelAbstract.php
@@ -9,7 +9,7 @@
 
 /**
 * @brief   GroupBasket Model Abstract
-* @author  <dev@maarch.org>
+* @author  dev@maarch.org
 */
 
 namespace Basket\models;
@@ -17,7 +17,7 @@ namespace Basket\models;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
 
-class GroupBasketModelAbstract
+abstract class GroupBasketModelAbstract
 {
     public static function get(array $aArgs)
     {
diff --git a/src/app/contact/controllers/ContactController.php b/src/app/contact/controllers/ContactController.php
index 83d3649533d..4fc4d1bdc0d 100644
--- a/src/app/contact/controllers/ContactController.php
+++ b/src/app/contact/controllers/ContactController.php
@@ -169,8 +169,8 @@ class ContactController
             foreach ($result as $title) {
                 foreach ($title as $value) {
                     $aCivility[(string) $value->id] = [
-                        'label' => (string) $value->label,
-                        'abbreviation' => (string) $value->abbreviation,
+                        'label'         => (string) $value->label,
+                        'abbreviation'  => (string) $value->abbreviation,
                     ];
                 }
             }
diff --git a/src/app/contact/models/ContactModelAbstract.php b/src/app/contact/models/ContactModelAbstract.php
index 780f1bd56b5..b6fd0bf19ef 100644
--- a/src/app/contact/models/ContactModelAbstract.php
+++ b/src/app/contact/models/ContactModelAbstract.php
@@ -18,7 +18,7 @@ use Resource\models\ResModel;
 use SrcCore\models\DatabaseModel;
 use SrcCore\models\ValidatorModel;
 
-class ContactModelAbstract
+abstract class ContactModelAbstract
 {
     public static function getById(array $aArgs)
     {
@@ -121,7 +121,7 @@ class ContactModelAbstract
         return $nextSequenceId;
     }
 
-    public static function getFullAddressById(array $aArgs = [])
+    public static function getFullAddressById(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['addressId']);
         ValidatorModel::intVal($aArgs, ['addressId']);
@@ -136,7 +136,7 @@ class ContactModelAbstract
         return $aReturn;
     }
 
-    public static function getContactFullLabel(array $aArgs = [])
+    public static function getContactFullLabel(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['addressId']);
         ValidatorModel::intVal($aArgs, ['addressId']);
@@ -173,7 +173,7 @@ class ContactModelAbstract
         return $contactName;
     }
 
-    public static function getContactCommunication(array $aArgs = [])
+    public static function getContactCommunication(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['contactId']);
         ValidatorModel::intVal($aArgs, ['contactId']);
@@ -193,7 +193,7 @@ class ContactModelAbstract
         }
     }
 
-    public static function getContactIdByCommunicationValue(array $aArgs = [])
+    public static function getContactIdByCommunicationValue(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['communicationValue']);
 
@@ -205,15 +205,16 @@ class ContactModelAbstract
         ]);
 
         if (empty($aReturn)) {
-            return "";
+            return '';
         } else {
             return $aReturn[0];
         }
     }
 
-    public static function getAddressByExternalContactId(array $aArgs = [])
+    public static function getAddressByExternalContactId(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['externalContactId']);
+
         $aReturn = DatabaseModel::select([
             'select'    => ['*'],
             'table'     => ['view_contacts'],
@@ -222,18 +223,18 @@ class ContactModelAbstract
         ]);
 
         if (empty($aReturn)) {
-            return "";
+            return '';
         } else {
             return $aReturn[0];
         }
     }
 
-    public static function createContactCommunication(array $aArgs = [])
+    public static function createContactCommunication(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['contactId', 'type', 'value']);
         ValidatorModel::intVal($aArgs, ['contactId']);
 
-        $aReturn = DatabaseModel::insert([
+        DatabaseModel::insert([
             'table' => 'contact_communication',
             'columnsValues' => [
                 'contact_id' => $aArgs['contactId'],
@@ -242,7 +243,7 @@ class ContactModelAbstract
             ]
         ]);
 
-        return $aReturn;
+        return true;
     }
 
     public static function getLabelledContactWithAddress(array $aArgs)
@@ -331,7 +332,7 @@ class ContactModelAbstract
         return $aContact[0];
     }
 
-    public static function getCommunicationByContactId(array $aArgs = [])
+    public static function getCommunicationByContactId(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['contactId']);
         ValidatorModel::stringType($aArgs, ['contactId']);
@@ -346,7 +347,7 @@ class ContactModelAbstract
         return $aReturn[0];
     }
 
-    public static function CreateContactM2M(array $aArgs = [])
+    public static function CreateContactM2M(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['data', 'contactCommunication']);
 
@@ -397,7 +398,7 @@ class ContactModelAbstract
 
         // Si le contact n'existe pas, on le créé
         if (!$contact_exists) {
-            $contactInfo = self::getContactIdByCommunicationValue(['communicationValue' => $aArgs['contactCommunication']]);
+            $contactInfo = ContactModel::getContactIdByCommunicationValue(['communicationValue' => $aArgs['contactCommunication']]);
             if (!empty($contactInfo)) {
                 $currentContactId = $contactInfo['contact_id'];
             } else {
@@ -413,13 +414,13 @@ class ContactModelAbstract
                         'columnsValues' => $formatedDataContact
                     ]);
                 } catch (\Exception $e) {
-                    $returnResArray = array(
+                    $returnResArray = [
                         'returnCode'  => (int) -1,
                         'contactId'   => 'ERROR',
                         'addressId'   => 'ERROR',
                         'contactInfo' => '',
                         'error'       => 'contact creation error : '. $e->getMessage(),
-                    );
+                    ];
                     
                     return $returnResArray;
                 }
@@ -436,33 +437,33 @@ class ContactModelAbstract
                         'columnsValues' => $formatedDataAddress
                     ]);
             } catch (\Exception $e) {
-                $returnResArray = array(
+                $returnResArray = [
                     'returnCode'  => (int) -1,
                     'contactId'   => $currentContactId,
                     'addressId'   => 'ERROR',
                     'contactInfo' => '',
                     'error'       => 'address creation error : '. $e->getMessage(),
-                );
+                ];
                 
                 return $returnResArray;
             }
-            $returnResArray = array(
+            $returnResArray = [
                 'returnCode'  => (int) 0,
                 'contactId'   => $currentContactId,
                 'addressId'   => $currentAddressId,
                 'contactInfo' => 'contact created and attached to doc ... ',
-                'error'       => '',
-            );
+                'error'       => ''
+            ];
             
             return $returnResArray;
         } else {
-            $returnResArray = array(
+            $returnResArray = [
                 'returnCode'  => (int) 0,
                 'contactId'   => $currentContactId,
                 'addressId'   => $currentAddressId,
                 'contactInfo' => 'contact already exist, attached to doc ... ',
-                'error'       => '',
-            );
+                'error'       => ''
+            ];
             
             return $returnResArray;
         }
diff --git a/src/app/entity/models/EntityModelAbstract.php b/src/app/entity/models/EntityModelAbstract.php
index d4ade9e3d9f..7d780870ea6 100644
--- a/src/app/entity/models/EntityModelAbstract.php
+++ b/src/app/entity/models/EntityModelAbstract.php
@@ -19,7 +19,7 @@ use SrcCore\models\CoreConfigModel;
 use SrcCore\models\DatabaseModel;
 use User\models\UserModel;
 
-class EntityModelAbstract
+abstract class EntityModelAbstract
 {
     public static function get(array $aArgs = [])
     {
@@ -190,13 +190,13 @@ class EntityModelAbstract
         ValidatorModel::notEmpty($aArgs, ['entityId']);
         ValidatorModel::stringType($aArgs, ['entityId']);
 
-        $aReturn = self::getById([
+        $aReturn = EntityModel::getById([
             'select'   => ['entity_id', 'entity_label', 'parent_entity_id'],
             'entityId' => $aArgs['entityId']
         ]);
 
         if (!empty($aReturn['parent_entity_id'])) {
-            $aReturn = self::getEntityRootById(['entityId' => $aReturn['parent_entity_id']]);
+            $aReturn = EntityModel::getEntityRootById(['entityId' => $aReturn['parent_entity_id']]);
         }
 
         return $aReturn;
@@ -364,8 +364,8 @@ class EntityModelAbstract
         if ($loadedXml) {
             foreach ($loadedXml->ROLES->ROLE as $value) {
                 $roles[] = [
-                    'id'        => (string)$value->id,
-                    'label'     => defined((string)$value->label) ? constant((string)$value->label) : (string)$value->label,
+                    'id'    => (string)$value->id,
+                    'label' => defined((string)$value->label) ? constant((string)$value->label) : (string)$value->label
                 ];
             }
         }
diff --git a/src/app/entity/models/ListInstanceModelAbstract.php b/src/app/entity/models/ListInstanceModelAbstract.php
index 3437a2f46f2..db008ba97a0 100644
--- a/src/app/entity/models/ListInstanceModelAbstract.php
+++ b/src/app/entity/models/ListInstanceModelAbstract.php
@@ -17,7 +17,7 @@ namespace Entity\models;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
 
-class ListInstanceModelAbstract
+abstract class ListInstanceModelAbstract
 {
     public static function get(array $aArgs)
     {
diff --git a/src/app/entity/models/ListTemplateModelAbstract.php b/src/app/entity/models/ListTemplateModelAbstract.php
index 8595af155a7..8e7a5dba1ca 100644
--- a/src/app/entity/models/ListTemplateModelAbstract.php
+++ b/src/app/entity/models/ListTemplateModelAbstract.php
@@ -17,7 +17,7 @@ namespace Entity\models;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
 
-class ListTemplateModelAbstract
+abstract class ListTemplateModelAbstract
 {
     public static function get(array $aArgs = [])
     {
diff --git a/src/app/folder/models/FolderTypeModelAbstract.php b/src/app/folder/models/FolderTypeModelAbstract.php
index 08cf1f81daa..b76308bf045 100644
--- a/src/app/folder/models/FolderTypeModelAbstract.php
+++ b/src/app/folder/models/FolderTypeModelAbstract.php
@@ -12,12 +12,11 @@
 namespace Folder\models;
 
 use SrcCore\models\ValidatorModel;
-use SrcCore\models\CoreConfigModel;
 use SrcCore\models\DatabaseModel;
 
 class FolderTypeModelAbstract
 {
-    public static function get(array $aArgs = [])
+    public static function get(array $aArgs)
     {
         ValidatorModel::arrayType($aArgs, ['select']);
 
@@ -29,7 +28,7 @@ class FolderTypeModelAbstract
         return $folderType;
     }
 
-    public static function getFolderTypeDocTypeFirstLevel(array $aArgs = [])
+    public static function getFolderTypeDocTypeFirstLevel(array $aArgs)
     {
         ValidatorModel::arrayType($aArgs, ['select']);
 
@@ -43,7 +42,7 @@ class FolderTypeModelAbstract
         return $folderType;
     }
 
-    public static function createFolderTypeDocTypeFirstLevel(array $aArgs = [])
+    public static function createFolderTypeDocTypeFirstLevel(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['foldertype_id', 'doctypes_first_level_id']);
         ValidatorModel::intVal($aArgs, ['foldertype_id', 'doctypes_first_level_id']);
@@ -69,5 +68,4 @@ class FolderTypeModelAbstract
 
         return true;
     }
-
 }
diff --git a/src/app/group/models/GroupModelAbstract.php b/src/app/group/models/GroupModelAbstract.php
index f16efba9343..07367a650fe 100644
--- a/src/app/group/models/GroupModelAbstract.php
+++ b/src/app/group/models/GroupModelAbstract.php
@@ -14,13 +14,12 @@
 
 namespace Group\models;
 
-use Group\models\ServiceModel;
 use Group\controllers\GroupController;
 use SrcCore\models\DatabaseModel;
 use SrcCore\models\ValidatorModel;
 use User\models\UserModel;
 
-class GroupModelAbstract
+abstract class GroupModelAbstract
 {
     public static function get(array $aArgs = [])
     {
diff --git a/src/app/group/models/ServiceModelAbstract.php b/src/app/group/models/ServiceModelAbstract.php
index f34ff949f51..e08b1703af0 100644
--- a/src/app/group/models/ServiceModelAbstract.php
+++ b/src/app/group/models/ServiceModelAbstract.php
@@ -17,7 +17,7 @@ use SrcCore\models\CoreConfigModel;
 use SrcCore\models\DatabaseModel;
 use SrcCore\models\ValidatorModel;
 
-class ServiceModelAbstract
+abstract class ServiceModelAbstract
 {
     public static function getServicesByXML()
     {
diff --git a/src/app/history/models/HistoryModelAbstract.php b/src/app/history/models/HistoryModelAbstract.php
index 0b5af34043c..5a34b44c042 100644
--- a/src/app/history/models/HistoryModelAbstract.php
+++ b/src/app/history/models/HistoryModelAbstract.php
@@ -17,7 +17,7 @@ namespace History\models;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
 
-class HistoryModelAbstract
+abstract class HistoryModelAbstract
 {
     public static function get(array $aArgs)
     {
diff --git a/src/app/link/controllers/LinkController.php b/src/app/link/controllers/LinkController.php
index 87529d86785..84951b64b03 100644
--- a/src/app/link/controllers/LinkController.php
+++ b/src/app/link/controllers/LinkController.php
@@ -16,13 +16,13 @@
 namespace Link\controllers;
 
 use Link\models\LinkModel;
-use Psr\Http\Message\RequestInterface;
-use Psr\Http\Message\ResponseInterface;
 use Respect\Validation\Validator;
+use Slim\Http\Request;
+use Slim\Http\Response;
 
 class LinkController
 {
-    public function getByResId(RequestInterface $request, ResponseInterface $response, $aArgs)
+    public function getByResId(Request $request, Response $response, $aArgs)
     {
         $check = Validator::intVal()->validate($aArgs['resId']);
         if (!$check) {
diff --git a/src/app/link/models/LinkModelAbstract.php b/src/app/link/models/LinkModelAbstract.php
index a198e331e6c..51c57738433 100644
--- a/src/app/link/models/LinkModelAbstract.php
+++ b/src/app/link/models/LinkModelAbstract.php
@@ -17,7 +17,7 @@ namespace Link\models;
 use SrcCore\models\DatabaseModel;
 use SrcCore\models\ValidatorModel;
 
-class LinkModelAbstract
+abstract class LinkModelAbstract
 {
     public static function getByResId(array $aArgs)
     {
diff --git a/src/app/note/models/NoteModelAbstract.php b/src/app/note/models/NoteModelAbstract.php
index 90b854f0964..77026ac534e 100644
--- a/src/app/note/models/NoteModelAbstract.php
+++ b/src/app/note/models/NoteModelAbstract.php
@@ -17,7 +17,7 @@ namespace Note\models;
 use SrcCore\models\DatabaseModel;
 use SrcCore\models\ValidatorModel;
 
-class NoteModelAbstract
+abstract class NoteModelAbstract
 {
     public static function countByResId(array $aArgs)
     {
diff --git a/src/app/notification/controllers/NotificationController.php b/src/app/notification/controllers/NotificationController.php
index 756b526a790..87ac12f80d1 100644
--- a/src/app/notification/controllers/NotificationController.php
+++ b/src/app/notification/controllers/NotificationController.php
@@ -113,7 +113,7 @@ class NotificationController
         $notificationInDb = NotificationModel::getByNotificationId(['notificationId' => $data['notification_id'], 'select' => ['notification_sid']]);
 
         if (Validator::notEmpty()->validate($notificationInDb)) {
-            return $response->withStatus(400)->withJson(['errors' => _NOTIF_ALREADY_EXIST]);
+            return $response->withStatus(400)->withJson(['errors' => _NOTIFICATION_ALREADY_EXIST]);
         }
 
         $data['notification_mode'] = 'EMAIL';
@@ -150,7 +150,7 @@ class NotificationController
         }
     }
 
-    public function update(Request $request, Response $response, $aArgs)
+    public function update(Request $request, Response $response, array $aArgs)
     {
         if (!ServiceModel::hasService(['id' => 'admin_notif', 'userId' => $GLOBALS['userId'], 'location' => 'notifications', 'type' => 'admin'])) {
             return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
@@ -163,8 +163,7 @@ class NotificationController
         $errors = $this->control($data, 'update');
 
         if (!empty($errors)) {
-            return $response
-                ->withStatus(500)->withJson(['errors' => $errors]);
+            return $response->withStatus(500)->withJson(['errors' => $errors]);
         }
 
         $data['diffusion_properties'] = implode(',', $data['diffusion_properties']);
@@ -189,16 +188,14 @@ class NotificationController
         return $response->withJson(['notification' => $notification]);
     }
 
-    public function delete(Request $request, Response $response, $aArgs)
+    public function delete(Request $request, Response $response, array $aArgs)
     {
         if (!ServiceModel::hasService(['id' => 'admin_notif', 'userId' => $GLOBALS['userId'], 'location' => 'notifications', 'type' => 'admin'])) {
             return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
         }
 
         if (!Validator::intVal()->validate($aArgs['id'])) {
-            return $response
-                ->withStatus(500)
-                ->withJson(['errors' => 'Id is not a numeric']);
+            return $response->withStatus(500)->withJson(['errors' => 'Id is not a numeric']);
         }
 
         $notification = NotificationModel::getById(['notification_sid' => $aArgs['id']]);
@@ -255,7 +252,7 @@ class NotificationController
         ]);
     }
 
-    protected function control($aArgs, $mode)
+    protected function control(array $aArgs, string $mode)
     {
         $errors = [];
 
diff --git a/src/app/notification/controllers/NotificationScheduleController.php b/src/app/notification/controllers/NotificationScheduleController.php
index 48fe00bdce4..69189e0d396 100644
--- a/src/app/notification/controllers/NotificationScheduleController.php
+++ b/src/app/notification/controllers/NotificationScheduleController.php
@@ -10,7 +10,6 @@
  * @brief Notifications Schedule Controller
  *
  * @author dev@maarch.org
- * @ingroup notifications
  */
 
 namespace Notification\controllers;
@@ -33,7 +32,7 @@ class NotificationScheduleController
 
         return $response->withJson([
             'crontab'                => NotificationScheduleModel::getCrontab(),
-            'authorizedNotification' => self::getAuthorizedNotifications(),
+            'authorizedNotification' => NotificationScheduleController::getAuthorizedNotifications(),
         ]);
     }
 
@@ -45,7 +44,7 @@ class NotificationScheduleController
         }
 
         $data = $request->getParams();
-        if (!self::checkCrontab($data)) {
+        if (!NotificationScheduleController::checkCrontab($data)) {
             return $response->withStatus(500)->withJson(['errors' => 'Problem with crontab']);
         }
 
@@ -71,7 +70,7 @@ class NotificationScheduleController
     protected static function getAuthorizedNotifications()
     {
         $aNotification = NotificationModel::getEnableNotifications(['select' => ['notification_id', 'notification_sid', 'description']]);
-        $notificationsArray = array();
+        $notificationsArray = [];
         $customId = CoreConfigModel::getCustomId();
         $corePath = str_replace('custom/'.$customId.'/src/app/notification/controllers', '', __DIR__);
         $corePath = str_replace('src/app/notification/controllers', '', $corePath);
@@ -92,7 +91,7 @@ class NotificationScheduleController
             $path = $pathToFolow.'modules/notifications/batch/scripts/'.$filename;
 
             if (file_exists($path)) {
-                $notificationsArray[] = array('description' => $result['description'], 'path' => $path);
+                $notificationsArray[] = ['description' => $result['description'], 'path' => $path];
             }
         }
 
@@ -105,6 +104,8 @@ class NotificationScheduleController
         $crontabBeforeSave = NotificationScheduleModel::getCrontab();
         $corePath          = str_replace('custom/'.$customId.'/src/app/notification/controllers', '', __DIR__);
         $corePath          = str_replace('src/app/notification/controllers', '', $corePath);
+
+        $returnValue = false;
         foreach ($crontabToSave as $id => $cronValue) {
             if ($cronValue['state'] != 'hidden' && $crontabBeforeSave[$id]['state'] == 'hidden') {
                 $returnValue = false;
@@ -148,9 +149,7 @@ class NotificationScheduleController
         }
 
         if (!empty($errors)) {
-            return $response
-                ->withStatus(500)
-                ->withJson(['errors' => $errors]);
+            return $response->withStatus(500)->withJson(['errors' => $errors]);
         }
 
         $notification_sid = $data['notification_sid'];
diff --git a/src/app/notification/controllers/NotificationsEventsController.php b/src/app/notification/controllers/NotificationsEventsController.php
index d8b4328bc1c..7139bbe30f8 100644
--- a/src/app/notification/controllers/NotificationsEventsController.php
+++ b/src/app/notification/controllers/NotificationsEventsController.php
@@ -8,9 +8,8 @@
 */
 
 /**
-* @brief Notifications events Controller
+* @brief Notifications Events Controller
 * @author dev@maarch.org
-* @ingroup core
 */
 
 namespace Notification\controllers;
@@ -35,7 +34,7 @@ class NotificationsEventsController
             $event_ids = explode(',', $notification['event_id']);
 
             if ($aArgs['eventId'] == $notification['event_id']
-                || self::wildcardMatch(["pattern" => $notification['event_id'], "str" => $aArgs['eventId']])
+                || NotificationsEventsController::wildcardMatch(["pattern" => $notification['event_id'], "str" => $aArgs['eventId']])
                 || in_array($aArgs['eventId'], $event_ids)) {
                 NotificationsEventsModel::create([
                     'notification_sid' => $notification['notification_sid'],
@@ -48,7 +47,7 @@ class NotificationsEventsController
         }
     }
 
-    public function wildcardMatch(array $aArgs)
+    public static function wildcardMatch(array $aArgs)
     {
         $pattern = '/^' . str_replace(array('%', '\*', '\?', '\[', '\]'), array('.*', '.*', '.', '[', ']+'), preg_quote($aArgs['pattern'])) . '$/is';
         $result = preg_match($pattern, $aArgs['str']);
diff --git a/src/app/notification/models/NotificationModelAbstract.php b/src/app/notification/models/NotificationModelAbstract.php
index 669a2fcb804..3a9e0c8596e 100644
--- a/src/app/notification/models/NotificationModelAbstract.php
+++ b/src/app/notification/models/NotificationModelAbstract.php
@@ -10,7 +10,6 @@
  * @brief Notifications Model
  *
  * @author dev@maarch.org
- * @ingroup Module
  */
 
 namespace Notification\models;
@@ -22,7 +21,7 @@ use SrcCore\models\DatabaseModel;
 use Status\models\StatusModel;
 use SrcCore\models\CoreConfigModel;
 
-class NotificationModelAbstract
+abstract class NotificationModelAbstract
 {
     public static function get(array $aArgs = [])
     {
@@ -36,7 +35,7 @@ class NotificationModelAbstract
         return $aNotifications;
     }
 
-    public static function getById(array $aArgs = [])
+    public static function getById(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['notification_sid']);
 
@@ -54,7 +53,7 @@ class NotificationModelAbstract
         return $aNotification[0];
     }
 
-    public static function getByNotificationId(array $aArgs = [])
+    public static function getByNotificationId(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['notificationId']);
 
@@ -72,7 +71,7 @@ class NotificationModelAbstract
         return $aNotification[0];
     }
 
-    public static function delete(array $aArgs = [])
+    public static function delete(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['notification_sid']);
         ValidatorModel::intVal($aArgs, ['notification_sid']);
@@ -86,7 +85,7 @@ class NotificationModelAbstract
         return true;
     }
 
-    public static function create(array $aArgs = [])
+    public static function create(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['notification_id', 'description', 'is_enabled', 'event_id', 'notification_mode', 'template_id', 'diffusion_type']);
         ValidatorModel::intVal($aArgs, ['template_id']);
@@ -250,6 +249,8 @@ class NotificationModelAbstract
 
     public static function getEnableNotifications(array $aArgs = [])
     {
+        ValidatorModel::arrayType($aArgs, ['select']);
+
         $aReturn = DatabaseModel::select([
             'select' => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
             'table'  => ['notifications'],
diff --git a/src/app/notification/models/NotificationScheduleModelAbstract.php b/src/app/notification/models/NotificationScheduleModelAbstract.php
index a047e1bca0a..dffb8fadbac 100644
--- a/src/app/notification/models/NotificationScheduleModelAbstract.php
+++ b/src/app/notification/models/NotificationScheduleModelAbstract.php
@@ -10,7 +10,6 @@
  * @brief Notifications Model
  *
  * @author dev@maarch.org
- * @ingroup Module
  */
 
 namespace Notification\models;
@@ -19,7 +18,7 @@ use SrcCore\models\ValidatorModel;
 use SrcCore\models\CoreConfigModel;
 use History\controllers\HistoryController;
 
-class NotificationScheduleModelAbstract
+abstract class NotificationScheduleModelAbstract
 {
     public static function saveCrontab(array $aArgs = [])
     {
@@ -68,7 +67,7 @@ class NotificationScheduleModelAbstract
         $crontab = shell_exec('crontab -l');
         // TODO check crontab is installed
         $lines = explode("\n", $crontab);
-        $data = array();
+        $data = [];
         $customId = CoreConfigModel::getCustomId();
         $corePath = str_replace('custom/'.$customId.'/src/app/notification/models', '', __DIR__);
         $corePath = str_replace('src/app/notification/models', '', $corePath);
@@ -103,7 +102,7 @@ class NotificationScheduleModelAbstract
 
             $filename = explode('/', $cmd);
 
-            $data[] = array(
+            $data[] = [
                 'm'           => $m,
                 'h'           => $h,
                 'dom'         => $dom,
@@ -112,13 +111,13 @@ class NotificationScheduleModelAbstract
                 'cmd'         => $cmd,
                 'description' => end($filename),
                 'state'       => $state,
-            );
+            ];
         }
 
         return $data;
     }
 
-    public static function createScriptNotification(array $aArgs = [])
+    public static function createScriptNotification(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['notification_sid', 'notification_id']);
         ValidatorModel::intVal($aArgs, ['notification_sid']);
diff --git a/src/app/notification/models/NotificationsEventsModelAbstract.php b/src/app/notification/models/NotificationsEventsModelAbstract.php
index 53f253c2468..8a4e783a369 100644
--- a/src/app/notification/models/NotificationsEventsModelAbstract.php
+++ b/src/app/notification/models/NotificationsEventsModelAbstract.php
@@ -10,7 +10,6 @@
 /**
 * @brief Notifications Events Model
 * @author dev@maarch.org
-* @ingroup core
 */
 
 namespace Notification\models;
@@ -18,9 +17,9 @@ namespace Notification\models;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
 
-class NotificationsEventsModelAbstract
+abstract class NotificationsEventsModelAbstract
 {
-    public static function create(array $aArgs = [])
+    public static function create(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['notification_sid', 'table_name', 'record_id', 'user_id', 'event_info']);
         ValidatorModel::stringType($aArgs, ['table_name', 'user_id', 'event_info']);
@@ -31,7 +30,7 @@ class NotificationsEventsModelAbstract
         $aReturn = DatabaseModel::insert([
             'table'         => 'notif_event_stack',
             'columnsValues' => $aArgs
-            ]);
+        ]);
 
         return $aReturn;
     }
diff --git a/src/app/parameter/models/ParameterModelAbstract.php b/src/app/parameter/models/ParameterModelAbstract.php
index 6909c205279..e33c18e327f 100644
--- a/src/app/parameter/models/ParameterModelAbstract.php
+++ b/src/app/parameter/models/ParameterModelAbstract.php
@@ -20,7 +20,7 @@ namespace Parameter\models;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
 
-class ParameterModelAbstract
+abstract class ParameterModelAbstract
 {
     public static function get(array $aArgs = [])
     {
diff --git a/src/app/priority/controllers/PriorityController.php b/src/app/priority/controllers/PriorityController.php
index 8459e18e1fd..6aee379ed02 100644
--- a/src/app/priority/controllers/PriorityController.php
+++ b/src/app/priority/controllers/PriorityController.php
@@ -1,5 +1,17 @@
 <?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 Priority Controller
+ * @author dev@maarch.org
+ */
+
 namespace Priority\controllers;
 
 use Group\models\ServiceModel;
diff --git a/src/app/priority/models/PriorityModelAbstract.php b/src/app/priority/models/PriorityModelAbstract.php
index fccccffac03..f2129b53684 100644
--- a/src/app/priority/models/PriorityModelAbstract.php
+++ b/src/app/priority/models/PriorityModelAbstract.php
@@ -143,7 +143,6 @@ abstract class PriorityModelAbstract
         ]);
         
         return true;
-    }   
-    
+    }
 }
 
diff --git a/src/app/report/controllers/ReportController.php b/src/app/report/controllers/ReportController.php
index 6af4bdceff9..0186a466a67 100644
--- a/src/app/report/controllers/ReportController.php
+++ b/src/app/report/controllers/ReportController.php
@@ -21,7 +21,6 @@ use Report\models\ReportModel;
 use Slim\Http\Request;
 use Slim\Http\Response;
 
-
 class ReportController
 {
     public function getGroups(Request $request, Response $response)
diff --git a/src/app/report/models/ReportModelAbstract.php b/src/app/report/models/ReportModelAbstract.php
index 02945d4dc6b..2dbe49ebdd9 100644
--- a/src/app/report/models/ReportModelAbstract.php
+++ b/src/app/report/models/ReportModelAbstract.php
@@ -18,7 +18,7 @@ use SrcCore\models\ValidatorModel;
 use SrcCore\models\CoreConfigModel;
 use SrcCore\models\DatabaseModel;
 
-class ReportModelAbstract
+abstract class ReportModelAbstract
 {
     public static function getByGroupId(array $aArgs)
     {
diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php
index 029f6798cc4..c4b0fe5525b 100755
--- a/src/app/resource/controllers/ResController.php
+++ b/src/app/resource/controllers/ResController.php
@@ -154,7 +154,7 @@ class ResController
                 'moduleId'  => 'apps',
                 'eventId'   => 'resup',
             ]);
-        }        
+        }
 
         return $response->withJson(['success' => 'success']);
     }
diff --git a/src/app/resource/models/ChronoModel.php b/src/app/resource/models/ChronoModel.php
index 723a4445eb8..bd40a0507b6 100644
--- a/src/app/resource/models/ChronoModel.php
+++ b/src/app/resource/models/ChronoModel.php
@@ -33,7 +33,6 @@ class ChronoModel
         if ($loadedXml) {
             foreach ($loadedXml->CHRONO as $chrono) {
                 if ($chrono->id == $aArgs['id']) {
-                    $separator = (string)$chrono->separator;
                     foreach ($chrono->ELEMENT as $chronoElement) {
                         $elements[] = [
                             'type'  => (string)$chronoElement->type,
diff --git a/src/app/resource/models/ResModelAbstract.php b/src/app/resource/models/ResModelAbstract.php
index c9a0632d5b5..a89a87e84ea 100644
--- a/src/app/resource/models/ResModelAbstract.php
+++ b/src/app/resource/models/ResModelAbstract.php
@@ -18,7 +18,7 @@ use SrcCore\models\CoreConfigModel;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
 
-class ResModelAbstract
+abstract class ResModelAbstract
 {
     public static function getOnView(array $aArgs)
     {
diff --git a/src/app/signatureBook/controllers/SignatureBookController.php b/src/app/signatureBook/controllers/SignatureBookController.php
index 8fdb01c14f2..d8b902685b5 100644
--- a/src/app/signatureBook/controllers/SignatureBookController.php
+++ b/src/app/signatureBook/controllers/SignatureBookController.php
@@ -1,4 +1,5 @@
 <?php
+
 /**
 * Copyright Maarch since 2008 under licence GPLv3.
 * See LICENCE.txt file at the root folder for more details.
@@ -8,8 +9,9 @@
 
 /**
 * @brief   Signature Book Controller
-* @author  <dev@maarch.org>
+* @author  dev@maarch.org
 */
+
 namespace SignatureBook\controllers;
 
 use Attachment\models\AttachmentModel;
@@ -33,7 +35,6 @@ use SrcCore\models\ValidatorModel;
 use User\models\UserModel;
 use User\models\UserSignatureModel;
 
-
 class SignatureBookController
 {
     public function getSignatureBook(Request $request, Response $response, array $aArgs)
diff --git a/src/app/status/controllers/StatusController.php b/src/app/status/controllers/StatusController.php
index f29985a9044..7862ed48e90 100755
--- a/src/app/status/controllers/StatusController.php
+++ b/src/app/status/controllers/StatusController.php
@@ -10,7 +10,6 @@
 /**
 * @brief Status Controller
 * @author dev@maarch.org
-* @ingroup core
 */
 
 namespace Status\controllers;
@@ -31,9 +30,7 @@ class StatusController
             return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
         }
 
-        return $response->withJson([
-            'statuses' => StatusModel::get()
-        ]);
+        return $response->withJson(['statuses' => StatusModel::get()]);
     }
 
     public function getNewInformations(Request $request, Response $response)
@@ -69,25 +66,18 @@ class StatusController
         }
     }
 
-    public function getById(Request $request, Response $response, $aArgs)
+    public function getById(Request $request, Response $response, array $aArgs)
     {
         if (!ServiceModel::hasService(['id' => 'admin_status', 'userId' => $GLOBALS['userId'], 'location' => 'apps', 'type' => 'admin'])) {
             return $response->withStatus(403)->withJson(['errors' => 'Service forbidden']);
         }
 
-        if (!empty($aArgs['id'])) {
-            $obj = StatusModel::getById(['id' => $aArgs['id']]);
-
-            if (empty($obj)) {
-                return $response->withStatus(404)->withJson(['errors' => 'id not found']);
-            }
-
-            return $response->withJson([
-                'status' => $obj,
-            ]);
-        } else {
-            return $response->withStatus(500)->withJson(['errors' => 'id not valid']);
+        $status = StatusModel::getById(['id' => $aArgs['id']]);
+        if (empty($status)) {
+            return $response->withStatus(404)->withJson(['errors' => 'id not found']);
         }
+
+        return $response->withJson(['status' => $status]);
     }
 
     public function create(Request $request, Response $response)
@@ -97,7 +87,7 @@ class StatusController
         }
 
         $request = $request->getParams();
-        $aArgs   = self::manageValue($request);
+        $aArgs   = StatusController::manageValue($request);
         $errors  = $this->control($aArgs, 'create');
 
         if (!empty($errors)) {
@@ -128,7 +118,7 @@ class StatusController
         $request = $request->getParams();
         $request = array_merge($request, $aArgs);
 
-        $aArgs   = self::manageValue($request);
+        $aArgs   = StatusController::manageValue($request);
         $errors  = $this->control($aArgs, 'update');
 
         if (!empty($errors)) {
@@ -169,15 +159,13 @@ class StatusController
                 'info'       => _STATUS_DELETED . ' : ' . $statusDeleted[0]['id']
             ]);
         } else {
-            return $response
-                ->withStatus(500)
-                ->withJson(['errors' => 'identifier not valid']);
+            return $response->withStatus(500)->withJson(['errors' => 'identifier not valid']);
         }
 
         return $response->withJson(['statuses' => StatusModel::get()]);
     }
 
-    protected function manageValue($request)
+    protected static function manageValue($request)
     {
         foreach ($request  as $key => $value) {
             if (in_array($key, ['is_system', 'is_folder_status', 'can_be_searched', 'can_be_modified'])) {
diff --git a/src/app/status/models/StatusImagesModelAbstract.php b/src/app/status/models/StatusImagesModelAbstract.php
index bed8bf03f5a..cdd1a2771aa 100644
--- a/src/app/status/models/StatusImagesModelAbstract.php
+++ b/src/app/status/models/StatusImagesModelAbstract.php
@@ -15,11 +15,14 @@
 namespace Status\models;
 
 use SrcCore\models\DatabaseModel;
+use SrcCore\models\ValidatorModel;
 
-class StatusImagesModelAbstract
+abstract class StatusImagesModelAbstract
 {
     public static function getStatusImages(array $aArgs = [])
     {
+        ValidatorModel::arrayType($aArgs, ['select']);
+
         $aReturn = DatabaseModel::select([
             'select'    => empty($aArgs['select']) ? ['*'] : $aArgs['select'],
             'table'     => ['status_images'],
diff --git a/src/app/status/models/StatusModelAbstract.php b/src/app/status/models/StatusModelAbstract.php
index 5e0ae527818..89cfc8d4c8c 100755
--- a/src/app/status/models/StatusModelAbstract.php
+++ b/src/app/status/models/StatusModelAbstract.php
@@ -10,7 +10,6 @@
 /**
 * @brief Status Model
 * @author dev@maarch.org
-* @ingroup core
 */
 
 namespace Status\models;
@@ -18,7 +17,7 @@ namespace Status\models;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
 
-class StatusModelAbstract
+abstract class StatusModelAbstract
 {
     public static function get(array $aArgs = [])
     {
diff --git a/src/app/template/models/TemplateModelAbstract.php b/src/app/template/models/TemplateModelAbstract.php
index aa0db036f9d..2f33315adce 100644
--- a/src/app/template/models/TemplateModelAbstract.php
+++ b/src/app/template/models/TemplateModelAbstract.php
@@ -17,7 +17,7 @@ namespace Template\models;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
 
-class TemplateModelAbstract
+abstract class TemplateModelAbstract
 {
     public static function getById(array $aArgs)
     {
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index 21745729f7c..0cca9a0e255 100644
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -542,10 +542,10 @@ class UserController
         ]);
 
         if (!file_exists($storeInfos['path_template']. str_replace('#', '/', $storeInfos['destination_dir']) .$storeInfos['file_destination_name'])) {
-            return $response->withStatus(500)->withJson(['errors' => $storeInfos['error'] .' '._PATH_OF_DOCSERVER_UNAPPROACHABLE]);
+            return $response->withStatus(500)->withJson(['errors' => $storeInfos['error'] .' '. _PATH_OF_DOCSERVER_UNAPPROACHABLE]);
         }
 
-        UserModel::createSignature([
+        UserSignatureModel::create([
             'userSerialId'      => $aArgs['id'],
             'signatureLabel'    => $data['label'],
             'signaturePath'     => $storeInfos['destination_dir'],
@@ -570,7 +570,7 @@ class UserController
             return $response->withStatus(400)->withJson(['errors' => 'Bad Request']);
         }
 
-        UserModel::updateSignature([
+        UserSignatureModel::update([
             'signatureId'   => $aArgs['signatureId'],
             'userSerialId'  => $aArgs['id'],
             'label'         => $data['label']
@@ -588,7 +588,7 @@ class UserController
             return $response->withStatus($error['status'])->withJson(['errors' => $error['error']]);
         }
 
-        UserModel::deleteSignature(['signatureId' => $aArgs['signatureId'], 'userSerialId' => $aArgs['id']]);
+        UserSignatureModel::delete(['signatureId' => $aArgs['signatureId'], 'userSerialId' => $aArgs['id']]);
 
         return $response->withJson([
             'signatures' => UserSignatureModel::getByUserSerialId(['userSerialid' => $aArgs['id']])
@@ -600,19 +600,15 @@ class UserController
         $data = $request->getParams();
 
         if (!$this->checkNeededParameters(['data' => $data, 'needed' => ['title', 'htmlBody']])) {
-            return $response->withJson(['errors' => _EMPTY_EMAIL_SIGNATURE_FORM]);
+            return $response->withJson(['errors' => 'Bad Request']);
         }
 
-        $r = UserModel::createEmailSignature([
+        UserModel::createEmailSignature([
             'userId'    => $GLOBALS['userId'],
             'title'     => $data['title'],
             'htmlBody'  => $data['htmlBody']
         ]);
 
-        if (!$r) {
-            return $response->withStatus(500)->withJson(['errors' => 'Email Signature Creation Error']);
-        }
-
         return $response->withJson([
             'emailSignatures' => UserModel::getEmailSignaturesById(['userId' => $GLOBALS['userId']])
         ]);
@@ -623,20 +619,16 @@ class UserController
         $data = $request->getParams();
 
         if (!$this->checkNeededParameters(['data' => $data, 'needed' => ['title', 'htmlBody']])) {
-            return $response->withJson(['errors' => _EMPTY_EMAIL_SIGNATURE_FORM]);
+            return $response->withJson(['errors' => 'Bad Request']);
         }
 
-        $r = UserModel::updateEmailSignature([
+        UserModel::updateEmailSignature([
             'id'        => $aArgs['id'],
             'userId'    => $GLOBALS['userId'],
             'title'     => $data['title'],
             'htmlBody'  => $data['htmlBody']
         ]);
 
-        if (!$r) {
-            return $response->withStatus(500)->withJson(['errors' => 'Email Signature Update Error']);
-        }
-
         return $response->withJson([
             'emailSignature' => UserModel::getEmailSignatureWithSignatureIdById(['userId' => $GLOBALS['userId'], 'signatureId' => $aArgs['id']])
         ]);
diff --git a/src/app/user/models/UserBasketPreferenceModelAbstract.php b/src/app/user/models/UserBasketPreferenceModelAbstract.php
index 82081817e5e..30ffef6a9b6 100644
--- a/src/app/user/models/UserBasketPreferenceModelAbstract.php
+++ b/src/app/user/models/UserBasketPreferenceModelAbstract.php
@@ -17,7 +17,7 @@ namespace User\models;
 use SrcCore\models\ValidatorModel;
 use SrcCore\models\DatabaseModel;
 
-class UserBasketPreferenceModelAbstract
+abstract class UserBasketPreferenceModelAbstract
 {
     public static function get(array $aArgs = [])
     {
diff --git a/src/app/user/models/UserEntityModelAbstract.php b/src/app/user/models/UserEntityModelAbstract.php
index b52afe10bcb..05fc09d3fec 100644
--- a/src/app/user/models/UserEntityModelAbstract.php
+++ b/src/app/user/models/UserEntityModelAbstract.php
@@ -18,7 +18,7 @@ use Entity\models\EntityModel;
 use SrcCore\models\DatabaseModel;
 use SrcCore\models\ValidatorModel;
 
-class UserEntityModelAbstract
+abstract class UserEntityModelAbstract
 {
     public static function get(array $aArgs)
     {
diff --git a/src/app/user/models/UserModelAbstract.php b/src/app/user/models/UserModelAbstract.php
index ca757d73a38..18779323b16 100644
--- a/src/app/user/models/UserModelAbstract.php
+++ b/src/app/user/models/UserModelAbstract.php
@@ -14,15 +14,13 @@
 
 namespace User\models;
 
-use Docserver\models\DocserverModel;
-use SrcCore\models\CoreConfigModel;
 use SrcCore\models\DatabaseModel;
 use SrcCore\models\SecurityModel;
 use SrcCore\models\ValidatorModel;
 
 require_once 'core/class/Url.php';
 
-class UserModelAbstract
+abstract class UserModelAbstract
 {
     public static function get(array $aArgs)
     {
@@ -85,7 +83,7 @@ class UserModelAbstract
         return true;
     }
 
-    public static function update(array $aArgs = [])
+    public static function update(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['id', 'user']);
         ValidatorModel::notEmpty($aArgs['user'], ['firstname', 'lastname']);
@@ -128,7 +126,7 @@ class UserModelAbstract
         return true;
     }
 
-    public static function getByUserId(array $aArgs = [])
+    public static function getByUserId(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['userId']);
         ValidatorModel::stringType($aArgs, ['userId']);
@@ -147,7 +145,7 @@ class UserModelAbstract
         return $aUser[0];
     }
 
-    public static function getByEmail(array $aArgs = [])
+    public static function getByEmail(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['mail']);
         ValidatorModel::stringType($aArgs, ['mail']);
@@ -163,7 +161,7 @@ class UserModelAbstract
         return $aUser;
     }
 
-    public static function updatePassword(array $aArgs = [])
+    public static function updatePassword(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['id', 'password']);
         ValidatorModel::intVal($aArgs, ['id']);
@@ -199,58 +197,7 @@ class UserModelAbstract
         return true;
     }
 
-    public static function createSignature(array $aArgs = [])
-    {
-        ValidatorModel::notEmpty($aArgs, ['userSerialId', 'signatureLabel', 'signaturePath', 'signatureFileName']);
-        ValidatorModel::stringType($aArgs, ['signatureLabel', 'signaturePath', 'signatureFileName']);
-        ValidatorModel::intVal($aArgs, ['userSerialId']);
-
-        DatabaseModel::insert([
-            'table'         => 'user_signatures',
-            'columnsValues' => [
-                'user_serial_id'        => $aArgs['userSerialId'],
-                'signature_label'       => $aArgs['signatureLabel'],
-                'signature_path'        => $aArgs['signaturePath'],
-                'signature_file_name'   => $aArgs['signatureFileName']
-            ]
-        ]);
-
-        return true;
-    }
-
-    public static function updateSignature(array $aArgs = [])
-    {
-        ValidatorModel::notEmpty($aArgs, ['signatureId', 'userSerialId', 'label']);
-        ValidatorModel::stringType($aArgs, ['label']);
-        ValidatorModel::intVal($aArgs, ['signatureId', 'userSerialId']);
-
-        DatabaseModel::update([
-            'table'     => 'user_signatures',
-            'set'       => [
-                'signature_label'   => $aArgs['label']
-            ],
-            'where'     => ['user_serial_id = ?', 'id = ?'],
-            'data'      => [$aArgs['userSerialId'], $aArgs['signatureId']]
-        ]);
-
-        return true;
-    }
-
-    public static function deleteSignature(array $aArgs = [])
-    {
-        ValidatorModel::notEmpty($aArgs, ['signatureId', 'userSerialId']);
-        ValidatorModel::intVal($aArgs, ['signatureId', 'userSerialId']);
-
-        DatabaseModel::delete([
-            'table'     => 'user_signatures',
-            'where'     => ['user_serial_id = ?', 'id = ?'],
-            'data'      => [$aArgs['userSerialId'], $aArgs['signatureId']],
-        ]);
-
-        return true;
-    }
-
-    public static function createEmailSignature(array $aArgs = [])
+    public static function createEmailSignature(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['userId', 'title', 'htmlBody']);
         ValidatorModel::stringType($aArgs, ['userId', 'title', 'htmlBody']);
@@ -267,7 +214,7 @@ class UserModelAbstract
         return true;
     }
 
-    public static function updateEmailSignature(array $aArgs = [])
+    public static function updateEmailSignature(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['id','userId', 'title', 'htmlBody']);
         ValidatorModel::stringType($aArgs, ['userId', 'title', 'htmlBody']);
@@ -286,7 +233,7 @@ class UserModelAbstract
         return true;
     }
 
-    public static function deleteEmailSignature(array $aArgs = [])
+    public static function deleteEmailSignature(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['id', 'userId']);
         ValidatorModel::stringType($aArgs, ['userId']);
@@ -300,7 +247,7 @@ class UserModelAbstract
         return true;
     }
 
-    public static function getEmailSignaturesById(array $aArgs = [])
+    public static function getEmailSignaturesById(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['userId']);
         ValidatorModel::stringType($aArgs, ['userId']);
@@ -316,7 +263,7 @@ class UserModelAbstract
         return $aReturn;
     }
 
-    public static function getEmailSignatureWithSignatureIdById(array $aArgs = [])
+    public static function getEmailSignatureWithSignatureIdById(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['userId', 'signatureId']);
         ValidatorModel::stringType($aArgs, ['userId']);
@@ -332,7 +279,7 @@ class UserModelAbstract
         return $aReturn[0];
     }
 
-    public static function getLabelledUserById(array $aArgs = [])
+    public static function getLabelledUserById(array $aArgs)
     {
         ValidatorModel::intVal($aArgs, ['id']);
         ValidatorModel::stringType($aArgs, ['userId']);
@@ -351,12 +298,11 @@ class UserModelAbstract
         return $labelledUser;
     }
 
-    public static function getCurrentConsigneById(array $aArgs = [])
+    public static function getCurrentConsigneById(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['resId']);
         ValidatorModel::intVal($aArgs, ['resId']);
 
-
         $aReturn = DatabaseModel::select([
             'select'    => ['process_comment'],
             'table'     => ['listinstance'],
@@ -441,7 +387,7 @@ class UserModelAbstract
         return true;
     }
 
-    public static function hasGroup(array $aArgs = [])
+    public static function hasGroup(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['id', 'groupId']);
         ValidatorModel::intVal($aArgs, ['id']);
@@ -478,7 +424,7 @@ class UserModelAbstract
         return true;
     }
 
-    public static function updateGroup(array $aArgs = [])
+    public static function updateGroup(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['id', 'groupId']);
         ValidatorModel::intVal($aArgs, ['id']);
@@ -497,7 +443,7 @@ class UserModelAbstract
         return true;
     }
 
-    public static function deleteGroup(array $aArgs = [])
+    public static function deleteGroup(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['id', 'groupId']);
         ValidatorModel::intVal($aArgs, ['id']);
@@ -513,7 +459,7 @@ class UserModelAbstract
         return true;
     }
 
-    public static function hasEntity(array $aArgs = [])
+    public static function hasEntity(array $aArgs)
     {
         ValidatorModel::notEmpty($aArgs, ['id', 'entityId']);
         ValidatorModel::intVal($aArgs, ['id']);
diff --git a/src/app/user/models/UserSignatureModelAbstract.php b/src/app/user/models/UserSignatureModelAbstract.php
index 52afd11013e..5057039eed5 100644
--- a/src/app/user/models/UserSignatureModelAbstract.php
+++ b/src/app/user/models/UserSignatureModelAbstract.php
@@ -17,7 +17,7 @@ namespace User\models;
 use SrcCore\models\DatabaseModel;
 use SrcCore\models\ValidatorModel;
 
-class UserSignatureModelAbstract
+abstract class UserSignatureModelAbstract
 {
     public static function get(array $aArgs)
     {
@@ -64,4 +64,55 @@ class UserSignatureModelAbstract
 
         return $signatures;
     }
+
+    public static function create(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['userSerialId', 'signatureLabel', 'signaturePath', 'signatureFileName']);
+        ValidatorModel::stringType($aArgs, ['signatureLabel', 'signaturePath', 'signatureFileName']);
+        ValidatorModel::intVal($aArgs, ['userSerialId']);
+
+        DatabaseModel::insert([
+            'table'         => 'user_signatures',
+            'columnsValues' => [
+                'user_serial_id'        => $aArgs['userSerialId'],
+                'signature_label'       => $aArgs['signatureLabel'],
+                'signature_path'        => $aArgs['signaturePath'],
+                'signature_file_name'   => $aArgs['signatureFileName']
+            ]
+        ]);
+
+        return true;
+    }
+
+    public static function update(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['signatureId', 'userSerialId', 'label']);
+        ValidatorModel::stringType($aArgs, ['label']);
+        ValidatorModel::intVal($aArgs, ['signatureId', 'userSerialId']);
+
+        DatabaseModel::update([
+            'table'     => 'user_signatures',
+            'set'       => [
+                'signature_label'   => $aArgs['label']
+            ],
+            'where'     => ['user_serial_id = ?', 'id = ?'],
+            'data'      => [$aArgs['userSerialId'], $aArgs['signatureId']]
+        ]);
+
+        return true;
+    }
+
+    public static function delete(array $aArgs)
+    {
+        ValidatorModel::notEmpty($aArgs, ['signatureId', 'userSerialId']);
+        ValidatorModel::intVal($aArgs, ['signatureId', 'userSerialId']);
+
+        DatabaseModel::delete([
+            'table'     => 'user_signatures',
+            'where'     => ['user_serial_id = ?', 'id = ?'],
+            'data'      => [$aArgs['userSerialId'], $aArgs['signatureId']],
+        ]);
+
+        return true;
+    }
 }
diff --git a/src/core/controllers/CoreController.php b/src/core/controllers/CoreController.php
index 79c689916d7..8146f062ed0 100644
--- a/src/core/controllers/CoreController.php
+++ b/src/core/controllers/CoreController.php
@@ -10,7 +10,6 @@
  * @brief Core Controller
  *
  * @author dev@maarch.org
- * @ingroup Core
  */
 
 namespace SrcCore\controllers;
diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php
index 8c28e3d6ae0..b942e24491b 100644
--- a/src/core/lang/lang-en.php
+++ b/src/core/lang/lang-en.php
@@ -11,6 +11,7 @@
  *
  * @author dev@maarch.org
  */
+
 define('_ACTION_ADDED', 'Action added');
 define('_ACTION_DELETED', 'Action deleted');
 define('_ACTION_UPDATED', 'Action updated');
@@ -41,6 +42,7 @@ define('_DOCUMENT_NOT_FOUND', 'Document not found');
 define('_ENTITY_CREATION', 'Entity creation');
 define('_ENTITY_MODIFICATION', 'Entity modification');
 define('_ENTITY_SUPPRESSION', 'Entity suppression');
+define('_ID', 'Identifier');
 define('_ID_TO_DISPLAY', 'res_id');
 define('_INVALID_CLAUSE', 'Clause is not valid');
 define('_INVALID_REQUEST', 'Request is not valid');
@@ -102,63 +104,10 @@ define('_REGISTERED_MAIL', 'registered letter with recorded delivery');
 define('_COURIER', 'Courier');
 define('_NUMERIC_PACKAGE', 'Numeric package');
 define('_OTHER', 'Other');
-
-//BEGIN ALEX
-define('_ID', 'Identifier');
-define('_REDIRECT_TO_ACTION', 'Redirect to an action');
-define('_ADMIN', 'Administration');
-define('_ADV_SEARCH_MLB', 'Search');
-define('_INDEXING_MLB', 'Save a mail/document');
-define('_SEARCH_CONTACTS', 'Search a contact');
-define('_PARAM_MLB_DOCTYPES', 'Documents types configuration ');
-define('_PARAM_MLB_DOCTYPES_DESC', 'Doctypes configuration ');
-define('_WELCOME_TEXT_LOAD', 'Text loading of the home page');
-define('_QUICKLAUNCH', 'Short cut');
-define('_MY_CONTACTS', 'Create contacts from indexation/title');
-define('_MY_CONTACTS_MENU', 'My contacts');
-define('_CREATE_CONTACTS', 'All the contacts');
-define('_UPDATE_CONTACTS', 'Contact update from indexation/ title');
-define('_VIEW_TECHNICAL_INFORMATIONS', 'See technical information');
-define('_VIEW_DOC_HISTORY', 'See global document history');
-define('_VIEW_FULL_HISTORY', 'See Full document history');
-define('_VIEW_FULL_HISTORY_DESC', 'Read the full events history linked to the utilisation of Maarch.');
-define('_DELETE_DOCUMENT_IN_DETAIL', 'Delete a document in detail page');
-define('_EDIT_DOCUMENT_IN_DETAIL', 'Edit a document in detail page');
-define('_EDIT_DOCUMENT_IN_DETAIL_DESC', 'Edit a document in detail page. Il will also depend on status setting (Index modification)');
-define('_PUT_DOC_ON_VALIDATION_FROM_DETAILS', 'Send the document for validation from the detailed page');
-define('_LOAD_STATUSES_SESSION', 'Load Status session');
-define('_PARAM_AVAILABLE_STATUS_ON_GROUP_BASKETS', 'Indexation status configuration');
-define('_ADD_LINKS', 'Add connection');
-define('_PRINT_DETAILS_SERVICE', 'Print the liaison sheet from the detail sheet');
-define('_PRINT_DOC_DETAILS_FROM_LIST', 'Print the liaison sheets from the results lists');
-define('_ATTACHMENTS_COMMENT', 'Attachments management');
-define('_BASKETS_COMMENT', 'Baskets');
-define('_CASES_COMMENT', 'Cases');
-define('_ENTITIES_COMMENT', 'Departments');
-define('_FILEPLAN_COMMENT', 'Organizational file plan');
-define('_FOLDERS_COMMENT', 'Folders');
-define('_FULL_TEXT', 'Full text');
-define('_NOTES_COMMENT', 'Notes');
-define('_NOTIFICATIONS_COMMENT', 'Notifications');
-define('_TEMPLATES_COMMENT', 'Templates');
-define('_REPORTS_COMMENT', 'States and editions');
-define('_LIFE_CYCLE_COMMENT', 'Life cycle management');
-define('_CONTENT_MANAGEMENT_COMMENT', 'Management of document versions');
-define('_TAGS_COMMENT', 'Tags');
-define('_SENDMAIL_COMMENT', 'Send emails');
-define('_THUMBNAILS_COMMENT', 'Unit of thumbnails');
-define('_VISA_WORKFLOW_COMMENT', 'Visa workflow management');
-define('_AVIS_WORKFLOW_COMMENT', 'recommendation workflow management');
-define('_THESAURUS_COMMENT', 'Thesaurus management');
-define('_EXPORT_SEDA_COMMENT', 'Export');
-define('_CONVERT_COMMENT', 'Conversions module');
-define('_VIEW_BASKETS', 'My baskets');
-define('_PRINT_SEPS', 'Limiters printing');
-define('_FILEPLAN_SHORT', 'File plan');
-define('_CREATE_FOLDER', 'Create a folder');
-define('_FOLDER_SEARCH', 'Search a folder');
-define('_VIEW_FOLDER_TREE', 'Read a folder');
-define('_SAVE_NUMERIC_PACKAGE', 'Save numeric package');
+define('_NOTIFICATION_ALREADY_EXIST', 'Notification already exists');
+define('_WRONG_PSW', 'Wrong password');
+define('_MAX_SIZE_UPLOAD_REACHED', 'File maximum size is exceeded');
+define('_PATH_OF_DOCSERVER_UNAPPROACHABLE', 'Inaccessible Docserver path');
 
 // LISTS
 define('_DOCUMENTS_LIST_WITH_ATTACHMENTS', 'List with filters and responses');
@@ -216,6 +165,99 @@ define('_ADMIN_NOTIFICATIONS_DESC', " Create and manage users' notifications bas
 define('_TEMPLATES', 'Templates');
 define('_ADMIN_TEMPLATES_DESC', 'Manage templates for attachments, notifications, document generation, sendmail and notes');
 
+//SERVICES
+define('_REDIRECT_TO_ACTION', 'Redirect to an action');
+define('_ADMIN', 'Administration');
+define('_ADV_SEARCH_MLB', 'Search');
+define('_INDEXING_MLB', 'Save a mail/document');
+define('_SEARCH_CONTACTS', 'Search a contact');
+define('_PARAM_MLB_DOCTYPES', 'Documents types configuration ');
+define('_PARAM_MLB_DOCTYPES_DESC', 'Doctypes configuration ');
+define('_WELCOME_TEXT_LOAD', 'Text loading of the home page');
+define('_QUICKLAUNCH', 'Short cut');
+define('_MY_CONTACTS', 'Create contacts from indexation/title');
+define('_MY_CONTACTS_MENU', 'My contacts');
+define('_CREATE_CONTACTS', 'All the contacts');
+define('_UPDATE_CONTACTS', 'Contact update from indexation/ title');
+define('_VIEW_TECHNICAL_INFORMATIONS', 'See technical information');
+define('_VIEW_DOC_HISTORY', 'See global document history');
+define('_VIEW_FULL_HISTORY', 'See Full document history');
+define('_VIEW_FULL_HISTORY_DESC', 'Read the full events history linked to the utilisation of Maarch.');
+define('_DELETE_DOCUMENT_IN_DETAIL', 'Delete a document in detail page');
+define('_EDIT_DOCUMENT_IN_DETAIL', 'Edit a document in detail page');
+define('_EDIT_DOCUMENT_IN_DETAIL_DESC', 'Edit a document in detail page. Il will also depend on status setting (Index modification)');
+define('_PUT_DOC_ON_VALIDATION_FROM_DETAILS', 'Send the document for validation from the detailed page');
+define('_LOAD_STATUSES_SESSION', 'Load Status session');
+define('_PARAM_AVAILABLE_STATUS_ON_GROUP_BASKETS', 'Indexation status configuration');
+define('_ADD_LINKS', 'Add connection');
+define('_PRINT_DETAILS_SERVICE', 'Print the liaison sheet from the detail sheet');
+define('_PRINT_DOC_DETAILS_FROM_LIST', 'Print the liaison sheets from the results lists');
+define('_ATTACHMENTS_COMMENT', 'Attachments management');
+define('_BASKETS_COMMENT', 'Baskets');
+define('_CASES_COMMENT', 'Cases');
+define('_ENTITIES_COMMENT', 'Departments');
+define('_FILEPLAN_COMMENT', 'Organizational file plan');
+define('_FOLDERS_COMMENT', 'Folders');
+define('_FULL_TEXT', 'Full text');
+define('_NOTES_COMMENT', 'Notes');
+define('_NOTIFICATIONS_COMMENT', 'Notifications');
+define('_TEMPLATES_COMMENT', 'Templates');
+define('_REPORTS_COMMENT', 'States and editions');
+define('_LIFE_CYCLE_COMMENT', 'Life cycle management');
+define('_CONTENT_MANAGEMENT_COMMENT', 'Management of document versions');
+define('_TAGS_COMMENT', 'Tags');
+define('_SENDMAIL_COMMENT', 'Send emails');
+define('_THUMBNAILS_COMMENT', 'Unit of thumbnails');
+define('_VISA_WORKFLOW_COMMENT', 'Visa workflow management');
+define('_AVIS_WORKFLOW_COMMENT', 'recommendation workflow management');
+define('_THESAURUS_COMMENT', 'Thesaurus management');
+define('_EXPORT_SEDA_COMMENT', 'Export');
+define('_CONVERT_COMMENT', 'Conversions module');
+define('_VIEW_BASKETS', 'My baskets');
+define('_PRINT_SEPS', 'Limiters printing');
+define('_FILEPLAN_SHORT', 'File plan');
+define('_CREATE_FOLDER', 'Create a folder');
+define('_FOLDER_SEARCH', 'Search a folder');
+define('_VIEW_FOLDER_TREE', 'Read a folder');
+define('_SAVE_NUMERIC_PACKAGE', 'Save numeric package');
+define("_SELECT_FOLDER", "Folder selection");
+define("_FOLDER_HISTORY", "Folder's history");
+define("_MODIFY_FOLDER", "Modify folder's index");
+define("_ATTACH_DOC_TO_FOLDER", "Attach a document to a folder");
+define("_DELETE_FOLDER", "Delete a folder");
+define("_FREEZE_FOLDER", "Freeze the folder");
+define("_CLOSE_FOLDER", "Close the folder");
+define("_NOTES_RESTRICTION", "By default, limit the notes to your department");
+define("_MANAGE_NOTES", "Manage notes");
+define("_REPORTS_DESC", "States editions");
+define('_GRAPHICS_REPORTS', 'Graphics mode enabled');
+define("_USE_MAIL_SERVICES", "Use emails services as sender");
+define("_USE_MAIL_SERVICES_DESC", "Use emails services as sender");
+define("_TAG_DEFAULT", "Tag");
+define("_TAG_VIEW", "View the Tag of the documents");
+define("_TAG_VIEW_DESC", "Allows to view Tag");
+define("_CREATE_TAG", "Create Tag");
+define("_CREATE_TAG_DESC", "Allows to create Tag not existing in database");
+define("_ADD_TAG_TO_RES", "Associate the available Tag to a document");
+define("_ADD_TAG_TO_RES_DESC", "Allows to add Tag to a resource");
+define("_PRIVATE_TAGS", "Associate Tag to the user's entity (Direction level)");
+define("_PRIVATE_TAGS_DESC", "User will only see Tag restricted to user's direction (adding / updating will automatically associate the word to user's direction).");
+define("_THESAURUS_VIEW", "Display the thesaurus in the process pages");
+define("_THESAURUS_VIEW_DESC", "Be able to see the term(s) which are associated to different documents");
+define("_ADD_THESAURUS_TO_RES", "Be able to associate terms to different documents");
+define("_ADD_THESAURUS_TO_RES_DESC", "Allow to use thesaurus 's available terms to refer documents");
+define('_CONFIG_VISA_WORKFLOW', 'Visa workflow setting');
+define('_CONFIG_VISA_WORKFLOW_DESC', 'Allows to set up visa flow which the mail will have to follow');
+define('_CONFIG_VISA_WORKFLOW_IN_DETAIL', 'Visa workflow setting from detailed card');
+define('_VISA_ANSWERS', 'Aim the responses projects');
+define('_VISA_ANSWERS_DESC', 'Allows to aim response projects');
+define('_SIGN_DOCS', 'Sign the documents');
+define('_MODIFY_VISA_IN_SIGNATUREBOOK', 'Modify current visa user from signature book');
+define('_MODIFY_VISA_IN_SIGNATUREBOOK_DESC', 'Useful if signature book is used as a supervision signature book');
+define('_PRINT_FOLDER_DOC', 'Print the entire folder');
+define('_USE_DATE_IN_SIGNBLOCK', 'Add current date in sign block');
+define('_USE_DATE_IN_SIGNBLOCK_DESC', 'The current date is added in top of sign block (with the town if it wrote in parent entity of application).');
+
 // ACTIONS
 define('_REDIRECTION', 'Redirection');
 define('_REDIRECTION_DESC', 'Ouvre une modal permettant de choisir un nouvel utilisateur traitant OU de redéfinir le service traitant avec une nouvelle liste de diffusion.');
@@ -280,7 +322,6 @@ define("_CONFIG_AVIS_WORKFLOW_IN_DETAIL", "Recommendation workflow setting from
 define("_CONFIG_AVIS_WORKFLOW_IN_DETAIL_DESC", "Allows to define the workflow directly from the mail detailed form");
 define("_AVIS_ANSWERS", "Give oneself's opinion");
 define("_AVIS_ANSWERS_DESC", "Allows to this group to appear in the counsellor's list (recommendation workflow)");
-define("_VIEW_BASKETS", "My baskets");
 define("_VIEW_BASKETS_DESC", "My baskets");
 define("_UPDATE_CASE", "Cases updates");
 define("_JOIN_RES_CASE", "Attach mails to cases");
@@ -298,58 +339,20 @@ define("_PUT_DOC_IN_FILEPLAN", "Classify documents");
 define("_PUT_DOC_IN_FILEPLAN_COMMENT", "Classify documents in the organizational file plan");
 define("_PERSONNAL_FILEPLAN", "Personal file plan");
 
-
-//FOLDER
-define("_SELECT_FOLDER", "Folder selection");
-define("_FOLDER_HISTORY", "Folder's history");
-define("_MODIFY_FOLDER", "Modify folder's index");
-define("_ATTACH_DOC_TO_FOLDER", "Attach a document to a folder");
-define("_DELETE_FOLDER", "Delete a folder");
-define("_FREEZE_FOLDER", "Freeze the folder");
-define("_CLOSE_FOLDER", "Close the folder");
-
-//NOTES
-define("_NOTES_RESTRICTION", "By default, limit the notes to your department");
-define("_MANAGE_NOTES", "Manage notes");
-
-//NOTIFICATIONS
-define("_NOTIFICATIONS", "Notifications");
-
-//REPORTS
-define("_REPORTS","States and editions");
-define("_REPORTS_DESC","States editions");
-define('_GRAPHICS_REPORTS', 'Graphics mode enabled');
-
-//SENDMAIL
-define("_USE_MAIL_SERVICES", "Use emails services as sender");
-define("_USE_MAIL_SERVICES_DESC", "Use emails services as sender");
-
-//TAGS
-define("_TAG_DEFAULT", "Tag");
-define("_TAG_VIEW", "View the "._TAGS_DEFAULT." of the documents");
-define("_TAG_VIEW_DESC", "Allows to view "._TAGS_DEFAULT);
-define("_CREATE_TAG", "Create "._TAGS_DEFAULT);
-define("_CREATE_TAG_DESC", "Allows to create ".strtolower(_TAGS_DEFAULT)." not existing in database");
-define("_ADD_TAG_TO_RES", "Associate the available "._TAGS_DEFAULT." to a document");
-define("_ADD_TAG_TO_RES_DESC", "Allows to add "._TAGS_DEFAULT." to a resource");
-define("_PRIVATE_TAGS", "Associate ".strtolower(_TAGS_DEFAULT)." to the user's entity (Direction level)");
-define("_PRIVATE_TAGS_DESC", "User will only see ".strtolower(_TAGS_DEFAULT)." restricted to user's direction (adding / updating will automatically associate the word to user's direction).");
-
-//THESAURUS
-define("_THESAURUS_VIEW", "Display the thesaurus in the process pages");
-define("_THESAURUS_VIEW_DESC", "Be able to see the term(s) which are associated to different documents");
-define("_ADD_THESAURUS_TO_RES", "Be able to associate terms to different documents");
-define("_ADD_THESAURUS_TO_RES_DESC", "Allow to use thesaurus 's available terms to refer documents");
-
-//VISA
-define('_CONFIG_VISA_WORKFLOW', 'Visa workflow setting');
-define('_CONFIG_VISA_WORKFLOW_DESC', 'Allows to set up visa flow which the mail will have to follow');
-define('_CONFIG_VISA_WORKFLOW_IN_DETAIL', 'Visa workflow setting from detailed card');
-define('_VISA_ANSWERS', 'Aim the responses projects');
-define('_VISA_ANSWERS_DESC', 'Allows to aim response projects');
-define('_SIGN_DOCS', 'Sign the documents');
-define('_MODIFY_VISA_IN_SIGNATUREBOOK', 'Modify current visa user from signature book');
-define('_MODIFY_VISA_IN_SIGNATUREBOOK_DESC', 'Useful if signature book is used as a supervision signature book');
-define('_PRINT_FOLDER_DOC', 'Print the entire folder');
-define('_USE_DATE_IN_SIGNBLOCK', 'Add current date in sign block');
-define('_USE_DATE_IN_SIGNBLOCK_DESC', 'The current date is added in top of sign block (with the town if it wrote in parent entity of application).');
\ No newline at end of file
+// REPORTS
+define('_FOLDER_VIEW_STAT', 'Number of read folders');
+define('_ENTITY_VOL_STAT', 'Mails volume by department');
+define('_ENTITY_VOL_STAT_DESC', 'Mails volume by department');
+define('_RESPONSE_RATE_BY_ENTITIES', 'Taux de réponse par entité');
+define('_RESPONSE_RATE_BY_ENTITIES_DESC', 'Permet d\'afficher le pourcentage de courrier dont une réponse a été effectuée. Cette statistique se base sur le nombre de courriers dont une date de départ a été inscrite (il faut utiliser le champ custom_d1)');
+define('_ENTITY_LATE_MAIL', 'Late mail volume by department');
+define('_ENTITY_PROCESS_DELAY', 'Medium handling time by department');
+define('_USERS_LOGS', 'Access list to the application by agent');
+define('_PROCESS_DELAY_REPORT', 'Average process period by mail type');
+define('_PROCESS_DELAY_REPORT_DESC', 'Average process period by mail type');
+define('_PROCESS_DELAY_GENERIC_EVALUATION_REPORT', 'Handling medium time');
+define('_PROCESS_DELAY_GENERIC_EVALUATION_REPORT_DESC', 'Permet d\'afficher le délai (en jour) de la création jusqu\'à la clôture d\'un courrier.');
+define('_MAIL_TYPOLOGY_REPORT', 'Mails typology by period');
+define('_MAIL_TYPOLOGY_REPORT_DESC', 'Mails typology by period');
+define('_MAIL_VOL_BY_CAT_REPORT', 'Mails volume by category, by period');
+define('_MAIL_VOL_BY_CAT_REPORT_DESC', 'Mails volume by category, by period');
diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php
index c4f8916bb06..ff04cfcdcdf 100644
--- a/src/core/lang/lang-fr.php
+++ b/src/core/lang/lang-fr.php
@@ -11,6 +11,7 @@
  *
  * @author dev@maarch.org
  */
+
 define('_ACTION_ADDED', 'Action ajoutée');
 define('_ACTION_DELETED', 'Action supprimée');
 define('_ACTION_UPDATED', 'Action modifiée');
@@ -41,6 +42,7 @@ define('_DOCUMENT_NOT_FOUND', 'Document introuvable');
 define('_ENTITY_CREATION', 'Création entité');
 define('_ENTITY_MODIFICATION', 'Modification entité');
 define('_ENTITY_SUPPRESSION', 'Suppression entité');
+define('_ID', 'Identifiant');
 define('_ID_TO_DISPLAY', 'res_id');
 define('_INVALID_CLAUSE', 'Clause non valide');
 define('_INVALID_REQUEST', 'Requête non valide');
@@ -102,64 +104,10 @@ define('_REGISTERED_MAIL', 'Courrier AR');
 define('_COURIER', 'Coursier');
 define('_NUMERIC_PACKAGE', 'Pli numérique');
 define('_OTHER', 'Autre');
-
-//BEGIN ALEX
-define('_ID', 'Identifiant');
-define('_REDIRECT_TO_ACTION', 'Rediriger vers une action');
-define('_ADMIN', 'Administration');
-define('_ADV_SEARCH_MLB', 'Rechercher');
-define('_INDEXING_MLB', 'Enregistrer un courrier/doc');
-define('_SEARCH_CONTACTS', 'Rechercher un contact');
-define('_PARAM_MLB_DOCTYPES', 'Paramétrage des types de document ');
-define('_PARAM_MLB_DOCTYPES_DESC', 'Paramétrage des types de document ');
-define('_WELCOME_TEXT_LOAD', "Chargement texte page d'accueil");
-define('_QUICKLAUNCH', 'Raccourcis');
-define('_MY_CONTACTS', 'Créer des contacts depuis indexation/qualification');
-define('_MY_CONTACTS_MENU', 'Mes contacts');
-define('_CREATE_CONTACTS', 'Tous les contacts');
-define('_UPDATE_CONTACTS', 'Mise à jour contact depuis indexation/qualification');
-define('_VIEW_TECHNICAL_INFORMATIONS', 'Voir les informations techniques');
-define('_VIEW_DOC_HISTORY', "Voir l'historique des actions sur le document");
-define('_VIEW_FULL_HISTORY', "Voir l'historique complet du document");
-define('_VIEW_FULL_HISTORY_DESC', "Consulter l'historique complet des événements relatifs à l'utilisation de la GED Maarch.");
-define('_DELETE_DOCUMENT_IN_DETAIL', 'Supprimer un document dans la fiche détaillée');
-define('_EDIT_DOCUMENT_IN_DETAIL', 'Modifier un document dans la fiche détaillée');
-define('_EDIT_DOCUMENT_IN_DETAIL_DESC', 'Edit a document in detail page. Il will also depend on status setting (Index modification)');
-define('_PUT_DOC_ON_VALIDATION_FROM_DETAILS', 'Envoyer le document en validation depuis la page détails');
-define('_LOAD_STATUSES_SESSION', 'Chargement des status en session');
-define('_PARAM_AVAILABLE_STATUS_ON_GROUP_BASKETS', "Paramétrage des status d'indexation");
-define('_ADD_LINKS', 'Ajouter des liaisons');
-define('_PRINT_DETAILS_SERVICE', 'Imprimer la fiche de liaison depuis la fiche détail');
-define('_PRINT_DOC_DETAILS_FROM_LIST', 'Imprimer les fiches de liaison depuis les listes de résultats');
-define('_ATTACHMENTS_COMMENT', 'Gestion des pièces jointes');
-define('_BASKETS_COMMENT', 'Bannettes');
-define('_CASES_COMMENT', 'Affaires');
-define('_ENTITIES_COMMENT', 'Entités');
-define('_FILEPLAN_COMMENT', 'Plan de classement organisationnel');
-define('_FOLDERS_COMMENT', 'Dossiers');
-define('_FULL_TEXT', 'Plein texte');
-define('_NOTES_COMMENT', 'Notes');
-define('_NOTIFICATIONS_COMMENT', 'Notifications');
-define('_TEMPLATES_COMMENT', 'Modèles de document');
-define('_REPORTS_COMMENT', 'Statistiques');
-define('_LIFE_CYCLE_COMMENT', 'Gestion du cycle de vie');
-define('_CONTENT_MANAGEMENT_COMMENT', 'Gestion des Versions de document');
-define('_TAGS_COMMENT', 'Mots-clés');
-define('_SENDMAIL_COMMENT', 'Envoi de courriels');
-define('_THUMBNAILS_COMMENT', 'Module des miniatures');
-define('_VISA_WORKFLOW_COMMENT', 'Gestion du circuit de visa');
-define('_AVIS_WORKFLOW_COMMENT', "Gestion du circuit d'avis");
-define('_THESAURUS_COMMENT', 'Gestion du thesaurus');
-define('_THESAURUS_COMMENT', 'Thesaurus management');
-define('_EXPORT_SEDA_COMMENT', 'Export');
-define('_CONVERT_COMMENT', 'Module de conversions');
-define('_VIEW_BASKETS', 'Mes bannettes');
-define('_PRINT_SEPS', 'Impression des séparateurs');
-define('_FILEPLAN_SHORT', 'Plan de classement');
-define('_CREATE_FOLDER', 'Créer un dossier');
-define('_FOLDER_SEARCH', 'Rechercher un dossier');
-define('_VIEW_FOLDER_TREE', 'Consulter un dossier');
-define('_SAVE_NUMERIC_PACKAGE', 'Enregistrer un pli numérique');
+define('_NOTIFICATION_ALREADY_EXIST', 'Notification déjà existante');
+define('_WRONG_PSW', 'Le mot de passe actuel n\'est pas correct');
+define('_MAX_SIZE_UPLOAD_REACHED', 'Taille maximum de fichier dépassée');
+define('_PATH_OF_DOCSERVER_UNAPPROACHABLE', 'Chemin Docserver inaccessible');
 
 // LISTS
 define('_DOCUMENTS_LIST_WITH_ATTACHMENTS', 'Liste avec filtres et réponses');
@@ -217,6 +165,99 @@ define('_ADMIN_NOTIFICATIONS_DESC', "Créer et gérer des notifications aux util
 define('_TEMPLATES', 'Modèles de documents');
 define('_ADMIN_TEMPLATES_DESC', "Gérer les modèles utilisés pour les pièces jointes, les notifications, la génération de courriers, l'envoi de courriels et les notes");
 
+//SERVICES
+define('_REDIRECT_TO_ACTION', 'Rediriger vers une action');
+define('_ADMIN', 'Administration');
+define('_ADV_SEARCH_MLB', 'Rechercher');
+define('_INDEXING_MLB', 'Enregistrer un courrier/doc');
+define('_SEARCH_CONTACTS', 'Rechercher un contact');
+define('_PARAM_MLB_DOCTYPES', 'Paramétrage des types de document ');
+define('_PARAM_MLB_DOCTYPES_DESC', 'Paramétrage des types de document ');
+define('_WELCOME_TEXT_LOAD', "Chargement texte page d'accueil");
+define('_QUICKLAUNCH', 'Raccourcis');
+define('_MY_CONTACTS', 'Créer des contacts depuis indexation/qualification');
+define('_MY_CONTACTS_MENU', 'Mes contacts');
+define('_CREATE_CONTACTS', 'Tous les contacts');
+define('_UPDATE_CONTACTS', 'Mise à jour contact depuis indexation/qualification');
+define('_VIEW_TECHNICAL_INFORMATIONS', 'Voir les informations techniques');
+define('_VIEW_DOC_HISTORY', "Voir l'historique des actions sur le document");
+define('_VIEW_FULL_HISTORY', "Voir l'historique complet du document");
+define('_VIEW_FULL_HISTORY_DESC', "Consulter l'historique complet des événements relatifs à l'utilisation de la GED Maarch.");
+define('_DELETE_DOCUMENT_IN_DETAIL', 'Supprimer un document dans la fiche détaillée');
+define('_EDIT_DOCUMENT_IN_DETAIL', 'Modifier un document dans la fiche détaillée');
+define('_EDIT_DOCUMENT_IN_DETAIL_DESC', 'Edit a document in detail page. Il will also depend on status setting (Index modification)');
+define('_PUT_DOC_ON_VALIDATION_FROM_DETAILS', 'Envoyer le document en validation depuis la page détails');
+define('_LOAD_STATUSES_SESSION', 'Chargement des status en session');
+define('_PARAM_AVAILABLE_STATUS_ON_GROUP_BASKETS', "Paramétrage des status d'indexation");
+define('_ADD_LINKS', 'Ajouter des liaisons');
+define('_PRINT_DETAILS_SERVICE', 'Imprimer la fiche de liaison depuis la fiche détail');
+define('_PRINT_DOC_DETAILS_FROM_LIST', 'Imprimer les fiches de liaison depuis les listes de résultats');
+define('_ATTACHMENTS_COMMENT', 'Gestion des pièces jointes');
+define('_BASKETS_COMMENT', 'Bannettes');
+define('_CASES_COMMENT', 'Affaires');
+define('_ENTITIES_COMMENT', 'Entités');
+define('_FILEPLAN_COMMENT', 'Plan de classement organisationnel');
+define('_FOLDERS_COMMENT', 'Dossiers');
+define('_FULL_TEXT', 'Plein texte');
+define('_NOTES_COMMENT', 'Notes');
+define('_NOTIFICATIONS_COMMENT', 'Notifications');
+define('_TEMPLATES_COMMENT', 'Modèles de document');
+define('_REPORTS_COMMENT', 'Statistiques');
+define('_LIFE_CYCLE_COMMENT', 'Gestion du cycle de vie');
+define('_CONTENT_MANAGEMENT_COMMENT', 'Gestion des Versions de document');
+define('_TAGS_COMMENT', 'Mots-clés');
+define('_SENDMAIL_COMMENT', 'Envoi de courriels');
+define('_THUMBNAILS_COMMENT', 'Module des miniatures');
+define('_VISA_WORKFLOW_COMMENT', 'Gestion du circuit de visa');
+define('_AVIS_WORKFLOW_COMMENT', "Gestion du circuit d'avis");
+define('_THESAURUS_COMMENT', 'Gestion du thesaurus');
+define('_EXPORT_SEDA_COMMENT', 'Export');
+define('_CONVERT_COMMENT', 'Module de conversions');
+define('_VIEW_BASKETS', 'Mes bannettes');
+define('_PRINT_SEPS', 'Impression des séparateurs');
+define('_FILEPLAN_SHORT', 'Plan de classement');
+define('_CREATE_FOLDER', 'Créer un dossier');
+define('_FOLDER_SEARCH', 'Rechercher un dossier');
+define('_VIEW_FOLDER_TREE', 'Consulter un dossier');
+define('_SAVE_NUMERIC_PACKAGE', 'Enregistrer un pli numérique');
+define("_SELECT_FOLDER", "Sélection Dossier");
+define("_FOLDER_HISTORY", "Historique dossier");
+define("_MODIFY_FOLDER", "Modifier les index d'un dossier");
+define("_ATTACH_DOC_TO_FOLDER", "Rattacher un document à un dossier");
+define("_DELETE_FOLDER", "Supprimer un dossier");
+define("_FREEZE_FOLDER", "Geler le dossier");
+define("_CLOSE_FOLDER", "Clôturer le dossier");
+define("_NOTES_RESTRICTION", "Restreindre par défaut les notes à votre entité");
+define("_MANAGE_NOTES", "Gérer les notes");
+define('_REPORTS_DESC', 'Editions des états');
+define('_GRAPHICS_REPORTS', "Activer l'affichage graphique");
+define("_USE_MAIL_SERVICES", "Utiliser les courriels de ses services en tant qu'expéditeur");
+define("_USE_MAIL_SERVICES_DESC", "Utiliser les courriels de ses services en tant qu'expéditeur");
+define("_TAG_DEFAULT", "Mot-clé");
+define("_TAG_VIEW", "Voir les Mots-clé des documents");
+define("_TAG_VIEW_DESC", "Permet d'afficher le champ Mot-clé depuis les pages d'actions et fiche détaillée.");
+define("_CREATE_TAG", "Créer des Mots-clé depuis les pages d'actions");
+define("_CREATE_TAG_DESC", "Permet d'enregistrer à la volée des Mots-clé inexistants dans la base de données");
+define("_ADD_TAG_TO_RES", "Associer des Mots-clé disponibles pour un document");
+define("_ADD_TAG_TO_RES_DESC", "Permet d'associer des Mots-clé à un document grâce au champ Mot-clé depuis les pages d'actions et fiche détaillée");
+define("_PRIVATE_TAGS", "Lier les Mots-clé à l'entité de l'utilisateur (Niveau direction)");
+define("_PRIVATE_TAGS_DESC", "L'utilisateur ne verra que les Mots-clé qui ont été restreints à sa direction (l'ajout / modification associera le mot clé automatiquement à sa direction).");
+define("_THESAURUS_VIEW", "Afficher le thésaurus dans les pages de traitement");
+define("_THESAURUS_VIEW_DESC", "Permet de voir le(s) terme(s) qui sont associés aux différents documents");
+define("_ADD_THESAURUS_TO_RES", "Pouvoir associer des termes aux différents documents");
+define("_ADD_THESAURUS_TO_RES_DESC", "Permet de pouvoir utiliser les termes disponibles du thésaurus afin de référencer les documents");
+define('_CONFIG_VISA_WORKFLOW', 'Configuration du circuit de visa');
+define('_CONFIG_VISA_WORKFLOW_DESC', 'Permet de configurer le circuit de visa que devra prendre le courrier');
+define('_CONFIG_VISA_WORKFLOW_IN_DETAIL', 'Configuration du circuit de visa depuis la fiche détaillée');
+define('_VISA_ANSWERS', 'Viser les projets de réponse');
+define('_VISA_ANSWERS_DESC', 'Permet de viser les projets de réponse');
+define('_SIGN_DOCS', 'Signer les documents');
+define('_MODIFY_VISA_IN_SIGNATUREBOOK', 'Modifier le viseur en cours depuis le parapheur');
+define('_MODIFY_VISA_IN_SIGNATUREBOOK_DESC', 'Utile si le parahpeur sert en tant que parapheur de supervision');
+define('_PRINT_FOLDER_DOC', 'Imprimer le dossier complet');
+define('_USE_DATE_IN_SIGNBLOCK', 'Inclure la date dans la griffe de signature');
+define('_USE_DATE_IN_SIGNBLOCK_DESC', "La date de signature aparaîtra en haut de la griffe de signature (avec la ville si celle-ci a été inscrite dans le service racine de l'application).");
+
 // ACTIONS
 define('_REDIRECTION', 'Rediriger');
 define('_REDIRECTION_DESC', 'Ouvre une modal permettant de choisir un nouvel utilisateur traitant OU de redéfinir le service traitant avec une nouvelle liste de diffusion.');
@@ -281,7 +322,6 @@ define("_CONFIG_AVIS_WORKFLOW_IN_DETAIL", "Configuration du circuit d'avis depui
 define("_CONFIG_AVIS_WORKFLOW_IN_DETAIL_DESC", "Permet de définir le circuit directement depuis la fiche détaillée du courrier");
 define("_AVIS_ANSWERS", "Donner son avis");
 define("_AVIS_ANSWERS_DESC", "Permet à ce groupe d'apparaître dans la liste des personnes Conseillers (circuit d'avis)");
-define("_VIEW_BASKETS", "Mes bannettes");
 define("_VIEW_BASKETS_DESC", "Mes bannettes");
 define("_UPDATE_CASE", "Mise à jour d'affaires");
 define("_JOIN_RES_CASE", "Attacher des courriers aux affaires");
@@ -298,58 +338,20 @@ define("_PUT_DOC_IN_FILEPLAN", "Classer des documents");
 define("_PUT_DOC_IN_FILEPLAN_COMMENT", "Classer des documents dans le plan de classement organisationnel");
 define("_PERSONNAL_FILEPLAN", "Plan de classement personnel");
 
-
-//FOLDER
-define("_SELECT_FOLDER", "Sélection Dossier");
-define("_FOLDER_HISTORY", "Historique dossier");
-define("_MODIFY_FOLDER", "Modifier les index d'un dossier");
-define("_ATTACH_DOC_TO_FOLDER", "Rattacher un document à un dossier");
-define("_DELETE_FOLDER", "Supprimer un dossier");
-define("_FREEZE_FOLDER", "Geler le dossier");
-define("_CLOSE_FOLDER", "Clôturer le dossier");
-
-//NOTES
-define("_NOTES_RESTRICTION", "Restreindre par défaut les notes à votre entité");
-define("_MANAGE_NOTES", "Gérer les notes");
-
-//NOTIFICATIONS
-define("_NOTIFICATIONS", "Notifications");
-
-//REPORTS
-define('_REPORTS', 'Statistiques');
-define('_REPORTS_DESC', 'Editions des états');
-define('_GRAPHICS_REPORTS', "Activer l'affichage graphique");
-
-//SENDMAIL
-define("_USE_MAIL_SERVICES", "Utiliser les courriels de ses services en tant qu'expéditeur");
-define("_USE_MAIL_SERVICES_DESC", "Utiliser les courriels de ses services en tant qu'expéditeur");
-
-//TAGS
-define("_TAG_DEFAULT", "Mot-clé");
-define("_TAG_VIEW", "Voir les ".strtolower(_TAGS_DEFAULT)." des documents");
-define("_TAG_VIEW_DESC", "Permet d'afficher le champ ".strtolower(_TAGS_DEFAULT)." depuis les pages d'actions et fiche détaillée.");
-define("_CREATE_TAG", "Créer des ".strtolower(_TAGS_DEFAULT)." depuis les pages d'actions");
-define("_CREATE_TAG_DESC", "Permet d'enregistrer à la volée des ".strtolower(_TAGS_DEFAULT)." inexistants dans la base de données");
-define("_ADD_TAG_TO_RES", "Associer des ".strtolower(_TAGS_DEFAULT)." disponibles pour un document");
-define("_ADD_TAG_TO_RES_DESC", "Permet d'associer des ".strtolower(_TAGS_DEFAULT)." à un document grâce au champ ".strtolower(_TAGS_DEFAULT)." depuis les pages d'actions et fiche détaillée");
-define("_PRIVATE_TAGS", "Lier les ".strtolower(_TAGS_DEFAULT)." à l'entité de l'utilisateur (Niveau direction)");
-define("_PRIVATE_TAGS_DESC", "L'utilisateur ne verra que les ".strtolower(_TAGS_DEFAULT)." qui ont été restreints à sa direction (l'ajout / modification associera le mot clé automatiquement à sa direction).");
-
-//THESAURUS
-define("_THESAURUS_VIEW", "Afficher le thésaurus dans les pages de traitement");
-define("_THESAURUS_VIEW_DESC", "Permet de voir le(s) terme(s) qui sont associés aux différents documents");
-define("_ADD_THESAURUS_TO_RES", "Pouvoir associer des termes aux différents documents");
-define("_ADD_THESAURUS_TO_RES_DESC", "Permet de pouvoir utiliser les termes disponibles du thésaurus afin de référencer les documents");
-
-//VISA
-define('_CONFIG_VISA_WORKFLOW', 'Configuration du circuit de visa');
-define('_CONFIG_VISA_WORKFLOW_DESC', 'Permet de configurer le circuit de visa que devra prendre le courrier');
-define('_CONFIG_VISA_WORKFLOW_IN_DETAIL', 'Configuration du circuit de visa depuis la fiche détaillée');
-define('_VISA_ANSWERS', 'Viser les projets de réponse');
-define('_VISA_ANSWERS_DESC', 'Permet de viser les projets de réponse');
-define('_SIGN_DOCS', 'Signer les documents');
-define('_MODIFY_VISA_IN_SIGNATUREBOOK', 'Modifier le viseur en cours depuis le parapheur');
-define('_MODIFY_VISA_IN_SIGNATUREBOOK_DESC', 'Utile si le parahpeur sert en tant que parapheur de supervision');
-define('_PRINT_FOLDER_DOC', 'Imprimer le dossier complet');
-define('_USE_DATE_IN_SIGNBLOCK', 'Inclure la date dans la griffe de signature');
-define('_USE_DATE_IN_SIGNBLOCK_DESC', "La date de signature aparaîtra en haut de la griffe de signature (avec la ville si celle-ci a été inscrite dans le service racine de l'application).");
\ No newline at end of file
+// REPORTS
+define('_FOLDER_VIEW_STAT', 'Nombre de dossiers consultés');
+define('_ENTITY_VOL_STAT', 'Volume des courriers par entité');
+define('_ENTITY_VOL_STAT_DESC', 'Permet d\'afficher le nombre de courriers enregistrés par service.');
+define('_RESPONSE_RATE_BY_ENTITIES', 'Taux de réponse par entité');
+define('_RESPONSE_RATE_BY_ENTITIES_DESC', 'Permet d\'afficher le pourcentage de courrier dont une réponse a été effectuée. Cette statistique se base sur le nombre de courriers dont une date de départ a été inscrite (il faut utiliser le champ custom_d1)');
+define('_ENTITY_LATE_MAIL', 'Volume de courriers en retard par entité');
+define('_ENTITY_PROCESS_DELAY', 'Délai moyen de traitement par entité');
+define('_USERS_LOGS', 'Liste des accès à l\'application par agent');
+define('_PROCESS_DELAY_REPORT', 'Délai moyen de traitement par typologie');
+define('_PROCESS_DELAY_REPORT_DESC', 'Permet d\'afficher le délai (en jour) de la création jusqu\'à la clôture d\'un courrier.');
+define('_PROCESS_DELAY_GENERIC_EVALUATION_REPORT', 'Délai moyen de traitement par période');
+define('_PROCESS_DELAY_GENERIC_EVALUATION_REPORT_DESC', 'Permet d\'afficher le délai (en jour) de la création jusqu\'à la clôture d\'un courrier.');
+define('_MAIL_TYPOLOGY_REPORT', 'Volume de courriers par typologie');
+define('_MAIL_TYPOLOGY_REPORT_DESC', 'Permet d\'afficher le nombre de courriers enregistrés par type de document.');
+define('_MAIL_VOL_BY_CAT_REPORT', 'Volume de courriers par catégorie');
+define('_MAIL_VOL_BY_CAT_REPORT_DESC', 'Permet d\'afficher le nombre de courriers enregistrés par catégorie (arrivé, départ, etc.).');
diff --git a/src/core/models/ValidatorModel.php b/src/core/models/ValidatorModel.php
index e48cebd8611..03b28cc8129 100755
--- a/src/core/models/ValidatorModel.php
+++ b/src/core/models/ValidatorModel.php
@@ -10,7 +10,6 @@
 /**
 * @brief Validator Model
 * @author dev@maarch.org
-* @ingroup core
 */
 
 namespace SrcCore\models;
-- 
GitLab