]> source.dussan.org Git - nextcloud-server.git/commitdiff
Dispatch an event when a console command is run
authorJoas Schilling <nickvergessen@owncloud.com>
Fri, 5 Feb 2016 11:24:54 +0000 (12:24 +0100)
committerJoas Schilling <nickvergessen@owncloud.com>
Fri, 5 Feb 2016 11:24:54 +0000 (12:24 +0100)
console.php
lib/private/console/application.php
lib/public/console/consoleevent.php [new file with mode: 0644]

index 2073654fa8df4a7ae99e29c32db6a652bdd094d3..d08d400c051497c11212dcf742bfa93889d4a840 100644 (file)
@@ -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) {
index c7d9c24d7cbf54318320de2a4fc370ab701fc789..10ff69b1c80bd5dc8590041e6f3e54a1c190d6e7 100644 (file)
@@ -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 (file)
index 0000000..b3f1229
--- /dev/null
@@ -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;
+       }
+}