. * */ namespace OCA\Talk\PublicShare; use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent; use OCA\Talk\Config; use OCA\Talk\TInitialState; use OCP\AppFramework\Services\IInitialState; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\Files\FileInfo; use OCP\ICacheFactory; use OCP\IConfig; use OCP\Util; /** * Helper class to extend the "publicshare" template from the server. * * The additional scripts modify the page in the browser to inject the Talk UI as needed. */ class TemplateLoader implements IEventListener { use TInitialState; public function __construct(IInitialState $initialState, ICacheFactory $memcacheFactory, Config $talkConfig, IConfig $serverConfig) { $this->initialState = $initialState; $this->talkConfig = $talkConfig; $this->memcacheFactory = $memcacheFactory; $this->serverConfig = $serverConfig; } /** * Load the "Talk sidebar" UI in the public share page for the given share. * @param Event $event */ 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; } Util::addStyle('spreed', 'merged-public-share'); Util::addScript('spreed', 'talk-public-share-sidebar'); $this->publishInitialStateForGuest(); } }