Commit 1f74d1fc authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Substitutions : ajout de pages d'informations concernant les triggers utilisés...

Substitutions : ajout de pages d'informations concernant les triggers utilisés en bdd, pour chaque thème.
parent 838dc54a
Loading
Loading
Loading
Loading
+77 −0
Changes for module/Substitution/config/module.config.php: 77 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -14,6 +14,8 @@ use Substitution\Controller\LogController;
use Substitution\Controller\LogControllerFactory;
use Substitution\Controller\SubstitutionController;
use Substitution\Controller\SubstitutionControllerFactory;
use Substitution\Controller\TriggerController;
use Substitution\Controller\TriggerControllerFactory;
use Substitution\Provider\Privilege\SubstitutionPrivileges;
use Substitution\Service\Doublon\Doctorant\DoctorantDoublonService;
use Substitution\Service\Doublon\Doctorant\DoctorantDoublonServiceFactory;
@@ -47,6 +49,8 @@ use Substitution\Service\Substitution\SubstitutionService;
use Substitution\Service\Substitution\SubstitutionServiceFactory;
use Substitution\Service\Substitution\UniteRecherche\UniteRechercheSubstitutionService;
use Substitution\Service\Substitution\UniteRecherche\UniteRechercheSubstitutionServiceFactory;
use Substitution\Service\Trigger\TriggerService;
use Substitution\Service\Trigger\TriggerServiceFactory;
use UnicaenAuth\Guard\PrivilegeController;

return [
@@ -109,6 +113,16 @@ return [
                        SubstitutionPrivileges::SUBSTITUTION_CONSULTER,
                    ],
                ],
                [
                    'controller' => TriggerController::class,
                    'action' => [
                        'accueil',
                        'lister',
                    ],
                    'privileges' => [
                        SubstitutionPrivileges::SUBSTITUTION_CONSULTER,
                    ],
                ],
                [
                    'controller' => LogController::class,
                    'action' => [
@@ -294,6 +308,31 @@ return [
                            ],
                        ],
                    ],
                    'trigger' => [
                        'type' => Literal::class,
                        'options' => [
                            'route' => '/trigger',
                            'defaults' => [
                                'controller' => TriggerController::class,
                                'action' => 'accueil',
                            ],
                        ],
                        'may_terminate' => true,
                        'child_routes' => [
                            'lister' => [
                                'type' => Segment::class,
                                'options' => [
                                    'route' => '/lister/:type',
                                    'constraints' => [
                                        'type' => Constants::TYPES_REGEXP_CONSTRAINT,
                                    ],
                                    'defaults' => [
                                        'action' => 'lister',
                                    ],
                                ],
                            ],
                        ],
                    ],
                    'log' => [
                        'type' => Literal::class,
                        'options' => [
@@ -444,6 +483,42 @@ return [
                                            ],
                                        ],
                                    ],
                                    'trigger' => [
                                        'label' => 'Triggers',
                                        'route' => 'substitution/trigger',
                                        'pages' => [
                                            'structure' => [
                                                'label' => 'Structures',
                                                'route' => 'substitution/trigger/lister',
                                                'params' => ['type' => Constants::TYPE_structure],
                                            ],
                                            'etablissement' => [
                                                'label' => 'Etablissements',
                                                'route' => 'substitution/trigger/lister',
                                                'params' => ['type' => Constants::TYPE_etablissement],
                                            ],
                                            'ecole_doct' => [
                                                'label' => 'Ecoles doctorales',
                                                'route' => 'substitution/trigger/lister',
                                                'params' => ['type' => Constants::TYPE_ecole_doct],
                                            ],
                                            'unite_rech' => [
                                                'label' => 'Unités de recherche',
                                                'route' => 'substitution/trigger/lister',
                                                'params' => ['type' => Constants::TYPE_unite_rech],
                                            ],
                                            'individu' => [
                                                'label' => 'Individus',
                                                'route' => 'substitution/trigger/lister',
                                                'params' => ['type' => Constants::TYPE_individu],
                                            ],
                                            'doctorant' => [
                                                'label' => 'Doctorants',
                                                'route' => 'substitution/trigger/lister',
                                                'params' => ['type' => Constants::TYPE_doctorant],
                                            ],
                                        ],
                                    ],
                                    'log' => [
                                        'label' => 'Logs',
                                        'route' => 'substitution/log',
@@ -494,6 +569,7 @@ return [
            SubstitutionController::class => SubstitutionControllerFactory::class,
            DoublonController::class => DoublonControllerFactory::class,
            ForeignKeyController::class => ForeignKeyControllerFactory::class,
            TriggerController::class => TriggerControllerFactory::class,
            LogController::class => LogControllerFactory::class,
        ],
    ],
