From e480f4c58b7a753ab2212b681ebbeb07fc56676b Mon Sep 17 00:00:00 2001
From: Jean-Philippe Metivier <jean-philippe.metivier@unicaen.fr>
Date: Fri, 16 Dec 2022 14:43:49 +0100
Subject: [PATCH] =?UTF-8?q?Vers=20PHP=208.0=20+=20retrait=20de=20certaines?=
 =?UTF-8?q?=20dependance=20=C3=A0=20unicaen/app?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 config/unicaen-indicateur.global.php.dist     |  31 ++---
 documentation/02_privileges.sql               |   4 +-
 .../Controller/AbonnementController.php       |  16 +--
 .../AbonnementControllerFactory.php           |  11 +-
 .../Controller/IndexController.php            |  11 +-
 .../Controller/IndexControllerFactory.php     |  10 +-
 .../Controller/IndicateurController.php       |  28 ++--
 .../IndicateurControllerFactory.php           |  11 +-
 .../Entity/Db/Abonnement.php                  |  68 ++--------
 .../Entity/Db/Indicateur.php                  | 128 ++++--------------
 .../Indicateur/IndicateurFormAwareTrait.php   |  19 +--
 .../Form/Indicateur/IndicateurFormFactory.php |  12 +-
 .../Form/Indicateur/IndicateurHydrator.php    |   2 +-
 .../Indicateur/IndicateurHydratorFactory.php  |   3 +-
 .../Privilege/AbonnementPrivileges.php        |   6 +-
 .../Privilege/IndicateurPrivileges.php        |   6 +-
 .../Service/Abonnement/AbonnementService.php  |  66 +++------
 .../AbonnementServiceAwareTrait.php           |  14 +-
 .../Abonnement/AbonnementServiceFactory.php   |   9 +-
 .../Service/Indicateur/IndicateurService.php  |  34 +++--
 .../IndicateurServiceAwareTrait.php           |  14 +-
 .../Indicateur/IndicateurServiceFactory.php   |   9 +-
 22 files changed, 187 insertions(+), 325 deletions(-)

diff --git a/config/unicaen-indicateur.global.php.dist b/config/unicaen-indicateur.global.php.dist
index 823aef5..a590ee5 100644
--- a/config/unicaen-indicateur.global.php.dist
+++ b/config/unicaen-indicateur.global.php.dist
@@ -1,20 +1,19 @@
 <?php
 
 return [
-
-//    'navigation'      => [
-//        'default' => [
-//            'home' => [
-//                'pages' => [
-//                    'indicateur' => [
-//                        'label' => 'Mes indicateurs',
-//                        'route' => 'mes-indicateurs',
-//                        'resource' => PrivilegeController::getResourceId(IndexController::class, 'index'),
-//                        'order'    => 10001,
-//                        'icon' => 'fas fa-angle-right',
-//                    ],
-//                ],
-//            ],
-//        ],
-//    ],
+    'navigation'      => [
+        'default' => [
+            'home' => [
+                'pages' => [
+                    'mes-indicateurs' => [
+                        'label' => 'Mes indicateurs',
+                        'route' => 'mes-indicateurs',
+                        'resource' => PrivilegeController::getResourceId(IndexController::class, 'index'),
+                        'order'    => 10001,
+                        'icon' => 'fas fa-angle-right',
+                    ],
+                ],
+            ],
+        ],
+    ],
 ];
\ No newline at end of file
diff --git a/documentation/02_privileges.sql b/documentation/02_privileges.sql
index 9d6f233..e2ea15d 100644
--- a/documentation/02_privileges.sql
+++ b/documentation/02_privileges.sql
@@ -1,5 +1,5 @@
 INSERT INTO unicaen_privilege_categorie (code, libelle, ordre, namespace)
