Commit d12214d8 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Suppression du ConsoleController utilisé par une seule appli pour lancer une ligne SQL.

parent 28b88077
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
CHANGELOG
=========

6.0.11
-----

- Suppression du ConsoleController utilisé par une seule appli pour lancer une ligne SQL.

6.0.10
-----

+11 −31
Original line number Diff line number Diff line
@@ -2,30 +2,30 @@

namespace UnicaenApp;

use Locale;
use Unicaen\Console\Console;
use UnicaenApp\Controller\Plugin\MessengerPluginFactory;
use UnicaenApp\Controller\Plugin\Upload\UploaderPluginFactory;
use UnicaenApp\Mvc\Listener\MaintenanceListener;
use UnicaenApp\Mvc\Listener\ModalListener;
use UnicaenApp\Mvc\View\Http\ExceptionStrategy;
use UnicaenApp\Options\ModuleOptions;
use Laminas\EventManager\EventInterface;
use Laminas\Http\Request as HttpRequest;
use Laminas\Mvc\I18n\Translator;
use Laminas\ModuleManager\Feature\AutoloaderProviderInterface;
use Laminas\ModuleManager\Feature\BootstrapListenerInterface;
use Laminas\ModuleManager\Feature\ConfigProviderInterface;
use Laminas\ModuleManager\Feature\ControllerPluginProviderInterface;
use Laminas\ModuleManager\Feature\ServiceProviderInterface;
use Unicaen\Console\View\ExceptionStrategy as ConsoleExceptionStrategy;
use UnicaenApp\Mvc\View\Http\ExceptionStrategy as HttpExceptionStrategy;
use Laminas\Mvc\I18n\Translator;
use Laminas\ServiceManager\ServiceManager;
use Laminas\Session\Container;
use Laminas\Session\SessionManager;
use Laminas\Validator\AbstractValidator;
use Laminas\View\Helper\Navigation;
use Laminas\View\HelperPluginManager;
use Locale;
use Unicaen\Console\Console;
use Unicaen\Console\View\ExceptionStrategy as ConsoleExceptionStrategy;
use UnicaenApp\Controller\Plugin\MessengerPluginFactory;
use UnicaenApp\Controller\Plugin\Upload\UploaderPluginFactory;
use UnicaenApp\Mvc\Listener\MaintenanceListener;
use UnicaenApp\Mvc\Listener\ModalListener;
use UnicaenApp\Mvc\View\Http\ExceptionStrategy;
use UnicaenApp\Mvc\View\Http\ExceptionStrategy as HttpExceptionStrategy;
use UnicaenApp\Options\ModuleOptions;

define('__VENDOR_DIR__', dirname(dirname(__DIR__)));

@@ -227,24 +227,4 @@ 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'."],
        ];
    }

}
+0 −32
Original line number Diff line number Diff line
@@ -3,9 +3,7 @@
namespace UnicaenApp;

use Laminas\ServiceManager\Factory\InvokableFactory;
use Unicaen\Console\Router\Simple;
use UnicaenApp\Controller\CacheControllerFactory;
use UnicaenApp\Controller\ConsoleController;
use UnicaenApp\DeveloperTools\MessageCollectorService;
use UnicaenApp\DeveloperTools\MessageCollectorServiceFactory;
use UnicaenApp\Form\Element\SearchAndSelect2;
@@ -262,36 +260,6 @@ 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',
+0 −134
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);
    }
}
+0 −40
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;
    }
}