@@ -516,6 +592,7 @@ return [
            UniteRechercheDoublonService::class => UniteRechercheDoublonServiceFactory::class,

            ForeignKeyService::class => ForeignKeyServiceFactory::class,
            TriggerService::class => TriggerServiceFactory::class,
            LogService::class => LogServiceFactory::class,
        ],
    ],
+39 −0
Changes for module/Substitution/src/Substitution/Controller/TriggerController.php: 39 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Substitution\Controller;

use Laminas\Mvc\Controller\AbstractActionController;
use Laminas\Mvc\Plugin\FlashMessenger\FlashMessenger;
use Laminas\View\Model\ViewModel;
use Substitution\Service\Trigger\TriggerServiceAwareTrait;
use Substitution\TypeAwareTrait;

/**
 * @method FlashMessenger flashMessenger()
 */
class TriggerController extends AbstractActionController
{
    use TypeAwareTrait;
    use TriggerServiceAwareTrait;

    public function accueilAction(): array
    {
        return [];
    }

    /**
     * @throws \Doctrine\DBAL\Exception
     */
    public function listerAction(): ViewModel
    {
        $type = $this->getRequestedType();

        $result = $this->triggerService->findAllTriggersForType($type);

        return new ViewModel([
            'type' => $type,
            'result' => $result,
        ]);
    }

}
 No newline at end of file
+24 −0
Changes for module/Substitution/src/Substitution/Controller/TriggerControllerFactory.php: 24 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Substitution\Controller;

use Psr\Container\ContainerInterface;
use Substitution\Service\Trigger\TriggerService;

class TriggerControllerFactory
{
    /**
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    public function __invoke(ContainerInterface $container) : TriggerController
    {
        $controller = new TriggerController();

        /** @var \Substitution\Service\Trigger\TriggerService $triggerService */
        $triggerService = $container->get(TriggerService::class);
        $controller->setTriggerService($triggerService);

        return $controller;
    }
}
 No newline at end of file
+42 −0
Changes for module/Substitution/src/Substitution/Service/Trigger/TriggerService.php: 42 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Substitution\Service\Trigger;

use Doctrine\DBAL\Result;
use UnicaenApp\Service\EntityManagerAwareTrait;

class TriggerService
{
    use EntityManagerAwareTrait;

    /**
     * @throws \Doctrine\DBAL\Exception
     */
    public function findAllTriggersForType(string $type): Result
    {
        return $this->entityManager->getConnection()->executeQuery(
            $this->generateSqlToFindAllTriggers($type)
        );
    }

    private function generateSqlToFindAllTriggers(string $type): string
    {
        return <<<EOS
select 
--        event_object_schema as table_schema,
       event_object_table as table_name,
--        trigger_schema,
       trigger_name,
       string_agg(event_manipulation, ', ') as event,
       action_timing as activation,
--        action_condition as condition,
--        action_statement as definition,
       tgenabled <> 'D' enabled
from information_schema.triggers
join pg_trigger on tgname = trigger_name
where trigger_name in ('substit_trigger_{$type}', 'substit_trigger_on_substit_{$type}')
group by 1,2,4,5
order by trigger_name;
EOS;
    }
}
 No newline at end of file
+13 −0
Changes for module/Substitution/src/Substitution/Service/Trigger/TriggerServiceAwareTrait.php: 13 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace Substitution\Service\Trigger;

trait TriggerServiceAwareTrait
{
    protected TriggerService $triggerService;

    public function setTriggerService(TriggerService $triggerService): void
    {
        $this->triggerService = $triggerService;
    }
}
 No newline at end of file
Loading