-    VALUES ('indicateur', 'Gestions des indicateurs', 800, 'Indicateur\Provider\Privilege');
+    VALUES ('indicateur', 'Gestions des indicateurs', 800, 'UnicaenIndicateur\Provider\Privilege');
 INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
 WITH d(code, lib, ordre) AS (
     SELECT 'afficher-indicateur', 'Afficher un indicateur', 1   UNION
@@ -11,7 +11,7 @@ FROM d
 JOIN unicaen_privilege_categorie cp ON cp.CODE = 'indicateur';
 
 INSERT INTO unicaen_privilege_categorie (code, libelle, ordre, namespace)
-VALUES ('abonnement', 'Gestions des abonnement', 810, 'Indicateur\Provider\Privilege');
+VALUES ('abonnement', 'Gestions des abonnement', 810, 'UnicaenIndicateur\Provider\Privilege');
 INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
 WITH d(code, lib, ordre) AS (
     SELECT 'afficher-abonnement', 'Afficher un abonnement', 4   UNION
diff --git a/src/UnicaenIndicateur/Controller/AbonnementController.php b/src/UnicaenIndicateur/Controller/AbonnementController.php
index f038c8f..4a53f7f 100644
--- a/src/UnicaenIndicateur/Controller/AbonnementController.php
+++ b/src/UnicaenIndicateur/Controller/AbonnementController.php
@@ -2,8 +2,7 @@
 
 namespace UnicaenIndicateur\Controller;
 
-use DateInterval;
-use DateTime;
+use Laminas\Http\Response;
 use UnicaenIndicateur\Entity\Db\Abonnement;
 use UnicaenIndicateur\Service\Abonnement\AbonnementServiceAwareTrait;
 use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait;
@@ -13,10 +12,10 @@ use Laminas\View\Model\ViewModel;
 
 class AbonnementController extends AbstractActionController {
     use AbonnementServiceAwareTrait;
-    use UnicaenIndicateurServiceAwareTrait;
+    use IndicateurServiceAwareTrait;
     use UserServiceAwareTrait;
 
-    public function indexAction()
+    public function indexAction() : ViewModel
     {
         $abonnements = [];
 
@@ -25,7 +24,7 @@ class AbonnementController extends AbstractActionController {
         ]);
     }
 
-    public function souscrireAction()
+    public function souscrireAction(): Response
     {
         $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
         $user = $this->getUserService()->getConnectedUser();
@@ -39,7 +38,7 @@ class AbonnementController extends AbstractActionController {
         return $this->redirect()->toRoute('indicateurs', [], [], true);
     }
 
-    public function resilierAction()
+    public function resilierAction(): Response
     {
         $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
         $user = $this->getUserService()->getConnectedUser();
@@ -52,15 +51,14 @@ class AbonnementController extends AbstractActionController {
         return $this->redirect()->toRoute('indicateurs', [], [], true);
     }
 
-    public function notifierAction()
+    public function notifierAction(): Response
     {
         $this->getAbonnementService()->notifyAbonnements();
         return $this->redirect()->toRoute('indicateurs', [], [], true);
     }
 
-    public function notifierConsoleAction()
+    public function notifierConsoleAction() : void
     {
         $this->getAbonnementService()->notifyAbonnements();
-        exit();
     }
 }
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Controller/AbonnementControllerFactory.php b/src/UnicaenIndicateur/Controller/AbonnementControllerFactory.php
index 508e1c2..3797e5f 100644
--- a/src/UnicaenIndicateur/Controller/AbonnementControllerFactory.php
+++ b/src/UnicaenIndicateur/Controller/AbonnementControllerFactory.php
@@ -2,6 +2,8 @@
 
 namespace UnicaenIndicateur\Controller;
 
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
 use UnicaenIndicateur\Service\Abonnement\AbonnementService;
 use UnicaenIndicateur\Service\Indicateur\IndicateurService;
 use Interop\Container\ContainerInterface;
@@ -9,7 +11,13 @@ use UnicaenUtilisateur\Service\User\UserService;;
 
 class AbonnementControllerFactory {
 
-    public function __invoke(ContainerInterface $container)
+    /**
+     * @param ContainerInterface $container
+     * @return AbonnementController
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container): AbonnementController
     {
         /**
          * @var AbonnementService $abonnementService
@@ -20,7 +28,6 @@ class AbonnementControllerFactory {
         $indicateurService = $container->get(IndicateurService::class);
         $userService = $container->get(UserService::class);
 
-        /** @var AbonnementController $controller */
         $controller = new AbonnementController();
         $controller->setAbonnementService($abonnementService);
         $controller->setIndicateurService($indicateurService);
diff --git a/src/UnicaenIndicateur/Controller/IndexController.php b/src/UnicaenIndicateur/Controller/IndexController.php
index ae37de7..6d163f4 100644
--- a/src/UnicaenIndicateur/Controller/IndexController.php
+++ b/src/UnicaenIndicateur/Controller/IndexController.php
@@ -2,16 +2,16 @@
 
 namespace UnicaenIndicateur\Controller;
 
+use Laminas\Mvc\Controller\AbstractActionController;
+use Laminas\View\Model\ViewModel;
 use UnicaenIndicateur\Entity\Db\Abonnement;
 use UnicaenIndicateur\Service\Abonnement\AbonnementServiceAwareTrait;
 use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait;
 use UnicaenUtilisateur\Service\User\UserServiceAwareTrait;
-use Laminas\Mvc\Controller\AbstractActionController;
-use Laminas\View\Model\ViewModel;
 
 class IndexController extends AbstractActionController {
     use AbonnementServiceAwareTrait;
-    use UnicaenIndicateurServiceAwareTrait;
+    use IndicateurServiceAwareTrait;
     use UserServiceAwareTrait;
 
     public function indexAction() : ViewModel
@@ -32,7 +32,7 @@ class IndexController extends AbstractActionController {
         ]);
     }
 
-    public function abonnementAction()
+    public function abonnementAction() : ViewModel
     {
         $user = $this->getUserService()->getConnectedUser();
         $indicateurs = $this->getIndicateurService()->getIndicateurs();
@@ -48,11 +48,8 @@ class IndexController extends AbstractActionController {
                 $abonnement = new Abonnement();
                 $abonnement->setUser($user);
                 $abonnement->setIndicateur($indicateur);
-//                $abonnement->setFrequence('P1W');
                 $this->getAbonnementService()->create( $abonnement );
             }
-
-            exit();
         }
 
         return new ViewModel([
diff --git a/src/UnicaenIndicateur/Controller/IndexControllerFactory.php b/src/UnicaenIndicateur/Controller/IndexControllerFactory.php
index a0c07c8..253147e 100644
--- a/src/UnicaenIndicateur/Controller/IndexControllerFactory.php
+++ b/src/UnicaenIndicateur/Controller/IndexControllerFactory.php
@@ -2,13 +2,21 @@
 
 namespace UnicaenIndicateur\Controller;
 
+use Interop\Container\ContainerInterface;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
 use UnicaenIndicateur\Service\Abonnement\AbonnementService;
 use UnicaenIndicateur\Service\Indicateur\IndicateurService;
-use Interop\Container\ContainerInterface;
 use UnicaenUtilisateur\Service\User\UserService;
 
 class IndexControllerFactory {
 
+    /**
+     * @param ContainerInterface $container
+     * @return IndexController
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
     public function __invoke(ContainerInterface $container) : IndexController
     {
         /**
diff --git a/src/UnicaenIndicateur/Controller/IndicateurController.php b/src/UnicaenIndicateur/Controller/IndicateurController.php
index 0b92d05..819a298 100644
--- a/src/UnicaenIndicateur/Controller/IndicateurController.php
+++ b/src/UnicaenIndicateur/Controller/IndicateurController.php
@@ -3,6 +3,7 @@
 namespace UnicaenIndicateur\Controller;
 
 use DateTime;
+use Laminas\Http\Response;
 use UnicaenIndicateur\Entity\Db\Indicateur;
 use UnicaenIndicateur\Form\Indicateur\IndicateurFormAwareTrait;
 use UnicaenIndicateur\Service\Abonnement\AbonnementServiceAwareTrait;
@@ -14,13 +15,13 @@ use Laminas\Mvc\Controller\AbstractActionController;
 use Laminas\View\Model\ViewModel;
 
 class IndicateurController extends AbstractActionController {
-    use UnicaenIndicateurServiceAwareTrait;
+    use IndicateurServiceAwareTrait;
     use UserServiceAwareTrait;
     use AbonnementServiceAwareTrait;
 
-    use UnicaenIndicateurFormAwareTrait;
+    use IndicateurFormAwareTrait;
 
-    public function indexAction()
+    public function indexAction() : ViewModel
     {
         $indicateurs = $this->getIndicateurService()->getIndicateurs();
         $user = $this->getUserService()->getConnectedUser();
@@ -52,14 +53,14 @@ class IndicateurController extends AbstractActionController {
         ]);
     }
 
-    public function rafraichirAction()
+    public function rafraichirAction() : Response
     {
         $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
         $this->getIndicateurService()->refresh($indicateur);
         return $this->redirect()->toRoute('indicateur/afficher', ['indicateur' => $indicateur->getId()], [], true);
     }
 
-    public function creerAction()
+    public function creerAction() : ViewModel
     {
         $indicateur = new Indicateur();
         $form = $this->getIndicateurForm();
@@ -72,13 +73,14 @@ class IndicateurController extends AbstractActionController {
             $data = $request->getPost();
             $form->setData($data);
             if ($form->isValid()) {
+                $indicateur->setDernierRafraichissement(new DateTime());
                 $this->getIndicateurService()->create($indicateur);
                 $this->getIndicateurService()->createView($indicateur);
             }
         }
 
         $vm = new ViewModel();
-        $vm->setTemplate('indicateur/default/default-form');
+        $vm->setTemplate('unicaen-indicateur/default/default-form');
         $vm->setVariables([
             'title' => 'Création d\'un nouvel indicateur',
             'form'  => $form,
@@ -86,7 +88,7 @@ class IndicateurController extends AbstractActionController {
         return $vm;
     }
 
-    public function modifierAction()
+    public function modifierAction(): ViewModel
     {
         $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
         $form = $this->getIndicateurForm();
@@ -105,7 +107,7 @@ class IndicateurController extends AbstractActionController {
         }
 
         $vm = new ViewModel();
-        $vm->setTemplate('indicateur/default/default-form');
+        $vm->setTemplate('unicaen-indicateur/default/default-form');
         $vm->setVariables([
             'title' => 'Modification d\'un indicateur',
             'form'  => $form,
@@ -113,7 +115,7 @@ class IndicateurController extends AbstractActionController {
         return $vm;
     }
 
-    public function detruireAction()
+    public function detruireAction(): Response
     {
         $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
         $this->getIndicateurService()->dropView($indicateur);
@@ -121,7 +123,7 @@ class IndicateurController extends AbstractActionController {
         return $this->redirect()->toRoute('indicateurs', [], [], true);
     }
 
-    public function exporterAction()
+    public function exporterAction(): CsvModel
     {
         $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
         $date = new DateTime();
@@ -139,16 +141,16 @@ class IndicateurController extends AbstractActionController {
         return $CSV;
     }
 
-    public function rafraichirTousAction()
+    public function rafraichirTousAction() : void
     {
         $indicateurs = $this->getIndicateurService()->getIndicateurs();
         foreach ($indicateurs as $indicateur) {
             $this->getIndicateurService()->refresh($indicateur);
         }
-        exit();
     }
 
-    public function rafraichirConsoleAction() {
+    public function rafraichirConsoleAction() : void
+    {
         $indicateurs = $this->getIndicateurService()->getIndicateurs();
         foreach ($indicateurs as $indicateur) {
             $this->getIndicateurService()->refresh($indicateur);
diff --git a/src/UnicaenIndicateur/Controller/IndicateurControllerFactory.php b/src/UnicaenIndicateur/Controller/IndicateurControllerFactory.php
index 249ca58..bcf2ca0 100644
--- a/src/UnicaenIndicateur/Controller/IndicateurControllerFactory.php
+++ b/src/UnicaenIndicateur/Controller/IndicateurControllerFactory.php
@@ -2,6 +2,8 @@
 
 namespace UnicaenIndicateur\Controller;
 
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
 use UnicaenIndicateur\Form\Indicateur\IndicateurForm;
 use UnicaenIndicateur\Service\Abonnement\AbonnementService;
 use UnicaenIndicateur\Service\Indicateur\IndicateurService;
@@ -10,7 +12,13 @@ use UnicaenUtilisateur\Service\User\UserService;;
 
 class IndicateurControllerFactory {
 
-    public function __invoke(ContainerInterface $container)
+    /**
+     * @param ContainerInterface $container
+     * @return IndicateurController
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container) : IndicateurController
     {
         /**
          * @var AbonnementService $abonnementService
@@ -26,7 +34,6 @@ class IndicateurControllerFactory {
          */
         $indicateurForm = $container->get('FormElementManager')->get(IndicateurForm::class);
 
-        /** @var IndicateurController $controller */
         $controller = new IndicateurController();
         $controller->setAbonnementService($abonnementService);
         $controller->setIndicateurService($indicateurService);
diff --git a/src/UnicaenIndicateur/Entity/Db/Abonnement.php b/src/UnicaenIndicateur/Entity/Db/Abonnement.php
index abdd862..5de4f48 100644
--- a/src/UnicaenIndicateur/Entity/Db/Abonnement.php
+++ b/src/UnicaenIndicateur/Entity/Db/Abonnement.php
@@ -7,95 +7,55 @@ use UnicaenUtilisateur\Entity\Db\User;
 
 class Abonnement {
 
-    /** @var integer */
-    private $id;
-    /** @var User */
-    private $user;
-    /** @var Indicateur */
-    private $indicateur;
-    /** @var string */
-    private $frequence;
-    /** @var DateTime */
-    private $dernierEnvoi;
+    private ?int $id = null;
+    private ?User $user = null;
+    private ?Indicateur $indicateur = null;
+    private ?string $frequence = null;
+    private ?DateTime $dernierEnvoi = null;
 
-    /**
-     * @return int
-     */
-    public function getId()
+    public function getId() : ?int
     {
         return $this->id;
     }
 
-    /**
-     * @return User
-     */
-    public function getUser()
+    public function getUser() : ?User
     {
         return $this->user;
     }
 
-    /**
-     * @param User $user
-     * @return Abonnement
-     */
-    public function setUser($user)
+    public function setUser(?User $user) : void
     {
         $this->user = $user;
-        return $this;
     }
 
-    /**
-     * @return Indicateur
-     */
-    public function getIndicateur()
+    public function getIndicateur() : ?Indicateur
     {
         return $this->indicateur;
     }
 
-    /**
-     * @param Indicateur $indicateur
-     * @return Abonnement
-     */
-    public function setIndicateur($indicateur)
+    public function setIndicateur(?Indicateur $indicateur) : void
     {
         $this->indicateur = $indicateur;
-        return $this;
     }
 
-    /**
-     * @return string
-     */
-    public function getFrequence()
+    public function getFrequence() : ?string
     {
         return $this->frequence;
     }
 
-    /**
-     * @param string $frequence
-     * @return Abonnement
-     */
-    public function setFrequence($frequence)
+    public function setFrequence(?string $frequence) : void
     {
         $this->frequence = $frequence;
-        return $this;
     }
 
-    /**
-     * @return DateTime
-     */
-    public function getDernierEnvoi()
+    public function getDernierEnvoi() : ?DateTime
     {
         return $this->dernierEnvoi;
     }
 
-    /**
-     * @param DateTime $denierEnvoi
-     * @return Abonnement
-     */
-    public function setDernierEnvoi($denierEnvoi)
+    public function setDernierEnvoi(?DateTime $denierEnvoi) : void
     {
         $this->dernierEnvoi = $denierEnvoi;
-        return $this;
     }
 
 
diff --git a/src/UnicaenIndicateur/Entity/Db/Indicateur.php b/src/UnicaenIndicateur/Entity/Db/Indicateur.php
index 67f197c..87189b9 100644
--- a/src/UnicaenIndicateur/Entity/Db/Indicateur.php
+++ b/src/UnicaenIndicateur/Entity/Db/Indicateur.php
@@ -4,6 +4,7 @@ namespace UnicaenIndicateur\Entity\Db;
 
 use DateTime;
 use Doctrine\Common\Collections\ArrayCollection;
+use Doctrine\Common\Collections\Collection;
 
 class Indicateur {
 
@@ -12,180 +13,105 @@ class Indicateur {
     const ENTITY_LIBRE = 'Libre';
     const ENTITY_ADAPTATIF = 'Adaptatif';
 
-    /** @var integer */
-    private $id;
-    /** @var string */
-    private $titre;
-    /** @var string */
-    private $description;
-    /** @var string */
-    private $requete;
-    /** @var DateTime */
-    private $dernierRafraichissement;
-    /** @var string */
-    private $viewId;
-    /** @var string */
-    private $entity;
-
-    /** @var ArrayCollection (Abonnement) */
-    private $abonnements;
+    private ?int $id = null;
+    private ?string $titre = null;
+    private ?string $description = null;
+    private ?string $requete = null;
+    private ?DateTime $dernierRafraichissement = null;
+    private ?string $viewId = null;
+    private ?string $entity = null;
+    private Collection $abonnements;
 
     public function __construct()
     {
         $this->abonnements = new ArrayCollection();
     }
 
-    /**
-     * @return int
-     */
-    public function getId()
+    public function getId() : ?int
     {
         return $this->id;
     }
 
-    /**
-     * @return string
-     */
-    public function getTitre()
+    public function getTitre() : string
     {
         return $this->titre;
     }
 
-    /**
-     * @param string $titre
-     * @return Indicateur
-     */
-    public function setTitre($titre)
+    public function setTitre(?string $titre) : void
     {
         $this->titre = $titre;
-        return $this;
     }
 
-    /**
-     * @return string
-     */
-    public function getDescription()
+    public function getDescription() : string
     {
         return $this->description;
     }
 
-    /**
-     * @param string $description
-     * @return Indicateur
-     */
-    public function setDescription($description)
+    public function setDescription(?string $description) : void
     {
         $this->description = $description;
-        return $this;
     }
 
-    /**
-     * @return string
-     */
-    public function getRequete()
+    public function getRequete() : string
     {
         return $this->requete;
     }
 
-    /**
-     * @param string $requete
-     * @return Indicateur
-     */
-    public function setRequete($requete)
+    public function setRequete(?string $requete) : void
     {
         $this->requete = $requete;
-        return $this;
     }
 
-    /**
-     * @return DateTime
-     */
-    public function getDernierRafraichissement()
+    public function getDernierRafraichissement() : ?DateTime
     {
         return $this->dernierRafraichissement;
     }
 
-    /**
-     * @param DateTime $dernierRafraichissement
-     * @return Indicateur
-     */
-    public function setDernierRafraichissement($dernierRafraichissement)
+    public function setDernierRafraichissement(?DateTime $dernierRafraichissement) : void
     {
         $this->dernierRafraichissement = $dernierRafraichissement;
-        return $this;
     }
 
-    /**
-     * @return string
-     */
-    public function getViewId()
+    public function getViewId() : string
     {
         return $this->viewId;
     }
 
-    /**
-     * @param string $viewId
-     * @return Indicateur
-     */
-    public function setViewId($viewId)
+    public function setViewId(?string $viewId) : void
     {
         $this->viewId = $viewId;
-        return $this;
     }
 
-    /**
-     * @return string
-     */
-    public function getEntity()
+    public function getEntity() : ?string
     {
         return $this->entity;
     }
 
-    /**
-     * @param string $entity
-     * @return Indicateur
-     */
-    public function setEntity($entity)
+    public function setEntity(?string $entity) : void
     {
         $this->entity = $entity;
-        return $this;
     }
 
     /**
      * @return Abonnement[]
      */
-    public function getAbonnements()
+    public function getAbonnements() : array
     {
         return $this->abonnements->toArray();
     }
 
-    /**
-     * @param Abonnement $abonnement
-     * @return Indicateur
-     */
-    public function addAbonnement($abonnement)
+    public function addAbonnement(Abonnement $abonnement) : void
     {
         $this->abonnements->add($abonnement);
-        return $this;
     }
 
-    /**
-     * @param Abonnement $abonnement
-     * @return Indicateur
-     */
-    public function removeAbonnement($abonnement)
+    public function removeAbonnement(Abonnement $abonnement) : void
     {
         $this->abonnements->removeElement($abonnement);
-        return $this;
     }
 
-    /**
-     * @param Abonnement $abonnement
-     * @return Indicateur
-     */
-    public function hasAbonnement($abonnement)
+    public function hasAbonnement(Abonnement $abonnement) : bool
     {
-        $this->abonnements->contains($abonnement);
-        return $this;
+        return $this->abonnements->contains($abonnement);
     }
 }
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Form/Indicateur/IndicateurFormAwareTrait.php b/src/UnicaenIndicateur/Form/Indicateur/IndicateurFormAwareTrait.php
index 6265346..c513e1b 100644
--- a/src/UnicaenIndicateur/Form/Indicateur/IndicateurFormAwareTrait.php
+++ b/src/UnicaenIndicateur/Form/Indicateur/IndicateurFormAwareTrait.php
@@ -2,28 +2,19 @@
 
 namespace UnicaenIndicateur\Form\Indicateur;
 
-trait IndicateurFormAwareTrait {
+trait IndicateurFormAwareTrait
+{
 
-    /** @var IndicateurForm */
-    private $indicateurForm;
+    private IndicateurForm $indicateurForm;
 
-    /**
-     * @return IndicateurForm
-     */
-    public function getIndicateurForm()
+    public function getIndicateurForm() : IndicateurForm
     {
         return $this->indicateurForm;
     }
 
-    /**
-     * @param IndicateurForm $indicateurForm
-     * @return IndicateurForm
-     */
-    public function setIndicateurForm($indicateurForm)
+    public function setIndicateurForm(IndicateurForm $indicateurForm) : void
     {
         $this->indicateurForm = $indicateurForm;
-        return $this->indicateurForm;
     }
 
-
 }
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Form/Indicateur/IndicateurFormFactory.php b/src/UnicaenIndicateur/Form/Indicateur/IndicateurFormFactory.php
index f41c3e3..983dff5 100644
--- a/src/UnicaenIndicateur/Form/Indicateur/IndicateurFormFactory.php
+++ b/src/UnicaenIndicateur/Form/Indicateur/IndicateurFormFactory.php
@@ -3,16 +3,22 @@
 namespace UnicaenIndicateur\Form\Indicateur;
 
 use Interop\Container\ContainerInterface;
-use Laminas\Form\FormElementManager;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
 class IndicateurFormFactory {
 
-    public function __invoke(ContainerInterface $container)
+    /**
+     * @param ContainerInterface $container
+     * @return IndicateurForm
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
+     */
+    public function __invoke(ContainerInterface $container) : IndicateurForm
     {
         /** @var IndicateurHydrator $hydrator */
         $hydrator = $container->get('HydratorManager')->get(IndicateurHydrator::class);
 
-        /** @var IndicateurForm $form */
         $form = new IndicateurForm();
         $form->setHydrator($hydrator);
         $form->init();
diff --git a/src/UnicaenIndicateur/Form/Indicateur/IndicateurHydrator.php b/src/UnicaenIndicateur/Form/Indicateur/IndicateurHydrator.php
index c4dc6a1..cbc9694 100644
--- a/src/UnicaenIndicateur/Form/Indicateur/IndicateurHydrator.php
+++ b/src/UnicaenIndicateur/Form/Indicateur/IndicateurHydrator.php
@@ -28,7 +28,7 @@ class IndicateurHydrator implements HydratorInterface {
      * @param Indicateur $object
      * @return Indicateur
      */
-    public function hydrate(array $data, $object)
+    public function hydrate(array $data, $object) : object
     {
         $object->setTitre($data['libelle']);
         $object->setDescription($data['description']);
diff --git a/src/UnicaenIndicateur/Form/Indicateur/IndicateurHydratorFactory.php b/src/UnicaenIndicateur/Form/Indicateur/IndicateurHydratorFactory.php
index 3318898..68a68de 100644
--- a/src/UnicaenIndicateur/Form/Indicateur/IndicateurHydratorFactory.php
+++ b/src/UnicaenIndicateur/Form/Indicateur/IndicateurHydratorFactory.php
@@ -6,9 +6,8 @@ use Interop\Container\ContainerInterface;
 
 class IndicateurHydratorFactory {
 
-    public function __invoke(ContainerInterface $container)
+    public function __invoke(ContainerInterface $container) : IndicateurHydrator
     {
-        /** @var IndicateurHydrator $hydrator */
         $hydrator = new IndicateurHydrator();
         return $hydrator;
     }
diff --git a/src/UnicaenIndicateur/Provider/Privilege/AbonnementPrivileges.php b/src/UnicaenIndicateur/Provider/Privilege/AbonnementPrivileges.php
index c233121..46ea913 100644
--- a/src/UnicaenIndicateur/Provider/Privilege/AbonnementPrivileges.php
+++ b/src/UnicaenIndicateur/Provider/Privilege/AbonnementPrivileges.php
@@ -6,7 +6,7 @@ use UnicaenPrivilege\Provider\Privilege\Privileges;
 
 class AbonnementPrivileges extends Privileges
 {
-    const AFFICHER      = 'indicateur-afficher-abonnement';
-    const EDITER        = 'indicateur-editer-abonnement';
-    const DETRUIRE      = 'indicateur-detruire-abonnement';
+    const AFFICHER      = 'abonnement-afficher';
+    const EDITER        = 'abonnement-editer';
+    const DETRUIRE      = 'abonnement-detruire';
 }
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Provider/Privilege/IndicateurPrivileges.php b/src/UnicaenIndicateur/Provider/Privilege/IndicateurPrivileges.php
index c50e423..9273674 100644
--- a/src/UnicaenIndicateur/Provider/Privilege/IndicateurPrivileges.php
+++ b/src/UnicaenIndicateur/Provider/Privilege/IndicateurPrivileges.php
@@ -6,7 +6,7 @@ use UnicaenPrivilege\Provider\Privilege\Privileges;
 
 class IndicateurPrivileges extends Privileges
 {
-    const AFFICHER      = 'indicateur-afficher-indicateur';
-    const EDITER        = 'indicateur-editer-indicateur';
-    const DETRUIRE      = 'indicateur-detruire-indicateur';
+    const AFFICHER      = 'indicateur-afficher';
+    const EDITER        = 'indicateur-editer';
+    const DETRUIRE      = 'indicateur-detruire';
 }
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Service/Abonnement/AbonnementService.php b/src/UnicaenIndicateur/Service/Abonnement/AbonnementService.php
index 8e2d9ee..6e7f59a 100644
--- a/src/UnicaenIndicateur/Service/Abonnement/AbonnementService.php
+++ b/src/UnicaenIndicateur/Service/Abonnement/AbonnementService.php
@@ -3,63 +3,55 @@
 namespace UnicaenIndicateur\Service\Abonnement;
 
 use DateTime;
+use Doctrine\ORM\EntityManager;
 use Doctrine\ORM\NonUniqueResultException;
 use Doctrine\ORM\ORMException;
 use Doctrine\ORM\QueryBuilder;
+use DoctrineModule\Persistence\ProvidesObjectManager;
+use Laminas\Mvc\Controller\AbstractActionController;
+use RuntimeException;
 use UnicaenIndicateur\Entity\Db\Abonnement;
 use UnicaenIndicateur\Entity\Db\Indicateur;
 use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait;
-use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
 use UnicaenMail\Service\Mail\MailServiceAwareTrait;
 use UnicaenUtilisateur\Entity\Db\User;
-use Laminas\Mvc\Controller\AbstractActionController;
 
+/**
+ * @property EntityManager $objectManager
+ */
 class AbonnementService {
-    use EntityManagerAwareTrait;
-    use UnicaenIndicateurServiceAwareTrait;
+    use IndicateurServiceAwareTrait;
     use MailServiceAwareTrait;
+    use ProvidesObjectManager;
 
     /** GESTION DES ENTITES *******************************************************************************************/
 
-    /**
-     * @param Abonnement $abonnement
-     * @return Abonnement
-     */
     public function create(Abonnement $abonnement) : Abonnement
     {
         try {
-            $this->getEntityManager()->persist($abonnement);
-            $this->getEntityManager()->flush($abonnement);
+            $this->getObjectManager()->persist($abonnement);
+            $this->getObjectManager()->flush($abonnement);
         } catch (ORMException $e) {
             throw new RuntimeException("Un problème est survenue lors de l'enregistrement en base.", $e);
         }
         return $abonnement;
     }
 
-    /**
-     * @param Abonnement $abonnement
-     * @return Abonnement
-     */
     public function update(Abonnement $abonnement) : Abonnement
     {
         try {
-            $this->getEntityManager()->flush($abonnement);
+            $this->getObjectManager()->flush($abonnement);
         } catch (ORMException $e) {
             throw new RuntimeException("Un problème est survenue lors de l'enregistrement en base.", $e);
         }
         return $abonnement;
     }
 
-    /**
-     * @param Abonnement $abonnement
-     * @return Abonnement
-     */
     public function delete(Abonnement $abonnement) : Abonnement
     {
         try {
-            $this->getEntityManager()->remove($abonnement);
-            $this->getEntityManager()->flush($abonnement);
+            $this->getObjectManager()->remove($abonnement);
+            $this->getObjectManager()->flush($abonnement);
         } catch (ORMException $e) {
             throw new RuntimeException("Un problème est survenue lors de l'enregistrement en base.", $e);
         }
@@ -68,23 +60,15 @@ class AbonnementService {
 
     /** REQUETAGE *****************************************************************************************************/
 
-    /**
-     * @return QueryBuilder
-     */
     public function createQueryBuilder() : QueryBuilder
     {
-        $qb = $this->getEntityManager()->getRepository(Abonnement::class)->createQueryBuilder('abonnement')
+        $qb = $this->getObjectManager()->getRepository(Abonnement::class)->createQueryBuilder('abonnement')
             ->join('abonnement.user', 'user')->addSelect('user')
             ->join('abonnement.indicateur', 'indicateur')->addSelect('indicateur')
         ;
         return $qb;
     }
 
-    /**
-     * @param string $attribut
-     * @param string $ordre
-     * @return Abonnement[]
-     */
     public function getAbonnements(string $attribut = 'id', string $ordre = 'ASC') : array
     {
         $qb = $this->createQueryBuilder()
@@ -94,10 +78,6 @@ class AbonnementService {
         return $result;
     }
 
-    /**
-     * @param int|null $id
-     * @return Abonnement|null
-     */
     public function getAbonnement(?int $id) : ?Abonnement
     {
         $qb = $this->createQueryBuilder()
@@ -113,11 +93,6 @@ class AbonnementService {
         return $result;
     }
 
-    /**
-     * @param AbstractActionController $controller
-     * @param string $paramName
-     * @return Abonnement|null
-     */
     public function getRequestedAbonnement(AbstractActionController $controller, string $paramName='abonnement') : ?Abonnement
     {
         $id = $controller->params()->fromRoute($paramName);
@@ -125,10 +100,10 @@ class AbonnementService {
     }
 
     /**
-     * @param User
+     * @param User $user
      * @return Abonnement[]
      */
-    public function getAbonnementsByUser($user) : array
+    public function getAbonnementsByUser(User $user) : array
     {
         $qb = $this->createQueryBuilder()
             ->andWhere('abonnement.user = :user')
@@ -158,7 +133,8 @@ class AbonnementService {
 
     /** FONCTIONNEMENT ************************************************************************************************/
 
-    public function notifyAbonnements() {
+    public function notifyAbonnements() : void
+    {
         $indicateurs = $this->getIndicateurService()->getIndicateurs();
 
         foreach ($indicateurs as $indicateur) {
@@ -194,10 +170,6 @@ class AbonnementService {
         }
     }
 
-    /**
-     * @param User|null $user
-     * @param Indicateur|null $indicateur
-     */
     public function isAbonner(?User $user, ?Indicateur $indicateur) : bool
     {
         foreach ($indicateur->getAbonnements() as $abonnement) {
diff --git a/src/UnicaenIndicateur/Service/Abonnement/AbonnementServiceAwareTrait.php b/src/UnicaenIndicateur/Service/Abonnement/AbonnementServiceAwareTrait.php
index 83dcc1a..a45b4d6 100644
--- a/src/UnicaenIndicateur/Service/Abonnement/AbonnementServiceAwareTrait.php
+++ b/src/UnicaenIndicateur/Service/Abonnement/AbonnementServiceAwareTrait.php
@@ -4,26 +4,16 @@ namespace UnicaenIndicateur\Service\Abonnement;
 
 trait AbonnementServiceAwareTrait {
 
-    /** @var AbonnementService */
-    private $abonnementService;
+    private AbonnementService $abonnementService;
 
-    /**
-     * @return AbonnementService
-     */
     public function getAbonnementService() : AbonnementService
     {
         return $this->abonnementService;
     }
 
-    /**
-     * @param AbonnementService $abonnementService
-     * @return AbonnementService
-     */
-    public function setAbonnementService(AbonnementService $abonnementService) : AbonnementService
+    public function setAbonnementService(AbonnementService $abonnementService) : void
     {
         $this->abonnementService = $abonnementService;
-        return $this->abonnementService;
     }
 
-
 }
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Service/Abonnement/AbonnementServiceFactory.php b/src/UnicaenIndicateur/Service/Abonnement/AbonnementServiceFactory.php
index e2155f7..2ef279a 100644
--- a/src/UnicaenIndicateur/Service/Abonnement/AbonnementServiceFactory.php
+++ b/src/UnicaenIndicateur/Service/Abonnement/AbonnementServiceFactory.php
@@ -3,6 +3,8 @@
 namespace UnicaenIndicateur\Service\Abonnement;
 
 use Doctrine\ORM\EntityManager;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
 use UnicaenIndicateur\Service\Indicateur\IndicateurService;
 use Interop\Container\ContainerInterface;
 use UnicaenMail\Service\Mail\MailService;
@@ -12,8 +14,10 @@ class AbonnementServiceFactory {
     /**
      * @param ContainerInterface $container
      * @return AbonnementService
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container)
+    public function __invoke(ContainerInterface $container) : AbonnementService
     {
         /**
          * @var EntityManager $entityManager
@@ -24,9 +28,8 @@ class AbonnementServiceFactory {
         $indicateurService = $container->get(IndicateurService::class);
         $mailService = $container->get(MailService::class);
 
-        /** @var AbonnementService $service */
         $service = new AbonnementService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         $service->setIndicateurService($indicateurService);
         $service->setMailService($mailService);
         return $service;
diff --git a/src/UnicaenIndicateur/Service/Indicateur/IndicateurService.php b/src/UnicaenIndicateur/Service/Indicateur/IndicateurService.php
index 6aac56c..d6db1bf 100644
--- a/src/UnicaenIndicateur/Service/Indicateur/IndicateurService.php
+++ b/src/UnicaenIndicateur/Service/Indicateur/IndicateurService.php
@@ -5,16 +5,20 @@ namespace UnicaenIndicateur\Service\Indicateur;
 use DateTime;
 use Doctrine\DBAL\Exception as DBA_Exception;
 use Doctrine\DBAL\Driver\Exception as DBA_Driver_Exception;
+use Doctrine\ORM\EntityManager;
 use Doctrine\ORM\NonUniqueResultException;
 use Doctrine\ORM\ORMException;
+use DoctrineModule\Persistence\ProvidesObjectManager;
 use Exception;
+use RuntimeException;
 use UnicaenIndicateur\Entity\Db\Indicateur;
-use UnicaenApp\Exception\RuntimeException;
-use UnicaenApp\Service\EntityManagerAwareTrait;
 use Laminas\Mvc\Controller\AbstractActionController;
 
+/**
+ * @property EntityManager $objectManager
+ */
 class IndicateurService {
-    use EntityManagerAwareTrait;
+    use ProvidesObjectManager;
 
 /** GESTION DES ENTITES ***********************************************************************************************/
 
@@ -25,8 +29,8 @@ class IndicateurService {
     public function create(Indicateur $indicateur) : Indicateur
     {
         try {
-            $this->getEntityManager()->persist($indicateur);
-            $this->getEntityManager()->flush($indicateur);
+            $this->getObjectManager()->persist($indicateur);
+            $this->getObjectManager()->flush($indicateur);
         } catch (ORMException $e) {
             throw new RuntimeException("Un problème est survenue lors de l'enregistrement en base.", $e);
         }
@@ -40,7 +44,7 @@ class IndicateurService {
     public function update(Indicateur $indicateur) : Indicateur
     {
         try {
-            $this->getEntityManager()->flush($indicateur);
+            $this->getObjectManager()->flush($indicateur);
         } catch (ORMException $e) {
             throw new RuntimeException("Un problème est survenue lors de l'enregistrement en base.", $e);
         }
@@ -54,8 +58,8 @@ class IndicateurService {
     public function delete(Indicateur $indicateur) : Indicateur
     {
         try {
-            $this->getEntityManager()->remove($indicateur);
-            $this->getEntityManager()->flush($indicateur);
+            $this->getObjectManager()->remove($indicateur);
+            $this->getObjectManager()->flush($indicateur);
         } catch (ORMException $e) {
             throw new RuntimeException("Un problème est survenue lors de l'enregistrement en base.", $e);
         }
@@ -68,7 +72,7 @@ class IndicateurService {
     {
         try {
             $sql = "SELECT EXISTS (SELECT FROM pg_matviews WHERE matviewname='" . $viewname . "')";
-            $query = $this->getEntityManager()->getConnection()->prepare($sql);
+            $query = $this->getObjectManager()->getConnection()->prepare($sql);
             $query->execute();
             $value = $query->fetchOne();
         } catch (Exception $e) {
@@ -89,7 +93,7 @@ class IndicateurService {
 
         $sql = "SELECT * FROM " . $indicateur->getViewId();
         try {
-            $query = $this->getEntityManager()->getConnection()->prepare($sql);
+            $query = $this->getObjectManager()->getConnection()->prepare($sql);
         } catch (DBA_Exception $e) {
             throw new RuntimeException("Un problème est survenu lors de la récupération de la session.", 0, $e);
         }
@@ -109,7 +113,7 @@ class IndicateurService {
     {
         $sql = "REFRESH MATERIALIZED VIEW " . $indicateur->getViewId();
         try {
-            $query = $this->getEntityManager()->getConnection()->prepare($sql);
+            $query = $this->getObjectManager()->getConnection()->prepare($sql);
         } catch (DBA_Exception $e) {
             throw new RuntimeException("Un problème est survenu lors de la récupération de la session.", 0, $e);
         }
@@ -129,7 +133,7 @@ class IndicateurService {
     {
         $sql = "DROP MATERIALIZED VIEW IF EXISTS " . $indicateur->getViewId();
         try {
-            $query = $this->getEntityManager()->getConnection()->prepare($sql);
+            $query = $this->getObjectManager()->getConnection()->prepare($sql);
         } catch (DBA_Exception $e) {
             throw new RuntimeException("Un problème est survenu lors de la récupération de la session.", 0, $e);
         }
@@ -147,7 +151,7 @@ class IndicateurService {
     {
         $sql = "CREATE MATERIALIZED VIEW ".$indicateur->getViewId(). " AS ".$indicateur->getRequete();
         try {
-            $query = $this->getEntityManager()->getConnection()->prepare($sql);
+            $query = $this->getObjectManager()->getConnection()->prepare($sql);
         } catch (DBA_Exception $e) {
             throw new RuntimeException("Un problème est survenu lors de la récupération de la session.", 0, $e);
         }
@@ -178,7 +182,7 @@ class IndicateurService {
      */
     public function getIndicateurs(string $attribut = 'id', string $ordre = 'ASC') : array
     {
-        $qb = $this->getEntityManager()->getRepository(Indicateur::class)->createQueryBuilder('indicateur')
+        $qb = $this->getObjectManager()->getRepository(Indicateur::class)->createQueryBuilder('indicateur')
             ->orderBy('indicateur.' . $attribut, $ordre);
 
         $result = $qb->getQuery()->getResult();
@@ -193,7 +197,7 @@ class IndicateurService {
     {
         if ($id === null) return null;
 
-        $qb = $this->getEntityManager()->getRepository(Indicateur::class)->createQueryBuilder('indicateur')
+        $qb = $this->getObjectManager()->getRepository(Indicateur::class)->createQueryBuilder('indicateur')
             ->andWhere('indicateur.id = :id')
             ->setParameter('id', $id);
         try {
diff --git a/src/UnicaenIndicateur/Service/Indicateur/IndicateurServiceAwareTrait.php b/src/UnicaenIndicateur/Service/Indicateur/IndicateurServiceAwareTrait.php
index 48a5346..7219b09 100644
--- a/src/UnicaenIndicateur/Service/Indicateur/IndicateurServiceAwareTrait.php
+++ b/src/UnicaenIndicateur/Service/Indicateur/IndicateurServiceAwareTrait.php
@@ -4,26 +4,16 @@ namespace UnicaenIndicateur\Service\Indicateur;
 
 trait IndicateurServiceAwareTrait {
 
-    /** @var IndicateurService */
-    private $indicateurService;
+    private IndicateurService $indicateurService;
 
-    /**
-     * @return IndicateurService
-     */
     public function getIndicateurService() : IndicateurService
     {
         return $this->indicateurService;
     }
 
-    /**
-     * @param IndicateurService $indicateurService
-     * @return IndicateurService
-     */
-    public function setIndicateurService(IndicateurService $indicateurService) : IndicateurService
+    public function setIndicateurService(IndicateurService $indicateurService) : void
     {
         $this->indicateurService = $indicateurService;
-        return $this->indicateurService;
     }
 
-
 }
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Service/Indicateur/IndicateurServiceFactory.php b/src/UnicaenIndicateur/Service/Indicateur/IndicateurServiceFactory.php
index cd2a823..b6839dd 100644
--- a/src/UnicaenIndicateur/Service/Indicateur/IndicateurServiceFactory.php
+++ b/src/UnicaenIndicateur/Service/Indicateur/IndicateurServiceFactory.php
@@ -4,23 +4,26 @@ namespace UnicaenIndicateur\Service\Indicateur;
 
 use Doctrine\ORM\EntityManager;
 use Interop\Container\ContainerInterface;
+use Psr\Container\ContainerExceptionInterface;
+use Psr\Container\NotFoundExceptionInterface;
 
 class IndicateurServiceFactory {
 
     /**
      * @param ContainerInterface $container
      * @return IndicateurService
+     * @throws ContainerExceptionInterface
+     * @throws NotFoundExceptionInterface
      */
-    public function __invoke(ContainerInterface $container)
+    public function __invoke(ContainerInterface $container) : IndicateurService
     {
         /**
          * @var EntityManager $entityManager
          */
         $entityManager = $container->get('doctrine.entitymanager.orm_default');
 
-        /** @var IndicateurService $service */
         $service = new IndicateurService();
-        $service->setEntityManager($entityManager);
+        $service->setObjectManager($entityManager);
         return $service;
     }
 }
\ No newline at end of file
-- 
GitLab