Commit 2dca4963 authored by David Surville's avatar David Surville
Browse files

Ajout d'une interface et d'un trait pour chaque service et utilisation dans les factories

parent 5ca3ac88
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -67,11 +67,11 @@ class Group extends Entity
     */
    public function getPeople($orderBy = null)
    {
        /* @var $people \UnicaenLdap\Service\People */
        $people = $this->getService()->getLdapServiceForEntityClass(\UnicaenLdap\Service\People::class);
        /* @var $peopleService \UnicaenLdap\Service\People */
        $peopleService = $this->getService()->getLdapPeopleService();

        /** @var People[] $result */
        $result = $people->getAllBy($this->get('member'), 'dn', $orderBy);
        $result = $peopleService->getAllBy($this->get('member'), 'dn', $orderBy);

        return $result;
    }
+16 −33
Original line number Diff line number Diff line
@@ -133,9 +133,9 @@ class People extends Entity
     */
    public function getGroups(DateTime $dateObservation = null, $orderBy = null)
    {
        $group = $this->getService()->getLdapServiceForEntityClass(\UnicaenLdap\Service\Group::class);
        $groupService = $this->getService()->getLdapGroupService();

        return $group->filterValids($group->getAllBy($this->get('memberOf'), 'dn', $orderBy), $dateObservation);
        return $groupService->filterValids($groupService->getAllBy($this->get('memberOf'), 'dn', $orderBy), $dateObservation);
    }

    /**
@@ -168,67 +168,50 @@ class People extends Entity
        return 0 === strpos($this->uid, 'i');
    }

    /**
     * @var \UnicaenLdap\Service\Structure
     */
    protected $ldapStructureService;

    /**
     * @return \UnicaenLdap\Service\Structure
     */
    protected function getLdapStructureService()
    {
        if (null === $this->ldapStructureService) {
            $this->ldapStructureService =
                $this->getService()->getLdapServiceForEntityClass(\UnicaenLdap\Service\Structure::class);
        }

        return $this->ldapStructureService;
    }

    /**
     * Retourne les structures auxquelles appartiennent la personne
     *
     * @return Structure[]
     * @return Entity[]|Structure[]
     */
    public function getEduPersonOrgUnit()
    {
        $structure = $this->getLdapStructureService();
        $structureService = $this->getService()->getLdapStructureService();
        $dn = $this->eduPersonOrgUnitDN;
        if (empty($dn)) return null;

        return $structure->getAllBy($dn, 'dn');
        return $structureService->getAllBy($dn, 'dn');
    }

    /**
     * Retourne la structure principale à laquelle appartient la personne
     *
     * @return Structure
     * @return Entity|Structure
     * @throws \UnicaenLdap\Exception
     */
    public function getEduPersonPrimaryOrgUnit()
    {
        $structure = $this->getLdapStructureService();
        $structureService = $this->getService()->getLdapStructureService();
        $dn = $this->eduPersonPrimaryOrgUnitDN;
        if (empty($dn)) return null;

        return $structure->getBy($dn, 'dn');
        return $structureService->getBy($dn, 'dn');
    }

    /**
     * Retourne la structure d'affectation de la personne
     *
     * @todo à terminer
     * @return Structure[]
     * @return Entity|Structure
     * @throws \Exception
     */
    public function getEntiteAffectation()
    {
        throw new \Exception('Méthode pas finie');
        $structure = $this->getLdapStructureService();
        $structureService = $this->getService()->getLdapStructureService();
        $codes = $this->getNode()->getAttribute('supannEntiteAffectation');
        var_dump($codes);

        return $structure->getBy($dn, 'dn');
        return $structureService->getBy($dn, 'dn');
    }

    /**
@@ -241,7 +224,7 @@ class People extends Entity
    public function getEntiteAffectationPrincipale()
    {
        throw new \Exception('Méthode pas finie');
        $structure = $this->getLdapStructureService();
        $structureService = $this->getService()->getLdapStructureService();

        $codes = [];
        $affectations = $this->getNode()->getAttribute('supannAffectation');
@@ -251,7 +234,7 @@ class People extends Entity
        $code = $this->supannAffectation;
        if (empty($dn)) return null;

        return $structure->getBy($dn, 'dn');
        return $structureService->getBy($dn, 'dn');
    }

    /**
@@ -264,13 +247,13 @@ class People extends Entity
    public function getAffectationDescription()
    {
        throw new \Exception('Méthode pas finie');
        $structure = $this->getLdapStructureService();
        $structureService = $this->getService()->getLdapStructureService();

        list($code, $description) = explode(';', $this->supannAffectation);
        $code = $this->supannAffectation;
        if (empty($dn)) return null;

        return $structure->getBy($dn, 'dn');
        return $structureService->getBy($dn, 'dn');
    }

    /**
+12 −32
Original line number Diff line number Diff line
@@ -17,8 +17,19 @@ use Zend\Stdlib\ErrorHandler;
 *
 * @author Laurent Lécluse <laurent.lecluse at unicaen.fr>
 */
