Commit 8ff3f131 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

UnicaenConsole opérationnel et installé partout

dépendances à jour
parent 41ef2fe2
Loading
Loading
Loading
Loading
Loading
+24 −3
Changes for Module.php: 24 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
namespace UnicaenApp;

use Locale;
use Unicaen\Console\Console;
use UnicaenApp\Controller\Plugin\MessengerPluginFactory;
use UnicaenApp\Controller\Plugin\Upload\UploaderPluginFactory;
use UnicaenApp\Mvc\Listener\MaintenanceListener;
@@ -17,7 +18,7 @@ use Laminas\ModuleManager\Feature\BootstrapListenerInterface;
use Laminas\ModuleManager\Feature\ConfigProviderInterface;
use Laminas\ModuleManager\Feature\ControllerPluginProviderInterface;
use Laminas\ModuleManager\Feature\ServiceProviderInterface;
use UnicaenApp\Mvc\View\Console\ExceptionStrategy as ConsoleExceptionStrategy;
use Unicaen\Console\View\ExceptionStrategy as ConsoleExceptionStrategy;
use UnicaenApp\Mvc\View\Http\ExceptionStrategy as HttpExceptionStrategy;
use Laminas\ServiceManager\ServiceManager;
use Laminas\Session\Container;
@@ -147,7 +148,7 @@ class Module implements
     */
    public function bootstrapSession($e)
    {
        if (Util::isConsole()) {
        if (Console::isConsole()) {
            return;
        }

@@ -173,7 +174,7 @@ class Module implements
     */
    public function appendSessionRefreshJs(EventInterface $e)
    {
        if (Util::isConsole()) {
        if (Console::isConsole()) {
            return;
        }

@@ -226,4 +227,24 @@ class Module implements
    {
        return [];
    }

    public function getConsoleUsage($console)
    {
        return [
            // command
            'run-sql-script --path= [--logfile=] [--connection=]' => "Exécuter un script SQL",
            // parameters
            ['--path',       "Requis. Chemin vers le script SQL à exécuter."],
            ['--logfile',    "Facultatif. Chemin du fichier des logs d'exécution du script. Par défaut, il est généré."],
            ['--connection', "Facultatif. Identifiant de la connexion Doctrine. Par défaut : 'orm_default'."],

            // command
            'run-sql-query --sql= [--logfile=] [--connection=]' => "Exécuter une requête SQL",
            // parameters
            ['--sql',        "Requis. Requête SQL à exécuter. Ex: \"begin DBMS_MVIEW.REFRESH('MV_RECHERCHE_THESE'); end;\"."],
            ['--logfile',    "Facultatif. Chemin du fichier des logs d'exécution. Par défaut, il est généré."],
            ['--connection', "Facultatif. Identifiant de la connexion Doctrine. Par défaut : 'orm_default'."],
        ];
    }

}
+1 −0
Changes for composer.json: 1 added line, 0 removed lines.
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@
        "laminas/laminas-serializer": "^2.12",
        "laminas/laminas-servicemanager": "^3.10",
        "laminas/laminas-session": "^2.12",
        "laminas/laminas-text": "^2.9",
        "laminas/laminas-view": "^2.16",
        "laminas/laminas-dependency-plugin": "^2.2",
        "unicaen/console": "dev-main"
+39 −0
Changes for config/module.config.php: 39 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -3,6 +3,8 @@
namespace UnicaenApp;

use UnicaenApp\Controller\CacheControllerFactory;
use UnicaenApp\Controller\ConsoleController;
use UnicaenApp\Controller\ConsoleControllerFactory;
use UnicaenApp\Controller\InstadiaControllerFactory;
use UnicaenApp\Form\View\Helper\FormControlGroup;
use UnicaenApp\Form\View\Helper\FormControlGroupFactory;
@@ -44,6 +46,8 @@ use UnicaenApp\View\Helper\Upload\UploaderHelper;
use UnicaenApp\View\Helper\Upload\UploaderHelperFactory;
use UnicaenApp\View\Helper\UserProfileSelect;
use UnicaenApp\View\Helper\UserProfileSelectFactory;
use Unicaen\Console\Router\Simple;


return [
    'router'          => [
@@ -245,6 +249,41 @@ return [
        ],
    ],



    'console'         => [
        'router'       => [
            'routes' => [
                'run-sql-script' => [
                    'type'    => Simple::class,
                    'options' => [
                        'route'    => 'run-sql-script --path= [--logfile=] [--connection=]',
                        'defaults' => [
                            'controller' => ConsoleController::class,
                            'action'     => 'runSQLScript',
                        ],
                    ],
                ],
                'run-sql-query'  => [
                    'type'    => Simple::class,
                    'options' => [
                        'route'    => 'run-sql-query --sql= [--logfile=] [--connection=]',
                        'defaults' => [
                            'controller' => ConsoleController::class,
                            'action'     => 'runSQLQuery',
                        ],
                    ],
                ],
            ],
        ],
        'view_manager' => [
            'display_not_found_reason' => true,
            'display_exceptions'       => true,
        ],
    ],



    'service_manager' => [
        'factories'          => [
            'translator'                  => 'Laminas\I18n\Translator\TranslatorServiceFactory',
+134 −0
Changes for src/UnicaenApp/Controller/ConsoleController.php: 134 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace UnicaenApp\Controller;

use Doctrine\DBAL\Connection;
use Exception;
use Psr\Container\ContainerInterface;
use UnicaenApp\Exception\RuntimeException;
use UnicaenApp\Service\SQL\RunSQLServiceAwareTrait;
use Laminas\Log\Filter\Priority;
use Laminas\Log\Formatter\Simple;
use Laminas\Log\Logger;
use Laminas\Log\LoggerAwareTrait;
use Laminas\Log\Writer\Stream;
use Unicaen\Console\Controller\AbstractConsoleController;


class ConsoleController extends AbstractConsoleController
{
    use LoggerAwareTrait;
    use RunSQLServiceAwareTrait;

    /**
     * @var ContainerInterface
     */
    protected $container;

    /**
     * @var Connection
     */
    protected $connection;

    /**
     * @var Logger
     */
    protected $logger;

    /**
     * @param ContainerInterface $container
     * @return self
     */
    public function setContainer(ContainerInterface $container): self
    {
        $this->container = $container;
        return $this;
    }

    /**
     * @throws Exception
     */
    public function runSQLQueryAction()
    {
        $sql = $this->params('sql');
        $connection = $this->params('connection', 'orm_default');
        $logFilepath = $this->params('logfile');

        $this->createLogger();
        $this->logger->info("### Exécution de commandes SQL ###");
        $this->logger->info(date_format(date_create(), 'd/m/Y H:i:s'));

        $this->initConnection($connection);

        $this->runSQLService->setLogger($this->logger);
        $result = $this->runSQLService->runSQLQuery($sql, $this->connection, $logFilepath);

        if ($result->isSuccess()) {
            $this->logger->info("Exécution terminée avec succès.");
        } else {
            $this->logger->info("OUPS, UNE ERREUR EST SURVENUE !");
        }

        $this->logger->info("Durée : " . $result->getDurationInSec() . " sec");

        if (! $result->isSuccess()) {
            exit(1);
        }
    }

    /**
     * @throws Exception
     */
    public function runSQLScriptAction()
    {
        $path = $this->params('path');
        $connection = $this->params('connection', 'orm_default');
        $logFilepath = $this->params('logfile');

        $this->createLogger();
        $this->logger->info("### Exécution de scripts SQL ###");
        $this->logger->info(date_format(date_create(), 'd/m/Y H:i:s'));

        $this->initConnection($connection);

        $this->runSQLService->setLogger($this->logger);
        $result = $this->runSQLService->runSQLScript($path, $this->connection, $logFilepath);

        if ($result->isSuccess()) {
            $this->logger->info("Exécution terminée avec succès.");
        } else {
            $this->logger->info("OUPS, UNE ERREUR EST SURVENUE !");
        }

        $this->logger->info("Durée : " . $result->getDurationInSec() . " sec");

        if (! $result->isSuccess()) {
            exit(1);
        }
    }

    private function createLogger()
    {
        $filter = new Priority(Logger::INFO);

        $format = '%message%'; // '%timestamp% %priorityName% (%priority%): %message%' . PHP_EOL;
        $formatter = new Simple($format);

        $writer = new Stream('php://output');
        $writer->addFilter($filter);
        $writer->setFormatter($formatter);

        $this->logger = new Logger();
        $this->logger->addWriter($writer);
    }

    protected function initConnection(string $name)
    {
        $serviceName = "doctrine.connection.$name";
        if (! $this->container->has($serviceName)) {
            throw new RuntimeException("Connection Doctrine introuvable : $serviceName");
        }

        $this->connection = $this->container->get($serviceName);
    }
}
+40 −0
Changes for src/UnicaenApp/Controller/ConsoleControllerFactory.php: 40 added lines, 0 removed lines.
Original line number Diff line number Diff line
<?php

namespace UnicaenApp\Controller;

use Psr\Container\ContainerInterface;
use UnicaenApp\Service\SQL\RunSQLService;
use Laminas\Log\Logger;
use Laminas\Log\LoggerInterface;
use Laminas\Log\Writer\Noop;
use Laminas\ServiceManager\Factory\FactoryInterface;

class ConsoleControllerFactory implements FactoryInterface
{
    /**
     * @inheritDoc
     */
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        /** @var RunSQLService $runSQLService */
        $runSQLService = $container->get(RunSQLService::class);

        $controller = new ConsoleController();
        $controller->setLogger($this->createLogger());
        $controller->setContainer($container);
        $controller->setRunSQLService($runSQLService);

        return $controller;
    }

    /**
     * @return LoggerInterface
     */
    private function createLogger()
    {
        $logger = new Logger();
        $logger->addWriter(new Noop());

        return $logger;
    }
}
Loading