Loading SQL/01_schemas.sql +12 −0 Original line number Diff line number Diff line Loading @@ -312,3 +312,15 @@ alter table public.atelier_session add constraint atelier_session_site_site_id_fk foreign key (site_id) references public.site_site; /* site et ville d'un programme */ select prg.id, prg.libelle, at.libelle, ats.lieu, ss.libelle, sv.nom from atelier_programme prg join atelier_atelier_programme aap on prg.id = aap.programme_id join atelier_atelier at on aap.atelier_id = at.id join atelier_session ats on at.id = ats.atelier_id left join site_site ss on ats.site_id = ss.id left join site_ville sv on ss.ville_id = sv.id order by prg.id; ; No newline at end of file module/Atelier/src/Controller/ProgrammeController.php +12 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,8 @@ use Laminas\Http\Request; use Laminas\Http\Response; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Site\Service\Site\SiteServiceAwareTrait; use Site\Service\Ville\VilleServiceAwareTrait; class ProgrammeController extends AbstractActionController { Loading @@ -19,13 +21,22 @@ class ProgrammeController extends AbstractActionController use ProgrammeServiceAwareTrait; use ProgrammeFormAwareTrait; use SelectionnerAtelierFormAwareTrait; use VilleServiceAwareTrait; use SiteServiceAwareTrait; public function indexAction(): ViewModel { $programmes = $this->getProgrammeService()->getProgrammes('dateDebut', 'DESC', true); $params = $this->params()->fromQuery(); $villeAsOptions = $this->getVilleService()->getVillesAsOptions(); $siteAsOptions = $this->getSiteService()->getSitesAsOptions(); $programmes = $this->getProgrammeService()->getProgrammesWithFiltre($params,'dateDebut', 'DESC', true); return new ViewModel([ 'programmes' => $programmes, 'params' => $params, 'villeAsOptions' => $villeAsOptions, 'siteAsOptions' => $siteAsOptions, ]); } Loading module/Atelier/src/Controller/ProgrammeControllerFactory.php +9 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ use Atelier\Service\Programme\ProgrammeService; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; use Site\Service\Site\SiteService; use Site\Service\Ville\VilleService; class ProgrammeControllerFactory { Loading @@ -23,17 +25,24 @@ class ProgrammeControllerFactory { * @var ProgrammeService $programmeService * @var ProgrammeForm $programmeForm * @var SelectionnerAtelierForm $selectionnerAtelierForm * @var SiteService $siteService * @var VilleService $villeService */ $atelierService = $container->get(AtelierService::class); $programmeService = $container->get(ProgrammeService::class); $programmeForm = $container->get('FormElementManager')->get(ProgrammeForm::class); $selectionnerAtelierForm = $container->get('FormElementManager')->get(SelectionnerAtelierForm::class); $villeService = $container->get(VilleService::class); $siteService = $container->get(SiteService::class); $controller = new ProgrammeController(); $controller->setAtelierService($atelierService); $controller->setProgrammeService($programmeService); $controller->setProgrammeForm($programmeForm); $controller->setSelectionnerAtelierForm($selectionnerAtelierForm); $controller->setVilleService($villeService); $controller->setSiteService($siteService); return $controller; } } No newline at end of file module/Atelier/src/Form/Session/SessionForm.php +2 −2 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ class SessionForm extends Form 'type' => Text::class, 'name' => 'lieu', 'options' => [ 'label' => "Lieu <span class='icon icon-obligatoire' title='Champ obligatoire'></span> :", 'label' => "Lieu <span class='icon icon-obligatoire'></span> :", 'label_options' => [ 'disable_html_escape' => true, ], ], 'attributes' => [ Loading @@ -91,7 +91,7 @@ class SessionForm extends Form 'type' => Select::class, 'name' => 'site', 'options' => [ 'label' => "Site <span class='icon icon-obligatoire' title='Champ obligatoire'></span> :", 'label' => "Site <span class='icon ' title='Champ obligatoire'></span> :", 'label_options' => [ 'disable_html_escape' => true, ], 'empty_option' => "Sélectionner un site ...", 'value_options' => $this->getSiteService()->getSitesAsOptions(), Loading module/Atelier/src/Service/Programme/ProgrammeService.php +31 −0 Original line number Diff line number Diff line Loading @@ -101,4 +101,35 @@ class ProgrammeService { ; return $qb->getQuery()->getResult(); } /** @return Programme[] */ public function getProgrammesWithFiltre(array $params = [], string $champ = 'dateDebut', string $ordre = 'DESC', bool $withHisto = false): array { foreach ($params as $key => $value) { if ($value == null) { unset($params[$key]); } } $qb = $this->createQueryBuilder() ->orderBy('programme.' . $champ, $ordre); if (!$withHisto) { $qb = $qb->andWhere('programme.histoDestruction IS NULL'); } $qb->leftjoin('atelier.sessions', 'session'); $qb->leftjoin('session.site', 'site'); if(array_key_exists('site', $params) ) { $qb = $qb->andWhere('site.id = :site')->setParameter('site', $params['site']); } if(array_key_exists('ville',$params)){ $qb = $qb->join('site.ville', 'ville'); $qb = $qb->andWhere('ville.id = :ville')->setParameter('ville', $params['ville']); } return $qb->getQuery()->getResult(); } } No newline at end of file Loading
SQL/01_schemas.sql +12 −0 Original line number Diff line number Diff line Loading @@ -312,3 +312,15 @@ alter table public.atelier_session add constraint atelier_session_site_site_id_fk foreign key (site_id) references public.site_site; /* site et ville d'un programme */ select prg.id, prg.libelle, at.libelle, ats.lieu, ss.libelle, sv.nom from atelier_programme prg join atelier_atelier_programme aap on prg.id = aap.programme_id join atelier_atelier at on aap.atelier_id = at.id join atelier_session ats on at.id = ats.atelier_id left join site_site ss on ats.site_id = ss.id left join site_ville sv on ss.ville_id = sv.id order by prg.id; ; No newline at end of file
module/Atelier/src/Controller/ProgrammeController.php +12 −1 Original line number Diff line number Diff line Loading @@ -12,6 +12,8 @@ use Laminas\Http\Request; use Laminas\Http\Response; use Laminas\Mvc\Controller\AbstractActionController; use Laminas\View\Model\ViewModel; use Site\Service\Site\SiteServiceAwareTrait; use Site\Service\Ville\VilleServiceAwareTrait; class ProgrammeController extends AbstractActionController { Loading @@ -19,13 +21,22 @@ class ProgrammeController extends AbstractActionController use ProgrammeServiceAwareTrait; use ProgrammeFormAwareTrait; use SelectionnerAtelierFormAwareTrait; use VilleServiceAwareTrait; use SiteServiceAwareTrait; public function indexAction(): ViewModel { $programmes = $this->getProgrammeService()->getProgrammes('dateDebut', 'DESC', true); $params = $this->params()->fromQuery(); $villeAsOptions = $this->getVilleService()->getVillesAsOptions(); $siteAsOptions = $this->getSiteService()->getSitesAsOptions(); $programmes = $this->getProgrammeService()->getProgrammesWithFiltre($params,'dateDebut', 'DESC', true); return new ViewModel([ 'programmes' => $programmes, 'params' => $params, 'villeAsOptions' => $villeAsOptions, 'siteAsOptions' => $siteAsOptions, ]); } Loading
module/Atelier/src/Controller/ProgrammeControllerFactory.php +9 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ use Atelier\Service\Programme\ProgrammeService; use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerInterface; use Psr\Container\NotFoundExceptionInterface; use Site\Service\Site\SiteService; use Site\Service\Ville\VilleService; class ProgrammeControllerFactory { Loading @@ -23,17 +25,24 @@ class ProgrammeControllerFactory { * @var ProgrammeService $programmeService * @var ProgrammeForm $programmeForm * @var SelectionnerAtelierForm $selectionnerAtelierForm * @var SiteService $siteService * @var VilleService $villeService */ $atelierService = $container->get(AtelierService::class); $programmeService = $container->get(ProgrammeService::class); $programmeForm = $container->get('FormElementManager')->get(ProgrammeForm::class); $selectionnerAtelierForm = $container->get('FormElementManager')->get(SelectionnerAtelierForm::class); $villeService = $container->get(VilleService::class); $siteService = $container->get(SiteService::class); $controller = new ProgrammeController(); $controller->setAtelierService($atelierService); $controller->setProgrammeService($programmeService); $controller->setProgrammeForm($programmeForm); $controller->setSelectionnerAtelierForm($selectionnerAtelierForm); $controller->setVilleService($villeService); $controller->setSiteService($siteService); return $controller; } } No newline at end of file
module/Atelier/src/Form/Session/SessionForm.php +2 −2 Original line number Diff line number Diff line Loading @@ -78,7 +78,7 @@ class SessionForm extends Form 'type' => Text::class, 'name' => 'lieu', 'options' => [ 'label' => "Lieu <span class='icon icon-obligatoire' title='Champ obligatoire'></span> :", 'label' => "Lieu <span class='icon icon-obligatoire'></span> :", 'label_options' => [ 'disable_html_escape' => true, ], ], 'attributes' => [ Loading @@ -91,7 +91,7 @@ class SessionForm extends Form 'type' => Select::class, 'name' => 'site', 'options' => [ 'label' => "Site <span class='icon icon-obligatoire' title='Champ obligatoire'></span> :", 'label' => "Site <span class='icon ' title='Champ obligatoire'></span> :", 'label_options' => [ 'disable_html_escape' => true, ], 'empty_option' => "Sélectionner un site ...", 'value_options' => $this->getSiteService()->getSitesAsOptions(), Loading
module/Atelier/src/Service/Programme/ProgrammeService.php +31 −0 Original line number Diff line number Diff line Loading @@ -101,4 +101,35 @@ class ProgrammeService { ; return $qb->getQuery()->getResult(); } /** @return Programme[] */ public function getProgrammesWithFiltre(array $params = [], string $champ = 'dateDebut', string $ordre = 'DESC', bool $withHisto = false): array { foreach ($params as $key => $value) { if ($value == null) { unset($params[$key]); } } $qb = $this->createQueryBuilder() ->orderBy('programme.' . $champ, $ordre); if (!$withHisto) { $qb = $qb->andWhere('programme.histoDestruction IS NULL'); } $qb->leftjoin('atelier.sessions', 'session'); $qb->leftjoin('session.site', 'site'); if(array_key_exists('site', $params) ) { $qb = $qb->andWhere('site.id = :site')->setParameter('site', $params['site']); } if(array_key_exists('ville',$params)){ $qb = $qb->join('site.ville', 'ville'); $qb = $qb->andWhere('ville.id = :ville')->setParameter('ville', $params['ville']); } return $qb->getQuery()->getResult(); } } No newline at end of file