abstract class AbstractService
abstract class AbstractService implements
    LdapPeopleServiceAwareInterface,
    LdapStructureServiceAwareInterface,
    LdapGroupServiceAwareInterface,
    LdapSystemServiceAwareInterface,
    LdapGenericServiceAwareInterface
{
    use LdapPeopleServiceAwareTrait;
    use LdapStructureServiceAwareTrait;
    use LdapGroupServiceAwareTrait;
    use LdapSystemServiceAwareTrait;
    use LdapGenericServiceAwareTrait;

    /**
     * Limite de recherche par défaut
     */
@@ -53,37 +64,6 @@ abstract class AbstractService
     */
    protected $count;

    /**
     * @var array
     */
    protected $ldapServicesByEntityClass = [
        \UnicaenLdap\Entity\People::class    => null,
        \UnicaenLdap\Entity\Structure::class => null,
        \UnicaenLdap\Entity\System::class    => null,
        \UnicaenLdap\Entity\Group::class     => null,
        \UnicaenLdap\Entity\Generic::class   => null,
    ];

    /**
     * @param array
     */
    public function setLdapServicesByEntityClass(array $ldapServicesByEntityClass)
    {
        $this->ldapServicesByEntityClass = $ldapServicesByEntityClass;
    }

    /**
     * @param string $entityClass
     * @return mixed
     */
    public function getLdapServiceForEntityClass($entityClass)
    {
        if (! isset($this->ldapServicesByEntityClass[$entityClass])) {
            throw new RuntimeException("Le service de recherche LDAP pour la classe d'entité $entityClass n'a pas été injecté.");
        }

        return $this->ldapServicesByEntityClass[$entityClass];
    }

    /**
     * Retourne le type du service
+26 −16
Original line number Diff line number Diff line
@@ -3,14 +3,11 @@
namespace UnicaenLdap\Service;

use Interop\Container\ContainerInterface;
use UnicaenLdap\Ldap;
use UnicaenLdap\Service;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

/**
 *
 *
 * @author Unicaen
 */
class GenericFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator)
@@ -18,22 +15,35 @@ class GenericFactory implements FactoryInterface
        return $this->__invoke($serviceLocator, '?');
    }

    /**
     * Create service
     *
     * @param ContainerInterface $container
     * @param string $requestedName
     * @param array|null $options
     * @return object|Generic
     */
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        $service = new Generic();

        /** @var \UnicaenLdap\Ldap $ldap */
        /**
         * @var Ldap $ldap
         * @var Service\People $ldapPeopleService
         * @var Service\Structure $ldapStructureService
         * @var Service\Group $ldapGroupService
         * @var Service\System $ldapSystemService
         */
        $ldap = $container->get('ldap');
        $ldapPeopleService      = $container->get('ldapServicePeople');
        $ldapStructureService   = $container->get('ldapServiceStructure');
        $ldapGroupService       = $container->get('ldapServiceGroup');
        $ldapSystemService      = $container->get('ldapServiceSystem');

        $service = new Generic();
        $service->setLdap($ldap);

        $service->setLdapServicesByEntityClass([
            \UnicaenLdap\Entity\People::class    => $container->get('ldapServicePeople'),
            \UnicaenLdap\Entity\Structure::class => $container->get('ldapServiceStructure'),
            \UnicaenLdap\Entity\System::class    => $container->get('ldapServiceSystem'),
            \UnicaenLdap\Entity\Group::class     => $container->get('ldapServiceGroup'),
//            \UnicaenLdap\Entity\Generic::class   => $container->get('ldapServiceGeneric'),
        ]);
        $service->setLdapPeopleService($ldapPeopleService);
        $service->setLdapStructureService($ldapStructureService);
        $service->setLdapGroupService($ldapGroupService);
        $service->setLdapSystemService($ldapSystemService);

        return $service;
    }
+26 −16
Original line number Diff line number Diff line
@@ -3,14 +3,11 @@
namespace UnicaenLdap\Service;

use Interop\Container\ContainerInterface;
use UnicaenLdap\Ldap;
use UnicaenLdap\Service;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

/**
 *
 *
 * @author Unicaen
 */
class GroupFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator)
@@ -18,22 +15,35 @@ class GroupFactory implements FactoryInterface
        return $this->__invoke($serviceLocator, '?');
    }

    /**
     * Create service
     *
     * @param ContainerInterface $container
     * @param string $requestedName
     * @param array|null $options
     * @return object|Group
     */
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        $service = new Group();

        /** @var \UnicaenLdap\Ldap $ldap */
        /**
         * @var Ldap $ldap
         * @var Service\People $ldapPeopleService
         * @var Service\Structure $ldapStructureService
         * @var Service\System $ldapSystemService
         * @var Service\Generic $ldapGenericService
         */
        $ldap = $container->get('ldap');
        $ldapPeopleService      = $container->get('ldapServicePeople');
        $ldapStructureService   = $container->get('ldapServiceStructure');
        $ldapSystemService      = $container->get('ldapServiceSystem');
        $ldapGenericService     = $container->get('ldapServiceGeneric');

        $service = new Group();
        $service->setLdap($ldap);

        $service->setLdapServicesByEntityClass([
            \UnicaenLdap\Entity\People::class    => $container->get('ldapServicePeople'),
            \UnicaenLdap\Entity\Structure::class => $container->get('ldapServiceStructure'),
            \UnicaenLdap\Entity\System::class    => $container->get('ldapServiceSystem'),
//            \UnicaenLdap\Entity\Group::class     => $container->get('ldapServiceGroup'),
            \UnicaenLdap\Entity\Generic::class   => $container->get('ldapServiceGeneric'),
        ]);
        $service->setLdapPeopleService($ldapPeopleService);
        $service->setLdapStructureService($ldapStructureService);
        $service->setLdapSystemService($ldapSystemService);
        $service->setLdapGenericService($ldapGenericService);

        return $service;
    }
Loading