From 97b907335a5a681d5c7a096789a37011e69d01e5 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 5 Feb 2016 12:24:54 +0100 Subject: [PATCH] Dispatch an event when a console command is run --- console.php | 2 +- lib/private/console/application.php | 21 +++++++-- lib/public/console/consoleevent.php | 69 +++++++++++++++++++++++++++++ 3 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 lib/public/console/consoleevent.php diff --git a/console.php b/console.php index 2073654fa8d..d08d400c051 100644 --- a/console.php +++ b/console.php @@ -80,7 +80,7 @@ try { echo "The process control (PCNTL) extensions are required in case you want to interrupt long running commands - see http://php.net/manual/en/book.pcntl.php" . PHP_EOL; } - $application = new Application(\OC::$server->getConfig()); + $application = new Application(\OC::$server->getConfig(), \OC::$server->getEventDispatcher(), \OC::$server->getRequest()); $application->loadCommands(new ConsoleOutput()); $application->run(); } catch (Exception $ex) { diff --git a/lib/private/console/application.php b/lib/private/console/application.php index c7d9c24d7cb..10ff69b1c80 100644 --- a/lib/private/console/application.php +++ b/lib/private/console/application.php @@ -25,25 +25,34 @@ namespace OC\Console; use OC_App; use OC_Defaults; +use OCP\Console\ConsoleEvent; use OCP\IConfig; +use OCP\IRequest; use Symfony\Component\Console\Application as SymfonyApplication; use Symfony\Component\Console\Input\ArgvInput; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; class Application { - /** - * @var IConfig - */ + /** @var IConfig */ private $config; + /** @var EventDispatcherInterface */ + private $dispatcher; + /** @var IRequest */ + private $request; /** * @param IConfig $config + * @param EventDispatcherInterface $dispatcher + * @param IRequest $request */ - public function __construct(IConfig $config) { + public function __construct(IConfig $config, EventDispatcherInterface $dispatcher, IRequest $request) { $defaults = new OC_Defaults; $this->config = $config; $this->application = new SymfonyApplication($defaults->getName(), \OC_Util::getVersionString()); + $this->dispatcher = $dispatcher; + $this->request = $request; } /** @@ -107,6 +116,10 @@ class Application { * @throws \Exception */ public function run(InputInterface $input = null, OutputInterface $output = null) { + $this->dispatcher->dispatch(ConsoleEvent::EVENT_RUN, new ConsoleEvent( + ConsoleEvent::EVENT_RUN, + $this->request->server['argv'] + )); return $this->application->run($input, $output); } } diff --git a/lib/public/console/consoleevent.php b/lib/public/console/consoleevent.php new file mode 100644 index 00000000000..b3f1229f0e8 --- /dev/null +++ b/lib/public/console/consoleevent.php @@ -0,0 +1,69 @@ + + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see + * + */ + +namespace OCP\Console; + +use Symfony\Component\EventDispatcher\Event; + +/** + * Class ConsoleEvent + * + * @package OCP\Console + * @since 9.0.0 + */ +class ConsoleEvent extends Event { + + const EVENT_RUN = 'OC\Console\Application::run'; + + /** @var string */ + protected $event; + + /** @var string[] */ + protected $arguments; + + /** + * DispatcherEvent constructor. + * + * @param string $event + * @param string[] $arguments + * @since 9.0.0 + */ + public function __construct($event, array $arguments) { + $this->event = $event; + $this->arguments = $arguments; + } + + /** + * @return string + * @since 9.0.0 + */ + public function getEvent() { + return $this->event; + } + + /** + * @return string[] + * @since 9.0.0 + */ + public function getArguments() { + return $this->arguments; + } +} -- 2.39.5