diff --git a/src/UnicaenIndicateur/Controller/IndicateurController.php b/src/UnicaenIndicateur/Controller/IndicateurController.php index 7a5942bf046efda7785d3b2c72652111425d2c07..f73be5fd36811216d99c305d1a4cdcf86ff8df1b 100644 --- a/src/UnicaenIndicateur/Controller/IndicateurController.php +++ b/src/UnicaenIndicateur/Controller/IndicateurController.php @@ -10,6 +10,7 @@ use UnicaenIndicateur\Form\Indicateur\IndicateurFormAwareTrait; use UnicaenIndicateur\Service\Abonnement\AbonnementServiceAwareTrait; use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait; use UnicaenApp\View\Model\CsvModel; +use UnicaenIndicateur\Service\Perimetre\PerimetreServiceAwareTrait; use UnicaenMail\Service\Mail\MailServiceAwareTrait; use UnicaenUtilisateur\Service\User\UserServiceAwareTrait; use Laminas\Http\Request; @@ -21,6 +22,7 @@ class IndicateurController extends AbstractActionController { use UserServiceAwareTrait; use AbonnementServiceAwareTrait; use MailServiceAwareTrait; + use PerimetreServiceAwareTrait; use IndicateurFormAwareTrait; @@ -63,18 +65,28 @@ class IndicateurController extends AbstractActionController { $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this); $mails = $this->getMailService()->getMailsByMotClef($indicateur->generateTag()); - $userStructurePerimetre = [12,5]; - $userRolePerimetre = [1,15]; - - $userPerimetre = null; - switch ($indicateur->getPerimetre()) { - case Indicateur::PERIMETRE_STRUCTURE: - $userPerimetre = $userStructurePerimetre; - break; - case Indicateur::PERIMETRE_ROLE: - $userPerimetre = $userRolePerimetre; - break; - } + $user = $this->getUserService()->getConnectedUser(); + $role = $this->getUserService()->getConnectedRole(); + + $perimetres = $this->getPerimetreService()->getPerimetres($user, $role); + + $indicateurPerimetre = $indicateur->getPerimetre(); + $perimetreValides = array_filter($perimetres, function(string $p) use ($indicateurPerimetre) { + return (strtolower(explode('_', $p)[0]) === strtolower($indicateurPerimetre)); + }); + $userPerimetre = array_map(function ($p) { return explode('_', $p)[1];}, $perimetreValides); + +// $userPerimetre = null; +// switch ($indicateur->getPerimetre()) { +// case Indicateur::PERIMETRE_STRUCTURE: +//// $userPerimetre = $user->getPerimetreStructure(); +// $userPerimetre = $userStructurePerimetre; +// break; +// case Indicateur::PERIMETRE_ROLE: +//// $userPerimetre = $user->getPerimetreRole(); +// $userPerimetre = $userRolePerimetre; +// break; +// } $exists = $this->getIndicateurService()->verifierExistanceMaterializedView($indicateur->getViewId()); if ($exists === true) $result = $this->getIndicateurService()->getIndicateurData($indicateur, $userPerimetre); diff --git a/src/UnicaenIndicateur/Controller/IndicateurControllerFactory.php b/src/UnicaenIndicateur/Controller/IndicateurControllerFactory.php index e262a73994b415c6a8652217ac8538d48b2a96aa..8badfef1bfc5f52dfc1fe34acce6739259965cc7 100644 --- a/src/UnicaenIndicateur/Controller/IndicateurControllerFactory.php +++ b/src/UnicaenIndicateur/Controller/IndicateurControllerFactory.php @@ -8,6 +8,7 @@ use UnicaenIndicateur\Form\Indicateur\IndicateurForm; use UnicaenIndicateur\Service\Abonnement\AbonnementService; use UnicaenIndicateur\Service\Indicateur\IndicateurService; use Interop\Container\ContainerInterface; +use UnicaenIndicateur\Service\Perimetre\PerimetreServiceInterface; use UnicaenMail\Service\Mail\MailService; use UnicaenUtilisateur\Service\User\UserService;; @@ -26,12 +27,17 @@ class IndicateurControllerFactory { * @var IndicateurService $indicateurService * @var MailService $mailService * @var UserService $userService + * @var PerimetreServiceInterface $perimetreService */ $abonnementService = $container->get(AbonnementService::class); $indicateurService = $container->get(IndicateurService::class); $mailService = $container->get(MailService::class); $userService = $container->get(UserService::class); + $config = $container->get('config'); + $perimetreServiceKey = $container->get($config['unicaen-indicateur']['perimetreService']); + $perimetreService = $container->get($perimetreServiceKey::class); + /** * @var IndicateurForm $indicateurForm */ @@ -41,6 +47,7 @@ class IndicateurControllerFactory { $controller->setAbonnementService($abonnementService); $controller->setIndicateurService($indicateurService); $controller->setMailService($mailService); + $controller->setPerimetreService($perimetreService); $controller->setUserService($userService); $controller->setIndicateurForm($indicateurForm); return $controller; diff --git a/src/UnicaenIndicateur/Service/Perimetre/PerimetreServiceAwareTrait.php b/src/UnicaenIndicateur/Service/Perimetre/PerimetreServiceAwareTrait.php new file mode 100644 index 0000000000000000000000000000000000000000..ba206e4892f55f813daa9a238017f459b4e1d1ee --- /dev/null +++ b/src/UnicaenIndicateur/Service/Perimetre/PerimetreServiceAwareTrait.php @@ -0,0 +1,22 @@ +<?php + +namespace UnicaenIndicateur\Service\Perimetre; + +use Application\Service\Perimetre\PerimetreService; + +trait PerimetreServiceAwareTrait +{ + private PerimetreService $perimetreService; + + public function getPerimetreService(): PerimetreService + { + return $this->perimetreService; + } + + public function setPerimetreService(PerimetreService $perimetreService): void + { + $this->perimetreService = $perimetreService; + } + + +} \ No newline at end of file diff --git a/src/UnicaenIndicateur/Service/Perimetre/PerimetreServiceInterface.php b/src/UnicaenIndicateur/Service/Perimetre/PerimetreServiceInterface.php new file mode 100644 index 0000000000000000000000000000000000000000..f099ec6a7a75c46a19010e54373a708cd0c7069a --- /dev/null +++ b/src/UnicaenIndicateur/Service/Perimetre/PerimetreServiceInterface.php @@ -0,0 +1,11 @@ +<?php + +namespace UnicaenIndicateur\Service\Perimetre; + +use UnicaenUtilisateur\Entity\Db\AbstractRole; +use UnicaenUtilisateur\Entity\Db\AbstractUser; + +interface PerimetreServiceInterface { + + public function getPerimetres(AbstractUser $user, AbstractRole $role) : array; +} \ No newline at end of file