appConfig = new AppConfig($appName); $this->crypt = new Crypt($this->appConfig); } public function register(IRegistrationContext $context): void { require_once __DIR__ . "/../3rdparty/jwt/BeforeValidException.php"; require_once __DIR__ . "/../3rdparty/jwt/ExpiredException.php"; require_once __DIR__ . "/../3rdparty/jwt/SignatureInvalidException.php"; require_once __DIR__ . "/../3rdparty/jwt/JWT.php"; $context->registerService("L10N", function (ContainerInterface $c) { return $c->get("ServerContainer")->getL10N($c->get("AppName")); }); $context->registerService("RootStorage", function (ContainerInterface $c) { return $c->get("ServerContainer")->getRootFolder(); }); $context->registerService("UserSession", function (ContainerInterface $c) { return $c->get("ServerContainer")->getUserSession(); }); $context->registerService("UserManager", function (ContainerInterface $c) { return $c->get("ServerContainer")->getUserManager(); }); $context->registerService("Logger", function (ContainerInterface $c) { return $c->get("ServerContainer")->getLogger(); }); $context->registerService("URLGenerator", function (ContainerInterface $c) { return $c->get("ServerContainer")->getURLGenerator(); }); $context->registerService("DirectEditor", function (ContainerInterface $c) { return new DirectEditor( $c->get("AppName"), $c->get("URLGenerator"), $c->get("L10N"), $c->get("Logger"), $this->appConfig, $this->crypt ); }); // Controllers $context->registerService("SettingsController", function (ContainerInterface $c) { return new SettingsController( $c->get("AppName"), $c->get("Request"), $c->get("URLGenerator"), $c->get("L10N"), $c->get("Logger"), $this->appConfig, $this->crypt ); }); $context->registerService("EditorController", function (ContainerInterface $c) { return new EditorController( $c->get("AppName"), $c->get("Request"), $c->get("RootStorage"), $c->get("UserSession"), $c->get("UserManager"), $c->get("URLGenerator"), $c->get("L10N"), $c->get("Logger"), $this->appConfig, $this->crypt, $c->get("IManager"), $c->get("Session"), $c->get(ITagManager::class) ); }); $context->registerService("CallbackController", function (ContainerInterface $c) { return new CallbackController( $c->get("AppName"), $c->get("Request"), $c->get("RootStorage"), $c->get("UserSession"), $c->get("UserManager"), $c->get("L10N"), $c->get("Logger"), $this->appConfig, $this->crypt, $c->get("IManager") ); }); $context->registerService("TemplateController", function (ContainerInterface $c) { return new TemplateController( $c->get("AppName"), $c->get("Request"), $c->get("L10N"), $c->get("Logger"), $c->get(IPreview::class) ); }); if (interface_exists("OCP\Files\Template\ICustomTemplateProvider")) { $context->registerTemplateProvider(TemplateProvider::class); } } public function boot(IBootContext $context): void { $context->injectFn(function (SymfonyAdapter $eventDispatcher) { $eventDispatcher->addListener('OCA\Files::loadAdditionalScripts', function() { if (!empty($this->appConfig->GetDocumentServerUrl()) && $this->appConfig->SettingsAreSuccessful() && $this->appConfig->isUserAllowedToUse()) { Util::addScript("onlyoffice", "desktop"); Util::addScript("onlyoffice", "main"); Util::addScript("onlyoffice", "template"); if ($this->appConfig->GetSameTab()) { Util::addScript("onlyoffice", "listener"); } Util::addStyle("onlyoffice", "main"); Util::addStyle("onlyoffice", "template"); } }); $eventDispatcher->addListener(LoadViewer::class, function () { if (!empty($this->appConfig->GetDocumentServerUrl()) && $this->appConfig->SettingsAreSuccessful() && $this->appConfig->isUserAllowedToUse()) { Util::addScript("onlyoffice", "viewer"); Util::addScript("onlyoffice", "listener"); Util::addStyle("onlyoffice", "viewer"); $csp = new ContentSecurityPolicy(); $csp->addAllowedFrameDomain("'self'"); $cspManager = $this->getContainer()->getServer()->getContentSecurityPolicyManager(); $cspManager->addDefaultPolicy($csp); } }); $eventDispatcher->addListener('OCA\Files_Sharing::loadAdditionalScripts', function() { if (!empty($this->appConfig->GetDocumentServerUrl()) && $this->appConfig->SettingsAreSuccessful()) { Util::addScript("onlyoffice", "main"); if ($this->appConfig->GetSameTab()) { Util::addScript("onlyoffice", "listener"); } Util::addStyle("onlyoffice", "main"); } }); $eventDispatcher->addListener(RegisterWidgetEvent::class, function () { if (!empty($this->appConfig->GetDocumentServerUrl()) && $this->appConfig->SettingsAreSuccessful() && $this->appConfig->isUserAllowedToUse()) { Util::addScript("onlyoffice", "desktop"); } }); $container = $this->getContainer(); if (class_exists("OCP\Files\Template\FileCreatedFromTemplateEvent")) { $eventDispatcher->addListener(FileCreatedFromTemplateEvent::class, function (FileCreatedFromTemplateEvent $event) { $template = $event->getTemplate(); if ($template === null) { $targetFile = $event->getTarget(); $templateEmpty = TemplateManager::GetEmptyTemplate($targetFile->getName()); if ($templateEmpty) { $targetFile->putContent($templateEmpty); } } }); } $previewManager = $container->query(IPreview::class); $previewManager->registerProvider(Preview::getMimeTypeRegex(), function() use ($container) { return $container->query(Preview::class); }); $eventDispatcher->addListener(RegisterDirectEditorEvent::class, function (RegisterDirectEditorEvent $event) use ($container) { if (!empty($this->appConfig->GetDocumentServerUrl()) && $this->appConfig->SettingsAreSuccessful()) { $editor = $container->query(DirectEditor::class); $event->register($editor); } }); }); $context->injectFn(function (IManager $notificationsManager) { $notificationsManager->registerNotifierService(Notifier::class); }); if (class_exists("OCP\Files\Template\TemplateFileCreator")) { $context->injectFn(function(ITemplateManager $templateManager, IL10N $trans, $appName) { if (!empty($this->appConfig->GetDocumentServerUrl()) && $this->appConfig->SettingsAreSuccessful() && $this->appConfig->isUserAllowedToUse()) { $templateManager->registerTemplateFileCreator(function () use ($appName, $trans) { $wordTemplate = new TemplateFileCreator($appName, $trans->t("Document"), ".docx"); $wordTemplate->addMimetype("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); $wordTemplate->setIconClass("icon-onlyoffice-new-docx"); $wordTemplate->setRatio(21/29.7); return $wordTemplate; }); $templateManager->registerTemplateFileCreator(function () use ($appName, $trans) { $cellTemplate = new TemplateFileCreator($appName, $trans->t("Spreadsheet"), ".xlsx"); $cellTemplate->addMimetype("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); $cellTemplate->setIconClass("icon-onlyoffice-new-xlsx"); $cellTemplate->setRatio(21/29.7); return $cellTemplate; }); $templateManager->registerTemplateFileCreator(function () use ($appName, $trans) { $slideTemplate = new TemplateFileCreator($appName, $trans->t("Presentation"), ".pptx"); $slideTemplate->addMimetype("application/vnd.openxmlformats-officedocument.presentationml.presentation"); $slideTemplate->setIconClass("icon-onlyoffice-new-pptx"); $slideTemplate->setRatio(16/9); return $slideTemplate; }); } }); } Hooks::connectHooks(); } }