diff --git a/module/Application/config/module.config.php b/module/Application/config/module.config.php
index dadff29a6e64cd19e44e1991c5784f76c2257bd6..bb4acb17837974cf9e9ac83adb05699b11475174 100755
--- a/module/Application/config/module.config.php
+++ b/module/Application/config/module.config.php
@@ -146,6 +146,7 @@ $main = array(
'ApplicationParametres' => 'Application\\Service\\Parametres',
'ApplicationTypeIntervention' => 'Application\\Service\\TypeIntervention',
'ApplicationSource' => 'Application\\Service\\Source',
+ 'ApplicationTypeRolePhpRole' => 'Application\\Service\\TypeRolePhpRole',
'ApplicationRole' => 'Application\\Service\\Role',
'ApplicationRoleUtilisateur' => 'Application\\Service\\RoleUtilisateur',
'NavigationPageVisibility' => 'Application\\Service\\NavigationPageVisibility',
diff --git a/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.TypeRolePhpRole.dcm.xml b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.TypeRolePhpRole.dcm.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e5db2269347d72c7104c29fdd464c2f1fa08606d
--- /dev/null
+++ b/module/Application/src/Application/Entity/Db/Mapping/Application.Entity.Db.TypeRolePhpRole.dcm.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
+ <entity name="Application\Entity\Db\TypeRolePhpRole" table="TYPE_ROLE_PHP_ROLE">
+ <id name="id" type="integer" column="ID">
+ <!--<generator strategy="SEQUENCE"/>-->
+ </id>
+ <field name="phpRoleId" type="string" column="PHP_ROLE_ID" length="64" nullable="false"/>
+ <many-to-one field="typeRole" target-entity="Application\Entity\Db\TypeRole">
+ <join-columns>
+ <join-column name="TYPE_ROLE_ID" referenced-column-name="ID"/>
+ </join-columns>
+ </many-to-one>
+ </entity>
+</doctrine-mapping>
diff --git a/module/Application/src/Application/Entity/Db/TypeRolePhpRole.php b/module/Application/src/Application/Entity/Db/TypeRolePhpRole.php
new file mode 100644
index 0000000000000000000000000000000000000000..fc3c66db95216ed49d30811c781fee5efe52a900
--- /dev/null
+++ b/module/Application/src/Application/Entity/Db/TypeRolePhpRole.php
@@ -0,0 +1,80 @@
+<?php
+
+namespace Application\Entity\Db;
+
+/**
+ * TypeRolePhpRole
+ */
+class TypeRolePhpRole
+{
+ /**
+ * @var integer
+ */
+ protected $id;
+
+ /**
+ * @var \Application\Entity\Db\TypeRole
+ */
+ protected $typeRole;
+
+ /**
+ * @var string
+ */
+ protected $phpRoleId;
+
+ /**
+ * Get id
+ *
+ * @return integer
+ */
+ public function getId()
+ {
+ return $this->id;
+ }
+
+ /**
+ * Set type
+ *
+ * @param \Application\Entity\Db\TypeRole $typeRole
+ * @return self
+ */
+ public function setTypeRole(\Application\Entity\Db\TypeRole $typeRole = null)
+ {
+ $this->typeRole = $typeRole;
+
+ return $this;
+ }
+
+ /**
+ * Get type
+ *
+ * @return \Application\Entity\Db\TypeRole
+ */
+ public function getTypeRole()
+ {
+ return $this->typeRole;
+ }
+
+ /**
+ * Set phpRoleId
+ *
+ * @param string $phpRoleId
+ * @return TypeRole
+ */
+ public function setPhpRoleId($phpRoleId)
+ {
+ $this->phpRoleId = $phpRoleId;
+
+ return $this;
+ }
+
+ /**
+ * Get phpRoleId
+ *
+ * @return string
+ */
+ public function getPhpRoleId()
+ {
+ return $this->phpRoleId;
+ }
+}
diff --git a/module/Application/src/Application/Provider/Role/RoleProvider.php b/module/Application/src/Application/Provider/Role/RoleProvider.php
index b5359a2d8be948be17b1def8aec6764eb69f3916..e2af3fed88361ef5a28a6990ec3f71b9b208ef50 100644
--- a/module/Application/src/Application/Provider/Role/RoleProvider.php
+++ b/module/Application/src/Application/Provider/Role/RoleProvider.php
@@ -11,6 +11,7 @@ use Application\Acl\ComposanteRole;
use Application\Acl\ComposanteDbRole;
use Application\Entity\Db\Role as RoleEntity;
use Application\Service\Role as RoleService;
+use Application\Service\TypeRolePhpRole as TypeRolePhpRoleService;
use Application\Service\RoleUtilisateur as RoleUtilisateurService;
use Zend\Permissions\Acl\Role\GenericRole;
@@ -36,13 +37,19 @@ class RoleProvider implements ProviderInterface
/**
* Constructeur.
*
+ * @param TypeRolePhpRoleService $typeRolePhpRole
* @param RoleService $serviceRole
* @param RoleUtilisateurService $serviceRoleUtilisateur
* @param array $config
*/
- public function __construct(RoleService $serviceRole, RoleUtilisateurService $serviceRoleUtilisateur, $config = null)
+ public function __construct(
+ TypeRolePhpRoleService $typeRolePhpRole,
+ RoleService $serviceRole,
+ RoleUtilisateurService $serviceRoleUtilisateur,
+ $config = null)
{
$this
+ ->setServiceTypeRolePhpRole($typeRolePhpRole)
->setServiceRole($serviceRole)
->setServiceRoleUtilisateur($serviceRoleUtilisateur);
@@ -66,8 +73,15 @@ class RoleProvider implements ProviderInterface
/**
* Rôles "composante" : exercés sur une structure de niveau 2 PORTEUSE d'éléments pédagogiques
*/
+ // rôle père
$roleComposante = new ComposanteRole();
- $rolesComposante = $this->serviceRole->getList();
+ // rôles métier (importés d'Harpege) correspondant au ROLE_ID PHP
+ $qb = $this->serviceTypeRolePhpRole->finderByPhpRole($roleComposante->getRoleId());
+ $rolesComposante = array();
+ foreach ($qb->getQuery()->getResult() as $trpr) { /* @var $trpr \Application\Entity\Db\TypeRolePhpRole */
+ $qb2 = $this->serviceRole->finderByTypeRole($trpr->getTypeRole());
+ $rolesComposante += $this->serviceRole->getList($qb2);
+ }
/**
* Rôles utilisateurs au sein de l'application (tables UTILISATEUR, ROLE_UTILISATEUR et ROLE_UTILISATEUR_LINKER)
@@ -116,6 +130,11 @@ class RoleProvider implements ProviderInterface
return new GenericRole($roleId);
}
+ /**
+ * @var TypeRolePhpRoleService
+ */
+ private $serviceTypeRolePhpRole;
+
/**
* @var RoleService
*/
@@ -126,6 +145,12 @@ class RoleProvider implements ProviderInterface
*/
private $serviceRoleUtilisateur;
+ public function setServiceTypeRolePhpRole(TypeRolePhpRoleService $serviceTypeRolePhpRole)
+ {
+ $this->serviceTypeRolePhpRole = $serviceTypeRolePhpRole;
+ return $this;
+ }
+
public function setServiceRole(RoleService $serviceRole)
{
$this->serviceRole = $serviceRole;
diff --git a/module/Application/src/Application/Provider/Role/RoleProviderFactory.php b/module/Application/src/Application/Provider/Role/RoleProviderFactory.php
index f07dd8dedb7defde62a6860973e0820e408d3a00..9b6992e2f7fb79548fe313bbbcded3a287c248d6 100644
--- a/module/Application/src/Application/Provider/Role/RoleProviderFactory.php
+++ b/module/Application/src/Application/Provider/Role/RoleProviderFactory.php
@@ -21,8 +21,9 @@ class RoleProviderFactory implements FactoryInterface
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{
- $serviceRole = $serviceLocator->get('applicationRole'); /* @var $serviceRole \Application\Service\Role */
- $serviceUtilisateurRole = $serviceLocator->get('applicationRoleUtilisateur'); /* @var $serviceRole \Application\Service\RoleUtilisateur */
+ $serviceTypeRolePhpRole = $serviceLocator->get('applicationTypeRolePhpRole'); /* @var $serviceTypeRolePhpRole \Application\Service\TypeRolePhpRole */
+ $serviceRole = $serviceLocator->get('applicationRole'); /* @var $serviceRole \Application\Service\Role */
+ $serviceUtilisateurRole = $serviceLocator->get('applicationRoleUtilisateur'); /* @var $serviceUtilisateurRole \Application\Service\RoleUtilisateur */
$config = $serviceLocator->get('BjyAuthorize\Config');
if (! isset($config['role_providers']['ApplicationRoleProvider'])) {
@@ -33,6 +34,6 @@ class RoleProviderFactory implements FactoryInterface
$providerConfig = $config['role_providers']['ApplicationRoleProvider'];
- return new RoleProvider($serviceRole, $serviceUtilisateurRole, $providerConfig);
+ return new RoleProvider($serviceTypeRolePhpRole, $serviceRole, $serviceUtilisateurRole, $providerConfig);
}
}
\ No newline at end of file
diff --git a/module/Application/src/Application/Service/Role.php b/module/Application/src/Application/Service/Role.php
index 312c042c4febaf67c9c4902d15d0c4db94e2276c..f968169051e621c5c6d0a526da65aee322ec78ec 100644
--- a/module/Application/src/Application/Service/Role.php
+++ b/module/Application/src/Application/Service/Role.php
@@ -34,7 +34,7 @@ class Role extends AbstractEntityService
/**
*
- * @param string $typeRole
+ * @param \Application\Entity\Db\TypeRole|string $typeRole
* @param type $qb
* @param type $alias
* @return type
@@ -43,6 +43,10 @@ class Role extends AbstractEntityService
{
list($qb, $alias) = $this->initQuery($qb, $alias);
+ if ($typeRole instanceof \Application\Entity\Db\TypeRole) {
+ $typeRole = $typeRole->getCode();
+ }
+
$qb
->innerJoin('r.type', $alias = uniqid('tr'))
->andWhere("$alias.code = :code")->setParameter('code', $typeRole);
@@ -66,6 +70,28 @@ class Role extends AbstractEntityService
return $qb;
}
+ /**
+ *
+ * @param QueryBuilder $qb
+ * @param string $alias
+ * @return QueryBuilder
+ */
+ public function finderByOffreFormationExistante(QueryBuilder $qb = null, $alias = null)
+ {
+ list($qb, $alias) = $this->initQuery($qb, $alias);
+
+ $qb
+ ->select("$alias, tr123, s")
+ ->distinct()
+ ->innerJoin('r.type', 'tr123')
+ ->innerJoin('r.structure', 's')
+ ->innerJoin('s.elementPedagogique', 'ep');
+// ->where('tr.code <> :code')->setParameter('code', 'IND')
+// ->andWhere('s.niveau = :niv')->setParameter('niv', 2);
+
+ return $qb;
+ }
+
/**
* Retourne une liste d'entités en fonction du QueryBuilder donné
*
@@ -80,11 +106,11 @@ class Role extends AbstractEntityService
list($qb, $alias) = $this->initQuery($qb, $alias);
$qb
- ->addSelect("tr, s")
+ ->addSelect("tr987, s12")
->distinct()
- ->innerJoin('r.type', 'tr')
- ->innerJoin('r.structure', 's')
- ->andWhere('tr.code <> :codeExclu')->setParameter('codeExclu', 'IND')/*
+ ->innerJoin('r.type', 'tr987')
+ ->innerJoin('r.structure', 's12')
+ ->andWhere('tr987.code <> :codeExclu')->setParameter('codeExclu', 'IND')/*
->andWhere('s.niveau = :niv')->setParameter('niv', 2)*/;
return parent::getList($qb);
diff --git a/module/Application/src/Application/Service/TypeRolePhpRole.php b/module/Application/src/Application/Service/TypeRolePhpRole.php
new file mode 100644
index 0000000000000000000000000000000000000000..662ea0fdf2ac7c4d737c9e1922f7b17652255e57
--- /dev/null
+++ b/module/Application/src/Application/Service/TypeRolePhpRole.php
@@ -0,0 +1,100 @@
+<?php
+
+namespace Application\Service;
+
+use Doctrine\ORM\QueryBuilder;
+
+/**
+ * Description of TypeRolePhpRole
+ *
+ * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
+ */
+class TypeRolePhpRole extends AbstractEntityService
+{
+ /**
+ * retourne la classe des entités
+ *
+ * @return string
+ * @throws RuntimeException
+ */
+ public function getEntityClass()
+ {
+ return 'Application\Entity\Db\TypeRolePhpRole';
+ }
+
+ /**
+ * Retourne l'alias d'entité courante
+ *
+ * @return string
+ */
+ public function getAlias()
+ {
+ return 'trpr';
+ }
+
+ /**
+ *
+ * @param \Application\Entity\Db\TypeRole|string $typeRole
+ * @param QueryBuilder $qb
+ * @param string $alias
+ * @return QueryBuilder
+ */
+ public function finderByTypeRole($typeRole, QueryBuilder $qb = null, $alias = null)
+ {
+ list($qb, $alias) = $this->initQuery($qb, $alias);
+
+ if ($typeRole instanceof \Application\Entity\Db\TypeRole) {
+ $typeRole = $typeRole->getCode();
+ }
+
+ $qb
+ ->innerJoin("$alias.typeRole", $trAlias = uniqid('tr'))
+ ->andWhere("$trAlias.code = :code")->setParameter('code', $typeRole);
+
+ return $qb;
+ }
+
+ /**
+ *
+ * @param \Zend\Permissions\Acl\Role\RoleInterface|string $phpRole
+ * @param QueryBuilder $qb
+ * @param string $alias
+ * @return QueryBuilder
+ */
+ public function finderByPhpRole($phpRole, QueryBuilder $qb = null, $alias = null)
+ {
+ list($qb, $alias) = $this->initQuery($qb, $alias);
+
+ if ($phpRole instanceof \Zend\Permissions\Acl\Role\RoleInterface) {
+ $phpRole = $phpRole->getRoleId();
+ }
+
+ $qb
+ ->distinct()
+ ->andWhere("$alias.phpRoleId = :roleId")->setParameter('roleId', $phpRole);
+
+ return $qb;
+ }
+
+ /**
+ * Retourne une liste d'entités en fonction du QueryBuilder donné
+ *
+ * La liste de présente sous la forme d'un tableau associatif, dont les clés sont les ID des entités et les valeurs les entités elles-mêmes
+ *
+ * @param QueryBuilder|null $qb
+ * @param string|null $alias
+ * @return array
+ */
+// public function getList(QueryBuilder $qb=null, $alias=null )
+// {
+// list($qb, $alias) = $this->initQuery($qb, $alias);
+//
+// $qb
+// ->addSelect("tr, s")
+// ->distinct()
+// ->innerJoin('r.typeRole', $trAlias = uniqid('tr'))
+// ->andWhere("$trAlias.code <> :codeExclu")->setParameter('codeExclu', 'IND');
+//
+// return parent::getList($qb);
+// }
+}
\ No newline at end of file