]> source.dussan.org Git - nextcloud-server.git/commitdiff
Add BeforeTemplateRenderedEvent for files_sharing 21815/head
authorJulius Härtl <jus@bitgrid.net>
Mon, 13 Jul 2020 14:05:11 +0000 (16:05 +0200)
committerMorris Jobke <hey@morrisjobke.de>
Wed, 15 Jul 2020 11:55:26 +0000 (13:55 +0200)
Signed-off-by: Julius Härtl <jus@bitgrid.net>
apps/files_sharing/composer/composer/autoload_classmap.php
apps/files_sharing/composer/composer/autoload_static.php
apps/files_sharing/lib/AppInfo/Application.php
apps/files_sharing/lib/Controller/ShareController.php
apps/files_sharing/lib/Event/BeforeTemplateRenderedEvent.php [new file with mode: 0644]
apps/files_sharing/lib/Listener/LegacyBeforeTemplateRenderedListener.php [new file with mode: 0644]
apps/files_sharing/tests/Controller/ShareControllerTest.php

index 046f626d04f8f76ad3cd89855174790b6c3e9fb8..5203b80a1bd13100cfb2afd20080e40f49c35378 100644 (file)
@@ -34,6 +34,7 @@ return array(
     'OCA\\Files_Sharing\\Controller\\ShareInfoController' => $baseDir . '/../lib/Controller/ShareInfoController.php',
     'OCA\\Files_Sharing\\Controller\\ShareesAPIController' => $baseDir . '/../lib/Controller/ShareesAPIController.php',
     'OCA\\Files_Sharing\\DeleteOrphanedSharesJob' => $baseDir . '/../lib/DeleteOrphanedSharesJob.php',
+    'OCA\\Files_Sharing\\Event\\BeforeTemplateRenderedEvent' => $baseDir . '/../lib/Event/BeforeTemplateRenderedEvent.php',
     'OCA\\Files_Sharing\\Exceptions\\BrokenPath' => $baseDir . '/../lib/Exceptions/BrokenPath.php',
     'OCA\\Files_Sharing\\Exceptions\\S2SException' => $baseDir . '/../lib/Exceptions/S2SException.php',
     'OCA\\Files_Sharing\\Exceptions\\SharingRightsException' => $baseDir . '/../lib/Exceptions/SharingRightsException.php',
@@ -48,6 +49,7 @@ return array(
     'OCA\\Files_Sharing\\Helper' => $baseDir . '/../lib/Helper.php',
     'OCA\\Files_Sharing\\Hooks' => $baseDir . '/../lib/Hooks.php',
     'OCA\\Files_Sharing\\ISharedStorage' => $baseDir . '/../lib/ISharedStorage.php',
+    'OCA\\Files_Sharing\\Listener\\LegacyBeforeTemplateRenderedListener' => $baseDir . '/../lib/Listener/LegacyBeforeTemplateRenderedListener.php',
     'OCA\\Files_Sharing\\Listener\\LoadAdditionalListener' => $baseDir . '/../lib/Listener/LoadAdditionalListener.php',
     'OCA\\Files_Sharing\\Listener\\LoadSidebarListener' => $baseDir . '/../lib/Listener/LoadSidebarListener.php',
     'OCA\\Files_Sharing\\Listener\\ShareInteractionListener' => $baseDir . '/../lib/Listener/ShareInteractionListener.php',
index c1e887445823ad5ae7ac78b5cdf62198c76d7cd3..56036b035eb8e76427aee9f76b2a4b0eef8172dc 100644 (file)
@@ -49,6 +49,7 @@ class ComposerStaticInitFiles_Sharing
         'OCA\\Files_Sharing\\Controller\\ShareInfoController' => __DIR__ . '/..' . '/../lib/Controller/ShareInfoController.php',
         'OCA\\Files_Sharing\\Controller\\ShareesAPIController' => __DIR__ . '/..' . '/../lib/Controller/ShareesAPIController.php',
         'OCA\\Files_Sharing\\DeleteOrphanedSharesJob' => __DIR__ . '/..' . '/../lib/DeleteOrphanedSharesJob.php',
+        'OCA\\Files_Sharing\\Event\\BeforeTemplateRenderedEvent' => __DIR__ . '/..' . '/../lib/Event/BeforeTemplateRenderedEvent.php',
         'OCA\\Files_Sharing\\Exceptions\\BrokenPath' => __DIR__ . '/..' . '/../lib/Exceptions/BrokenPath.php',
         'OCA\\Files_Sharing\\Exceptions\\S2SException' => __DIR__ . '/..' . '/../lib/Exceptions/S2SException.php',
         'OCA\\Files_Sharing\\Exceptions\\SharingRightsException' => __DIR__ . '/..' . '/../lib/Exceptions/SharingRightsException.php',
@@ -63,6 +64,7 @@ class ComposerStaticInitFiles_Sharing
         'OCA\\Files_Sharing\\Helper' => __DIR__ . '/..' . '/../lib/Helper.php',
         'OCA\\Files_Sharing\\Hooks' => __DIR__ . '/..' . '/../lib/Hooks.php',
         'OCA\\Files_Sharing\\ISharedStorage' => __DIR__ . '/..' . '/../lib/ISharedStorage.php',
+        'OCA\\Files_Sharing\\Listener\\LegacyBeforeTemplateRenderedListener' => __DIR__ . '/..' . '/../lib/Listener/LegacyBeforeTemplateRenderedListener.php',
         'OCA\\Files_Sharing\\Listener\\LoadAdditionalListener' => __DIR__ . '/..' . '/../lib/Listener/LoadAdditionalListener.php',
         'OCA\\Files_Sharing\\Listener\\LoadSidebarListener' => __DIR__ . '/..' . '/../lib/Listener/LoadSidebarListener.php',
         'OCA\\Files_Sharing\\Listener\\ShareInteractionListener' => __DIR__ . '/..' . '/../lib/Listener/ShareInteractionListener.php',
index 34cde50c43843cffdcdf706d4fa3d737c22c4913..acf1462601d56a7f7494c53ef44339c71d1dad0d 100644 (file)
@@ -32,7 +32,9 @@ namespace OCA\Files_Sharing\AppInfo;
 
 use OC\AppFramework\Utility\SimpleContainer;
 use OCA\Files_Sharing\Capabilities;
+use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent;
 use OCA\Files_Sharing\External\Manager;
+use OCA\Files_Sharing\Listener\LegacyBeforeTemplateRenderedListener;
 use OCA\Files_Sharing\Listener\LoadAdditionalListener;
 use OCA\Files_Sharing\Listener\LoadSidebarListener;
 use OCA\Files_Sharing\Listener\ShareInteractionListener;
@@ -138,6 +140,7 @@ class Application extends App {
        protected function registerEventsScripts(IEventDispatcher $dispatcher) {
                // sidebar and files scripts
                $dispatcher->addServiceListener(LoadAdditionalScriptsEvent::class, LoadAdditionalListener::class);
+               $dispatcher->addServiceListener(BeforeTemplateRenderedEvent::class, LegacyBeforeTemplateRenderedListener::class);
                $dispatcher->addServiceListener(LoadSidebar::class, LoadSidebarListener::class);
                $dispatcher->addServiceListener(ShareCreatedEvent::class, ShareInteractionListener::class);
                $dispatcher->addListener('\OCP\Collaboration\Resources::loadAdditionalScripts', function () {
index 9e4e591e40dc17c350980d6630a7606779900dd4..359382441d6923935e09c30431914d76ce07f765 100644 (file)
@@ -48,6 +48,7 @@ use OC_Util;
 use OC\Security\CSP\ContentSecurityPolicy;
 use OCA\FederatedFileSharing\FederatedShareProvider;
 use OCA\Files_Sharing\Activity\Providers\Downloads;
+use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent;
 use OCA\Viewer\Event\LoadViewer;
 use OCP\Accounts\IAccountManager;
 use OCP\AppFramework\AuthPublicShareController;
@@ -58,6 +59,7 @@ use OCP\AppFramework\Http\Template\PublicTemplateResponse;
 use OCP\AppFramework\Http\Template\SimpleMenuAction;
 use OCP\AppFramework\Http\TemplateResponse;
 use OCP\Defaults;
+use OCP\EventDispatcher\IEventDispatcher;
 use OCP\Files\Folder;
 use OCP\Files\IRootFolder;
 use OCP\Files\NotFoundException;
@@ -75,8 +77,6 @@ use OCP\Share\Exceptions\ShareNotFound;
 use OCP\Share\IManager as ShareManager;
 use OCP\Share\IShare;
 use OCP\Template;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-use Symfony\Component\EventDispatcher\GenericEvent;
 
 /**
  * Class ShareController
@@ -101,7 +101,7 @@ class ShareController extends AuthPublicShareController {
        protected $federatedShareProvider;
        /** @var IAccountManager */
        protected $accountManager;
-       /** @var EventDispatcherInterface */
+       /** @var IEventDispatcher */
        protected $eventDispatcher;
        /** @var IL10N */
        protected $l10n;
@@ -127,7 +127,7 @@ class ShareController extends AuthPublicShareController {
         * @param IRootFolder $rootFolder
         * @param FederatedShareProvider $federatedShareProvider
         * @param IAccountManager $accountManager
-        * @param EventDispatcherInterface $eventDispatcher
+        * @param IEventDispatcher $eventDispatcher
         * @param IL10N $l10n
         * @param Defaults $defaults
         */
@@ -144,7 +144,7 @@ class ShareController extends AuthPublicShareController {
                                                                IRootFolder $rootFolder,
                                                                FederatedShareProvider $federatedShareProvider,
                                                                IAccountManager $accountManager,
-                                                               EventDispatcherInterface $eventDispatcher,
+                                                               IEventDispatcher $eventDispatcher,
                                                                IL10N $l10n,
                                                                Defaults $defaults) {
                parent::__construct($appName, $request, $session, $urlGenerator);
@@ -173,8 +173,7 @@ class ShareController extends AuthPublicShareController {
        public function showAuthenticate(): TemplateResponse {
                $templateParameters = ['share' => $this->share];
 
-               $event = new GenericEvent(null, $templateParameters);
-               $this->eventDispatcher->dispatch('OCA\Files_Sharing::loadAdditionalScripts::publicShareAuth', $event);
+               $this->eventDispatcher->dispatchTyped(new BeforeTemplateRenderedEvent($this->share, BeforeTemplateRenderedEvent::SCOPE_PUBLIC_SHARE_AUTH));
 
                $response = new TemplateResponse('core', 'publicshareauth', $templateParameters, 'guest');
                if ($this->share->getSendPasswordByTalk()) {
@@ -193,8 +192,7 @@ class ShareController extends AuthPublicShareController {
        protected function showAuthFailed(): TemplateResponse {
                $templateParameters = ['share' => $this->share, 'wrongpw' => true];
 
-               $event = new GenericEvent(null, $templateParameters);
-               $this->eventDispatcher->dispatch('OCA\Files_Sharing::loadAdditionalScripts::publicShareAuth', $event);
+               $this->eventDispatcher->dispatchTyped(new BeforeTemplateRenderedEvent($this->share, BeforeTemplateRenderedEvent::SCOPE_PUBLIC_SHARE_AUTH));
 
                $response = new TemplateResponse('core', 'publicshareauth', $templateParameters, 'guest');
                if ($this->share->getSendPasswordByTalk()) {
@@ -478,7 +476,7 @@ class ShareController extends AuthPublicShareController {
 
                        // Load Viewer scripts
                        if (class_exists(LoadViewer::class)) {
-                               $this->eventDispatcher->dispatch(LoadViewer::class, new LoadViewer());
+                               $this->eventDispatcher->dispatchTyped(new LoadViewer());
                        }
                }
 
@@ -490,8 +488,7 @@ class ShareController extends AuthPublicShareController {
                \OCP\Util::addHeader('meta', ['property' => "og:type", 'content' => "object"]);
                \OCP\Util::addHeader('meta', ['property' => "og:image", 'content' => $ogPreview]);
 
-               $event = new GenericEvent(null, ['share' => $share]);
-               $this->eventDispatcher->dispatch('OCA\Files_Sharing::loadAdditionalScripts', $event);
+               $this->eventDispatcher->dispatchTyped(new BeforeTemplateRenderedEvent($share));
 
                $csp = new \OCP\AppFramework\Http\ContentSecurityPolicy();
                $csp->addAllowedFrameDomain('\'self\'');
diff --git a/apps/files_sharing/lib/Event/BeforeTemplateRenderedEvent.php b/apps/files_sharing/lib/Event/BeforeTemplateRenderedEvent.php
new file mode 100644 (file)
index 0000000..5f40eac
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>
+ *
+ * @author Julius Härtl <jus@bitgrid.net>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Sharing\Event;
+
+use OCP\EventDispatcher\Event;
+use OCP\Share\IShare;
+
+class BeforeTemplateRenderedEvent extends Event {
+       public const SCOPE_PUBLIC_SHARE_AUTH = 'publicShareAuth';
+
+       /** @var IShare */
+       private $share;
+       /** @var string|null */
+       private $scope;
+
+       public function __construct(IShare $share, ?string $scope = null) {
+               parent::__construct();
+
+               $this->share = $share;
+               $this->scope = $scope;
+       }
+
+       public function getShare(): IShare {
+               return $this->share;
+       }
+
+       public function getScope(): ?string {
+               return $this->scope;
+       }
+}
diff --git a/apps/files_sharing/lib/Listener/LegacyBeforeTemplateRenderedListener.php b/apps/files_sharing/lib/Listener/LegacyBeforeTemplateRenderedListener.php
new file mode 100644 (file)
index 0000000..fb651f0
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2019, Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Joas Schilling <coding@schilljs.com>
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * 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
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Files_Sharing\Listener;
+
+use OC\EventDispatcher\SymfonyAdapter;
+use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent;
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\IEventListener;
+use Symfony\Component\EventDispatcher\GenericEvent;
+
+class LegacyBeforeTemplateRenderedListener implements IEventListener {
+
+       /** @var SymfonyAdapter */
+       private $dispatcher;
+
+       public function __construct(SymfonyAdapter $dispatcher) {
+               $this->dispatcher = $dispatcher;
+       }
+
+       public function handle(Event $event): void {
+               if (!($event instanceof BeforeTemplateRenderedEvent)) {
+                       return;
+               }
+
+               $eventName = 'OCA\Files_Sharing::loadAdditionalScripts';
+
+               if ($event->getScope() !== null) {
+                       $eventName .= '::' . $event->getScope();
+               }
+
+               $legacyEvent = new GenericEvent(null, ['share' => $event->getShare()]);
+               $this->dispatcher->dispatch($eventName, $legacyEvent);
+       }
+}
index 2f1df959afbd5ee2acd6bec141613f8d056fecba..18b663f09bc509c7eec0d2b914670eaf62a5b55b 100644 (file)
@@ -48,6 +48,7 @@ use OCP\AppFramework\Http\Template\LinkMenuAction;
 use OCP\AppFramework\Http\Template\PublicTemplateResponse;
 use OCP\AppFramework\Http\Template\SimpleMenuAction;
 use OCP\Constants;
+use OCP\EventDispatcher\IEventDispatcher;
 use OCP\Files\File;
 use OCP\Files\NotFoundException;
 use OCP\Files\Storage;
@@ -64,7 +65,6 @@ use OCP\Security\ISecureRandom;
 use OCP\Share\Exceptions\ShareNotFound;
 use OCP\Share\IShare;
 use PHPUnit\Framework\MockObject\MockObject;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
 use OCP\Activity\IManager;
 use OCP\Files\IRootFolder;
 use OCP\Defaults;
@@ -102,7 +102,7 @@ class ShareControllerTest extends \Test\TestCase {
        private $federatedShareProvider;
        /** @var IAccountManager|MockObject */
        private $accountManager;
-       /** @var EventDispatcherInterface|MockObject */
+       /** @var IEventDispatcher|MockObject */
        private $eventDispatcher;
        /** @var IL10N */
        private $l10n;
@@ -123,7 +123,7 @@ class ShareControllerTest extends \Test\TestCase {
                $this->federatedShareProvider->expects($this->any())
                        ->method('isIncomingServer2serverShareEnabled')->willReturn(true);
                $this->accountManager = $this->createMock(IAccountManager::class);
-               $this->eventDispatcher = $this->createMock('Symfony\Component\EventDispatcher\EventDispatcherInterface');
+               $this->eventDispatcher = $this->createMock(IEventDispatcher::class);
                $this->l10n = $this->createMock(IL10N::class);
 
                $this->shareController = new \OCA\Files_Sharing\Controller\ShareController(
@@ -296,11 +296,10 @@ class ShareControllerTest extends \Test\TestCase {
                });
 
                $this->eventDispatcher->expects($this->once())
-                       ->method('dispatch')
+                       ->method('dispatchTyped')
                        ->with(
-                               'OCA\Files_Sharing::loadAdditionalScripts',
                                $this->callback(function ($event) use ($share) {
-                                       return $event->getArgument('share') === $share;
+                                       return $event->getShare() === $share;
                                })
                        );
 
@@ -443,11 +442,10 @@ class ShareControllerTest extends \Test\TestCase {
                });
 
                $this->eventDispatcher->expects($this->once())
-                       ->method('dispatch')
+                       ->method('dispatchTyped')
                        ->with(
-                               'OCA\Files_Sharing::loadAdditionalScripts',
                                $this->callback(function ($event) use ($share) {
-                                       return $event->getArgument('share') === $share;
+                                       return $event->getShare() === $share;
                                })
                        );
 
@@ -594,11 +592,10 @@ class ShareControllerTest extends \Test\TestCase {
                });
 
                $this->eventDispatcher->expects($this->once())
-                       ->method('dispatch')
+                       ->method('dispatchTyped')
                        ->with(
-                               'OCA\Files_Sharing::loadAdditionalScripts',
                                $this->callback(function ($event) use ($share) {
-                                       return $event->getArgument('share') === $share;
+                                       return $event->getShare() === $share;
                                })
                        );