aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Müller <thomas.mueller@tmit.eu>2016-02-05 13:30:35 +0100
committerThomas Müller <thomas.mueller@tmit.eu>2016-02-05 13:30:35 +0100
commitf7e37984be2043dfa2aebb3dea853c4959fb315a (patch)
tree033a0720ed30c4d2a4af0ea46c2be66fb503ec2f
parente6a1e7814970cc108a7ad45f8c33a717895a67af (diff)
parent97b907335a5a681d5c7a096789a37011e69d01e5 (diff)
downloadnextcloud-server-f7e37984be2043dfa2aebb3dea853c4959fb315a.tar.gz
nextcloud-server-f7e37984be2043dfa2aebb3dea853c4959fb315a.zip
Merge pull request #22153 from owncloud/event-for-console-commands
Dispatch an event when a console command is run
-rw-r--r--console.php2
-rw-r--r--lib/private/console/application.php21
-rw-r--r--lib/public/console/consoleevent.php69
3 files changed, 87 insertions, 5 deletions
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 @@
+<?php
+/**
+ * @author Joas Schilling <nickvergessen@owncloud.com>
+ *
+ * @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 <http://www.gnu.org/licenses/>
+ *
+ */
+
+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;
+ }
+}