Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/spreed.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJoas Schilling <coding@schilljs.com>2020-07-16 12:36:35 +0300
committerJoas Schilling <coding@schilljs.com>2020-07-16 12:36:35 +0300
commit79a97a9db255e6483740dec8a19b8912b72f6f6a (patch)
treeced3d1bb0caae43f7dbeddb873ac0fb872dbd818 /lib
parent35bb655d79cf7d34a7c8b6f9da079723930c78a2 (diff)
Use new BeforeTemplateRenderedEvent for share template loading
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/AppInfo/Application.php5
-rw-r--r--lib/PublicShare/TemplateLoader.php40
-rw-r--r--lib/PublicShareAuth/TemplateLoader.php48
3 files changed, 36 insertions, 57 deletions
diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php
index 85d348ee3..ade710667 100644
--- a/lib/AppInfo/Application.php
+++ b/lib/AppInfo/Application.php
@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace OCA\Talk\AppInfo;
+use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent;
use OCA\Talk\Activity\Listener as ActivityListener;
use OCA\Talk\Capabilities;
use OCA\Talk\Chat\Changelog\Listener as ChangelogListener;
@@ -87,6 +88,8 @@ class Application extends App implements IBootstrap {
$context->registerEventListener(AddFeaturePolicyEvent::class, FeaturePolicyListener::class);
$context->registerEventListener(UserDeletedEvent::class, UserDeletedListener::class);
$context->registerEventListener(BeforeUserLoggedOutEvent::class, BeforeUserLoggedOutListener::class);
+ $context->registerEventListener(BeforeTemplateRenderedEvent::class, PublicShareTemplateLoader::class);
+ $context->registerEventListener(BeforeTemplateRenderedEvent::class, PublicShareAuthTemplateLoader::class);
}
public function boot(IBootContext $context): void {
@@ -105,8 +108,6 @@ class Application extends App implements IBootstrap {
SystemMessageListener::register($dispatcher);
ParserListener::register($dispatcher);
PublicShareAuthListener::register($dispatcher);
- PublicShareAuthTemplateLoader::register($dispatcher);
- PublicShareTemplateLoader::register($dispatcher);
FilesListener::register($dispatcher);
FilesTemplateLoader::register($dispatcher);
RestrictStartingCallsListener::register($dispatcher);
diff --git a/lib/PublicShare/TemplateLoader.php b/lib/PublicShare/TemplateLoader.php
index 38a18f330..f5e1bccc8 100644
--- a/lib/PublicShare/TemplateLoader.php
+++ b/lib/PublicShare/TemplateLoader.php
@@ -25,25 +25,23 @@ declare(strict_types=1);
namespace OCA\Talk\PublicShare;
+use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent;
use OCA\Talk\Config;
use OCA\Talk\TInitialState;
-use OCP\EventDispatcher\IEventDispatcher;
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\IEventListener;
use OCP\Files\FileInfo;
use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\IInitialStateService;
-use OCP\Share\IShare;
use OCP\Util;
-use Symfony\Component\EventDispatcher\GenericEvent;
/**
* Helper class to extend the "publicshare" template from the server.
*
- * The "loadTalkSidebarUi" method loads additional scripts that, when run on the
- * browser, adjust the page generated by the server to inject the Talk UI as
- * needed.
+ * The additional scripts modify the page in the browser to inject the Talk UI as needed.
*/
-class TemplateLoader {
+class TemplateLoader implements IEventListener {
use TInitialState;
public function __construct(IInitialStateService $initialStateService,
@@ -56,30 +54,26 @@ class TemplateLoader {
$this->serverConfig = $serverConfig;
}
- public static function register(IEventDispatcher $dispatcher): void {
- $dispatcher->addListener('OCA\Files_Sharing::loadAdditionalScripts', static function (GenericEvent $event) {
- /** @var IShare $share */
- $share = $event->getArgument('share');
- /** @var self $templateLoader */
- $templateLoader = \OC::$server->query(self::class);
- $templateLoader->loadTalkSidebarUi($share);
- });
- }
-
/**
* Load the "Talk sidebar" UI in the public share page for the given share.
- *
- * This method should be called when loading additional scripts for the
- * public share page of the server.
- *
- * @param IShare $share
+ * @param Event $event
*/
- public function loadTalkSidebarUi(IShare $share): void {
+ public function handle(Event $event): void {
+ if (!$event instanceof BeforeTemplateRenderedEvent) {
+ return;
+ }
+
+ if ($event->getScope() !== null) {
+ // If the event has a scope, it's not the default share page, but e.g. authentication
+ return;
+ }
+
if ($this->serverConfig->getAppValue('spreed', 'conversations_files', '1') !== '1' ||
$this->serverConfig->getAppValue('spreed', 'conversations_files_public_shares', '1') !== '1') {
return;
}
+ $share = $event->getShare();
if ($share->getNodeType() !== FileInfo::TYPE_FILE) {
return;
}
diff --git a/lib/PublicShareAuth/TemplateLoader.php b/lib/PublicShareAuth/TemplateLoader.php
index 1b96fe419..af68c1413 100644
--- a/lib/PublicShareAuth/TemplateLoader.php
+++ b/lib/PublicShareAuth/TemplateLoader.php
@@ -1,6 +1,7 @@
<?php
declare(strict_types=1);
+
/**
*
* @copyright Copyright (c) 2018, Daniel Calviño Sánchez (danxuliu@gmail.com)
@@ -24,24 +25,22 @@ declare(strict_types=1);
namespace OCA\Talk\PublicShareAuth;
+use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent;
use OCA\Talk\Config;
use OCA\Talk\TInitialState;
-use OCP\EventDispatcher\IEventDispatcher;
+use OCP\EventDispatcher\Event;
+use OCP\EventDispatcher\IEventListener;
use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\IInitialStateService;
-use OCP\Share\IShare;
use OCP\Util;
-use Symfony\Component\EventDispatcher\GenericEvent;
/**
* Helper class to extend the "publicshareauth" template from the server.
*
- * The "loadRequestPasswordByTalkUi" method loads additional scripts that, when
- * run on the browser, adjust the page generated by the server to inject the
- * Talk UI as needed.
+ * The additional scripts modify the page in the browser to inject the Talk UI as needed.
*/
-class TemplateLoader {
+class TemplateLoader implements IEventListener {
use TInitialState;
public function __construct(IInitialStateService $initialStateService,
@@ -49,43 +48,28 @@ class TemplateLoader {
Config $talkConfig,
IConfig $serverConfig) {
$this->initialStateService = $initialStateService;
- $this->memcacheFactory = $memcacheFactory;
$this->talkConfig = $talkConfig;
+ $this->memcacheFactory = $memcacheFactory;
$this->serverConfig = $serverConfig;
}
- public static function register(IEventDispatcher $dispatcher): void {
- $listener = static function (GenericEvent $event) {
- /** @var IShare $share */
- $share = $event->getArgument('share');
- /** @var self $templateLoader */
- $templateLoader = \OC::$server->query(self::class);
- $templateLoader->loadRequestPasswordByTalkUi($share);
- };
- $dispatcher->addListener('OCA\Files_Sharing::loadAdditionalScripts::publicShareAuth', $listener);
- }
-
/**
- * Load the "Request password by Talk" UI in the public share authentication
- * page for the given share.
- *
- * If the "Send Password by Talk" option is not set in the share then no UI
- * to request the password is provided.
- *
- * This method should be called when loading additional scripts for the
- * public share authentication page of the server.
- *
- * @param IShare $share
+ * Load the "Video verification" UI in the public share auth page.
+ * @param Event $event
*/
- public function loadRequestPasswordByTalkUi(IShare $share): void {
- if (!$share->getSendPasswordByTalk()) {
+ public function handle(Event $event): void {
+ if (!$event instanceof BeforeTemplateRenderedEvent) {
+ return;
+ }
+
+ if ($event->getScope() !== BeforeTemplateRenderedEvent::SCOPE_PUBLIC_SHARE_AUTH) {
+ // If the scope is not the authentication page we don't load this part of the Talk UI
return;
}
Util::addStyle('spreed', 'merged-share-auth');
Util::addScript('spreed', 'talk-public-share-auth-sidebar');
-
$this->publishInitialStateForGuest();
}
}