aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@owncloud.com>2016-02-05 12:24:54 +0100
committerJoas Schilling <nickvergessen@owncloud.com>2016-02-05 12:24:54 +0100
commit97b907335a5a681d5c7a096789a37011e69d01e5 (patch)
tree81648de27f20f83d994d6000240b299cbfed0382
parent0ed2108b7f3a8537643b89823d628e4db18ecf61 (diff)
downloadnextcloud-server-97b907335a5a681d5c7a096789a37011e69d01e5.tar.gz
nextcloud-server-97b907335a5a681d5c7a096789a37011e69d01e5.zip
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;
+ }
+}