Skip to content
Snippets Groups Projects
Commit b9bdbfec authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Mes indicateurs et roles autorisés + fiabilisation

parent 7fa59868
Branches master
Tags 6.3.2
No related merge requests found
Pipeline #38815 failed
Showing
with 79 additions and 71 deletions
......@@ -9,8 +9,6 @@ use UnicaenIndicateur\Service\Abonnement\AbonnementService;
use UnicaenIndicateur\Service\Indicateur\IndicateurService;
use UnicaenUtilisateur\Service\User\UserService;
;
class AbonnementControllerFactory
{
......
......@@ -5,6 +5,7 @@ namespace UnicaenIndicateur\Controller;
use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\View\Model\ViewModel;
use UnicaenIndicateur\Entity\Db\Abonnement;
use UnicaenIndicateur\Entity\Db\Indicateur;
use UnicaenIndicateur\Service\Abonnement\AbonnementServiceAwareTrait;
use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait;
use UnicaenUtilisateur\Service\User\UserServiceAwareTrait;
......@@ -17,7 +18,14 @@ class IndexController extends AbstractActionController {
public function indexAction() : ViewModel
{
$user = $this->getUserService()->getConnectedUser();
$role = $this->getUserService()->getConnectedRole();
$abonnements = $this->getAbonnementService()->getAbonnementsByUser($user);
$abonnements = array_filter($abonnements, function (Abonnement $abonnement) use ($role) {
$indicateur = $abonnement->getIndicateur();
$rolesAutorises = $indicateur->getRolesAutorises();
return in_array(Indicateur::TOUS_LES_ROLES, $rolesAutorises) or in_array($role->getRoleId(), $rolesAutorises);
});
$result = [];
foreach ($abonnements as $abonnement) {
......@@ -35,7 +43,8 @@ class IndexController extends AbstractActionController {
public function abonnementAction() : ViewModel
{
$user = $this->getUserService()->getConnectedUser();
$indicateurs = $this->getIndicateurService()->getIndicateurs();
$role = $this->getUserService()->getConnectedRole();
$indicateurs = $this->getIndicateurService()->getIndicateursWithRole($role);
$request = $this->getRequest();
if ($request->isPost()) {
......
......@@ -5,7 +5,6 @@ namespace UnicaenIndicateur\Controller;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
use UnicaenIndicateur\Entity\Db\TableauDeBord;
use UnicaenIndicateur\Form\TableauDeBord\TableauDeBordForm;
use UnicaenIndicateur\Service\Indicateur\IndicateurService;
use UnicaenIndicateur\Service\TableauDeBord\TableauDeBordService;
......
......@@ -76,7 +76,7 @@ class Categorie {
$this->indicateurs = $indicateurs;
}
public function setId(int $id)
public function setId(int $id): void
{
$this->id = $id;
}
......
......@@ -6,7 +6,6 @@ use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use UnicaenIndicateur\Service\Perimetre\PerimetreServiceInterface;
use UnicaenParametre\Service\Parametre\ParametreService;
use UnicaenUtilisateur\Entity\Db\RoleInterface;
class Indicateur {
......
......@@ -10,7 +10,7 @@ use Laminas\InputFilter\Factory;
class TableauDeBordForm extends Form {
public function init()
public function init(): void
{
// libelle
$this->add([
......
......@@ -7,10 +7,6 @@ use UnicaenIndicateur\Entity\Db\TableauDeBord;
class TableauDeBordHydrator implements HydratorInterface {
/**
* @param TableauDeBord $object
* @return array
*/
public function extract(object $object): array
{
$data = [
......@@ -22,11 +18,6 @@ class TableauDeBordHydrator implements HydratorInterface {
return $data;
}
/**
* @param array $data
* @param TableauDeBord $object
* @return TableauDeBord
*/
public function hydrate(array $data, object $object) : object
{
$libelle = (isset($data['libelle']) AND trim($data['libelle']) !== '')?trim($data['libelle']):null;
......
......@@ -5,7 +5,6 @@ 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;
......@@ -15,11 +14,13 @@ use UnicaenIndicateur\Entity\Db\Indicateur;
use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait;
use UnicaenMail\Service\Mail\MailServiceAwareTrait;
use UnicaenUtilisateur\Entity\Db\User;
use UnicaenUtilisateur\Entity\Db\UserInterface;
/**
* @property EntityManager $objectManager
*/
class AbonnementService {
class AbonnementService
{
use IndicateurServiceAwareTrait;
use MailServiceAwareTrait;
use ProvidesObjectManager;
......@@ -28,33 +29,21 @@ class AbonnementService {
public function create(Abonnement $abonnement): Abonnement
{
try {
$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;
}
public function update(Abonnement $abonnement): Abonnement
{
try {
$this->getObjectManager()->flush($abonnement);
} catch (ORMException $e) {
throw new RuntimeException("Un problème est survenue lors de l'enregistrement en base.", $e);
}
return $abonnement;
}
public function delete(Abonnement $abonnement): Abonnement
{
try {
$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);
}
return $abonnement;
}
......@@ -64,16 +53,14 @@ class AbonnementService {
{
$qb = $this->getObjectManager()->getRepository(Abonnement::class)->createQueryBuilder('abonnement')
->join('abonnement.user', 'user')->addSelect('user')
->join('abonnement.indicateur', 'indicateur')->addSelect('indicateur')
;
->join('abonnement.indicateur', 'indicateur')->addSelect('indicateur');
return $qb;
}
public function getAbonnements(string $attribut = 'id', string $ordre = 'ASC'): array
{
$qb = $this->createQueryBuilder()
->orderBy('abonnement.' . $attribut, $ordre)
;
->orderBy('abonnement.' . $attribut, $ordre);
$result = $qb->getQuery()->getResult();
return $result;
}
......@@ -82,8 +69,7 @@ class AbonnementService {
{
$qb = $this->createQueryBuilder()
->andWhere('abonnement.id = :id')
->setParameter('id', $id)
;
->setParameter('id', $id);
try {
$result = $qb->getQuery()->getOneOrNullResult();
......@@ -100,15 +86,13 @@ class AbonnementService {
}
/**
* @param User $user
* @return Abonnement[]
*/
public function getAbonnementsByUser(User $user) : array
public function getAbonnementsByUser(UserInterface $user): array
{
$qb = $this->createQueryBuilder()
->andWhere('abonnement.user = :user')
->setParameter('user', $user)
;
->setParameter('user', $user);
$result = $qb->getQuery()->getResult();
return $result;
}
......@@ -118,14 +102,13 @@ class AbonnementService {
* @param Indicateur $indicateur
* @return Abonnement[]
*/
public function getAbonnementsByUserAndIndicateur(User $user, Indicateur $indicateur) : array
public function getAbonnementsByUserAndIndicateur(UserInterface $user, Indicateur $indicateur): array
{
$qb = $this->createQueryBuilder()
->andWhere('abonnement.user = :user')
->andWhere('abonnement.indicateur = :indicateur')
->setParameter('user', $user)
->setParameter('indicateur', $indicateur)
;
->setParameter('indicateur', $indicateur);
$result = $qb->getQuery()->getResult();
return $result;
......
......@@ -14,6 +14,7 @@ use Laminas\Mvc\Controller\AbstractActionController;
use RuntimeException;
use UnicaenIndicateur\Entity\Db\Indicateur;
use UnicaenIndicateur\Service\Perimetre\PerimetreServiceInterface;
use UnicaenUtilisateur\Entity\Db\RoleInterface;
/**
* @property EntityManager $objectManager
......@@ -90,7 +91,7 @@ class IndicateurService
foreach ($perimetresActifs as $perimetreActif) {
if ($userPerimetre !== null) {
if (!empty($userPerimetre) AND isset($userPerimetre[$perimetreActif])) {
if (!empty($userPerimetre) and isset($userPerimetre[$perimetreActif])) {
$sql .= " AND perimetre_" . $perimetreActif . "_id IN (" . implode(",", $userPerimetre[$perimetreActif]) . ")";
} else {
$sql .= " AND perimetre_" . $perimetreActif . "_id IS NULL";
......@@ -196,6 +197,14 @@ class IndicateurService
return $result;
}
/** @return Indicateur[] */
public function getIndicateursWithRole(RoleInterface $role): array
{
$indicateurs = $this->getIndicateurs();
$indicateurs = $this->filterIndicateursWithRole($indicateurs, $role);
return $indicateurs;
}
/**
* @param int|null $id
* @return Indicateur|null
......@@ -251,6 +260,15 @@ class IndicateurService
/** FACADE **************************************************************/
public function filterIndicateursWithRole(array $indicateurs, RoleInterface $role): array
{
$indicateurs = array_filter($indicateurs, function (Indicateur $indicateur) use ($role) {
$rolesAutorises = $indicateur->getRolesAutorises();
return in_array(Indicateur::TOUS_LES_ROLES, $rolesAutorises) or in_array($role->getRoleId(), $rolesAutorises);
});
return $indicateurs;
}
/** RECUPERATION DONNEES ******************************************************************************************/
/**
......@@ -269,7 +287,7 @@ class IndicateurService
if ($rawdata === null) return null;
$rubriques = [];
if ($indicateur->getEntity() === null OR $indicateur->getEntity() === Indicateur::ENTITY_LIBRE) {
if ($indicateur->getEntity() === null or $indicateur->getEntity() === Indicateur::ENTITY_LIBRE) {
if (!empty($rawdata)) {
foreach ($rawdata[0] as $key => $value) {
$rubriques[] = $key;
......@@ -302,7 +320,9 @@ class IndicateurService
/** RETRAIT DES RUBRIQUES ASSOCIEES AUX PERIMETRES */
$perimetresActifs = [];
if ($indicateur->getPerimetre() !== null) { $perimetresActifs = explode(PerimetreServiceInterface::PERIMETRE_SEPARATOR, $indicateur->getPerimetre()); }
if ($indicateur->getPerimetre() !== null) {
$perimetresActifs = explode(PerimetreServiceInterface::PERIMETRE_SEPARATOR, $indicateur->getPerimetre());
}
foreach ($perimetresActifs as $perimetre) {
$rubriques = array_diff($rubriques, ['perimetre_' . $perimetre . '_id']);
}
......
......@@ -2,14 +2,17 @@
namespace UnicaenIndicateur\Service\Perimetre;
use UnicaenUtilisateur\Entity\Db\AbstractRole;
use UnicaenUtilisateur\Entity\Db\AbstractUser;
use UnicaenUtilisateur\Entity\Db\RoleInterface;
use ZfcUser\Entity\UserInterface;
interface PerimetreServiceInterface {
interface PerimetreServiceInterface
{
const PERIMETRE_SEPARATOR = '||';
public function setListePerimetres(array $liste): void;
public function getListePerimetres(): array;
public function getPerimetres(AbstractUser $user, AbstractRole $role) : array;
public function getPerimetres(UserInterface $user, RoleInterface $role): array;
}
\ No newline at end of file
......@@ -3,10 +3,16 @@
namespace UnicaenIndicateur\Service\TableauDeBord;
use Doctrine\ORM\EntityManager;
use Psr\Container\ContainerExceptionInterface;
use Psr\Container\ContainerInterface;
use Psr\Container\NotFoundExceptionInterface;
class TableauDeBordServiceFactory {
/**
* @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface
*/
public function __invoke(ContainerInterface $container) : TableauDeBordService
{
/** @var EntityManager $entityManager */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment