Select Git revision
Bertrand Gauthier authored
Création de 3 nouveaux services (et factories associées) permettant d'accèder aux individus, structures et groupes LDAP (mappers). + Tests unitaires associés.
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Module.php 9.64 KiB
<?php
namespace UnicaenApp;
use \UnicaenApp\Options\ModuleOptions;
use Zend\EventManager\EventInterface;
use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\BootstrapListenerInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Zend\ModuleManager\Feature\ControllerPluginProviderInterface;
use Zend\ModuleManager\Feature\ServiceProviderInterface;
use Zend\ModuleManager\Feature\ViewHelperProviderInterface;
use Zend\View\HelperPluginManager;
use Zend\Mvc\Controller\PluginManager;
define('__VENDOR_DIR__', dirname(dirname(__DIR__)));
/**
* Point d'entrée du module.
*
* @author Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
*/
class Module implements
BootstrapListenerInterface,
ConfigProviderInterface,
ControllerPluginProviderInterface,
ViewHelperProviderInterface,
ServiceProviderInterface
{
/**
*
* @return array
* @see ConfigProviderInterface
*/
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
/**
*
* @return array
* @see AutoloaderProviderInterface
*/
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
/**
* This method is called once the MVC bootstrapping is complete,
* after the "loadModule.post" event, once $application->bootstrap() is called.
*
* @param EventInterface $e
* @see BootstrapListenerInterface
*/
public function onBootstrap(EventInterface $e) /* @var $e \Zend\Mvc\MvcEvent */
{
/* @var $application \Zend\Mvc\Application */
$application = $e->getApplication();
/* @var $services ServiceManager */
$services = $application->getServiceManager();
// // Set the translator for default validation messages
// $translator = $services->get('translator');
// \Zend\Validator\AbstractValidator::setDefaultTranslator($translator);
/* @var $vhm HelperPluginManager */
$vhm = $services->get('view_helper_manager');
/* @var $nvh Navigation */
$nvh = $vhm->get('navigation');
// Déclaration des plugins maison pour l'aide de vue de navigation
$invokables = array(
'menuPrincipal' => 'UnicaenApp\View\Helper\Navigation\MenuPrincipal',
'menuSecondaire' => 'UnicaenApp\View\Helper\Navigation\MenuSecondaire',
'menuContextuel' => 'UnicaenApp\View\Helper\Navigation\MenuContextuel',
'menuPiedDePage' => 'UnicaenApp\View\Helper\Navigation\MenuPiedDePage',
'filAriane' => 'UnicaenApp\View\Helper\Navigation\FilAriane',
'plan' => 'UnicaenApp\View\Helper\Navigation\Plan',
);
foreach ($invokables as $key => $value) {
$nvh->getPluginManager()->setInvokableClass($key, $value);
}
}
/**
* Expected to return \Zend\ServiceManager\Config object or array to
* seed such an object.
*
* @return array|\Zend\ServiceManager\Config
*/
public function getControllerPluginConfig()
{
return array(
'factories' => array(
'ldapPeopleService' => function (PluginManager $sm) {
return new Controller\Plugin\LdapPeopleService($sm->getServiceLocator()->get('ldap_people_service'));
},
'ldapStructureService' => function (PluginManager $sm) {
return new Controller\Plugin\LdapStructureService($sm->getServiceLocator()->get('ldap_structure_service'));
},
'ldapGroupService' => function (PluginManager $sm) {
return new Controller\Plugin\LdapGroupService($sm->getServiceLocator()->get('ldap_group_service'));
},
'mail' => function (PluginManager $sm) {
$options = $sm->getServiceLocator()->get('unicaen-app_module_options'); /* @var $options ModuleOptions */
$mailOptions = $options->getMail();
$transport = new \Zend\Mail\Transport\Smtp(new \Zend\Mail\Transport\SmtpOptions($mailOptions['transport_options']));
$plugin = new Controller\Plugin\Mail($transport);
if (isset($mailOptions['redirect_to'])) {
$plugin->setRedirectTo($mailOptions['redirect_to']);
}
if (isset($mailOptions['do_not_send'])) {
$plugin->setDoNotSend($mailOptions['do_not_send']);
}
return $plugin;
},
),
'invokables' => array(
'multipageForm' => '\UnicaenApp\Controller\Plugin\MultipageForm',
),
);
}
/**
*
* @return array
* @see ViewHelperProviderInterface
*/
public function getViewHelperConfig()
{
return array(
'factories' => array(
'appInfos' => function (HelperPluginManager $sm) {
$options = $sm->getServiceLocator()->get('unicaen-app_module_options'); /* @var $options ModuleOptions */
return new View\Helper\AppInfos($options->getAppInfos());
},
'appLink' => function (HelperPluginManager $sm) {
$sl = $sm->getServiceLocator();
$helper = new View\Helper\AppLink;
$router = \Zend\Console\Console::isConsole() ? 'HttpRouter' : 'Router';
$helper->setRouter($sl->get($router));
$match = $sl->get('application')->getMvcEvent()->getRouteMatch();
if ($match instanceof \Zend\Mvc\Router\RouteMatch) {
$helper->setRouteMatch($match);
}
return $helper;
},
'appConnection' => function (HelperPluginManager $sm) {
return new View\Helper\AppConnection();
},
'messenger' => function (HelperPluginManager $sm) {
return new View\Helper\Messenger();
},
// 'flashMessenger' => function (HelperPluginManager $sm) {
// return new View\Helper\FlashMessenger(
// $sm->getServiceLocator()->get('ControllerPluginManager')/*->get('flashMessenger')*/);
// },
'multipageFormFieldset' => function (HelperPluginManager $sm) {
return new Form\View\Helper\MultipageFormFieldset();
},
'multipageFormNav' => function (HelperPluginManager $sm) {
return new Form\View\Helper\MultipageFormNav();
},
'multipageFormRow' => function (HelperPluginManager $sm) {
return new Form\View\Helper\MultipageFormRow();
},
'multipageFormRecap' => function (HelperPluginManager $sm) {
return new Form\View\Helper\MultipageFormRecap();
},
'formDateInfSup' => function (HelperPluginManager $sm) {
return new Form\View\Helper\FormDateInfSup();
},
'formRowDateInfSup' => function (HelperPluginManager $sm) {
return new Form\View\Helper\FormRowDateInfSup();
},
'formLdapPeople' => function (HelperPluginManager $sm) {
return new Form\View\Helper\FormLdapPeople();
},
'formErrors' => function (HelperPluginManager $sm) {
return new Form\View\Helper\FormErrors();
},
)
);
}
/**
*
* @return array
* @see ServiceProviderInterface
*/
public function getServiceConfig()
{
return array(
'factories' => array(
// mapper d'accès aux individus de l'annuaire LDAP
'ldap_people_mapper' => 'UnicaenApp\Mapper\Ldap\PeopleFactory',
// mapper d'accès aux groupes de l'annuaire LDAP
'ldap_group_mapper' => 'UnicaenApp\Mapper\Ldap\GroupFactory',
// mapper d'accès aux structures de l'annuaire LDAP
'ldap_structure_mapper' => 'UnicaenApp\Mapper\Ldap\StructureFactory',
// service d'accès aux options de config de ce module
'unicaen-app_module_options' => function ($sm) {
$config = $sm->get('Configuration');
return new ModuleOptions(isset($config['unicaen-app']) ? $config['unicaen-app'] : array());
},
// service de manipulation des individus de l'annuaire LDAP
'ldap_people_service' => 'UnicaenApp\Service\Ldap\PeopleFactory',
// service de manipulation des groupes de l'annuaire LDAP
'ldap_group_service' => 'UnicaenApp\Service\Ldap\GroupFactory',
// service de manipulation des structures de l'annuaire LDAP
'ldap_structure_service' => 'UnicaenApp\Service\Ldap\StructureFactory',
// service de création de modules
'module_generator_service' => 'UnicaenApp\Service\Module\ModuleServiceFactory',
),
);
}
}