зеркало из https://github.com/nextcloud/spreed.git
Use new BeforeTemplateRenderedEvent for share template loading
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Родитель
35bb655d79
Коммит
79a97a9db2
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче