diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | appinfo/application.php | 5 | ||||
-rw-r--r-- | appinfo/info.xml | 2 | ||||
-rw-r--r-- | js/main.js | 178 | ||||
-rw-r--r-- | js/viewer.js | 50 | ||||
-rw-r--r-- | lib/listeners/filesharinglistener.php | 28 | ||||
-rw-r--r-- | lib/listeners/fileslistener.php | 28 | ||||
-rw-r--r-- | lib/listeners/viewerlistener.php | 28 | ||||
-rw-r--r-- | lib/settingsdata.php | 45 |
9 files changed, 225 insertions, 140 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 95fb81f..8d4f5d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,6 @@ # Change Log +## 7.4.6 ## Added - Dutch translation - Chinese (Traditional, Taiwan), Basque (Spain) empty file templates diff --git a/appinfo/application.php b/appinfo/application.php index 378972d..bbf013a 100644 --- a/appinfo/application.php +++ b/appinfo/application.php @@ -59,6 +59,7 @@ use OCA\Onlyoffice\Notifier; use OCA\Onlyoffice\Preview; use OCA\Onlyoffice\TemplateManager; use OCA\Onlyoffice\TemplateProvider; +use OCA\Onlyoffice\SettingsData; use Psr\Container\ContainerInterface; @@ -136,6 +137,10 @@ class Application extends App implements IBootstrap { ); }); + $context->registerService("SettingsData", function (ContainerInterface $c) { + return new SettingsData($this->appConfig); + }); + // Controllers $context->registerService("SettingsController", function (ContainerInterface $c) { return new SettingsController( diff --git a/appinfo/info.xml b/appinfo/info.xml index a1afb3c..529b658 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -6,7 +6,7 @@ <description>ONLYOFFICE connector allows you to view, edit and collaborate on text documents, spreadsheets and presentations within Nextcloud using ONLYOFFICE Docs. This will create a new Edit in ONLYOFFICE action within the document library for Office documents. This allows multiple users to co-author documents in real time from the familiar web interface and save the changes back to your file storage.</description> <licence>apache</licence> <author mail="dev@onlyoffice.com" homepage="https://www.onlyoffice.com/">Ascensio System SIA</author> - <version>7.4.4</version> + <version>7.4.6</version> <namespace>Onlyoffice</namespace> <types> <prevent_group_restriction/> @@ -25,7 +25,7 @@ frameSelector: null, }, OCA.Onlyoffice); - OCA.Onlyoffice.setting = {}; + OCA.Onlyoffice.setting = OCP.InitialState.loadState(OCA.Onlyoffice.AppName, "settings"); OCA.Onlyoffice.mobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini|Macintosh/i.test(navigator.userAgent) && navigator.maxTouchPoints && navigator.maxTouchPoints > 1; @@ -312,92 +312,70 @@ OCA.Onlyoffice.CreateFile(name, fileList, 0, targetId, false); }; - OCA.Onlyoffice.GetSettings = function (callbackSettings) { - if (OCA.Onlyoffice.setting.formats) { - - callbackSettings(); - - } else { - - $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/settings"), - function onSuccess(settings) { - OCA.Onlyoffice.setting = settings; + OCA.Onlyoffice.registerAction = function() { + var formats = OCA.Onlyoffice.setting.formats; - callbackSettings(); - } - ); + $.each(formats, function (ext, config) { + if (!config.mime) { + return true; + } + OCA.Files.fileActions.registerAction({ + name: "onlyofficeOpen", + displayName: t(OCA.Onlyoffice.AppName, "Open in ONLYOFFICE"), + mime: config.mime, + permissions: OC.PERMISSION_READ, + iconClass: "icon-onlyoffice-open", + actionHandler: OCA.Onlyoffice.FileClick + }); - } - }; + if (config.def) { + OCA.Files.fileActions.setDefault(config.mime, "onlyofficeOpen"); + } - OCA.Onlyoffice.registerAction = function() { - var register = function () { - var formats = OCA.Onlyoffice.setting.formats; + if (config.conv) { + OCA.Files.fileActions.registerAction({ + name: "onlyofficeConvert", + displayName: t(OCA.Onlyoffice.AppName, "Convert with ONLYOFFICE"), + mime: config.mime, + permissions: ($("#isPublic").val() ? OC.PERMISSION_UPDATE : OC.PERMISSION_READ), + iconClass: "icon-onlyoffice-convert", + actionHandler: OCA.Onlyoffice.FileConvertClick + }); + } - $.each(formats, function (ext, config) { - if (!config.mime) { - return true; - } + if (config.fillForms) { OCA.Files.fileActions.registerAction({ - name: "onlyofficeOpen", - displayName: t(OCA.Onlyoffice.AppName, "Open in ONLYOFFICE"), + name: "onlyofficeFill", + displayName: t(OCA.Onlyoffice.AppName, "Fill in form in ONLYOFFICE"), mime: config.mime, - permissions: OC.PERMISSION_READ, - iconClass: "icon-onlyoffice-open", + permissions: OC.PERMISSION_UPDATE, + iconClass: "icon-onlyoffice-fill", actionHandler: OCA.Onlyoffice.FileClick }); + } - if (config.def) { - OCA.Files.fileActions.setDefault(config.mime, "onlyofficeOpen"); - } - - if (config.conv) { - OCA.Files.fileActions.registerAction({ - name: "onlyofficeConvert", - displayName: t(OCA.Onlyoffice.AppName, "Convert with ONLYOFFICE"), - mime: config.mime, - permissions: ($("#isPublic").val() ? OC.PERMISSION_UPDATE : OC.PERMISSION_READ), - iconClass: "icon-onlyoffice-convert", - actionHandler: OCA.Onlyoffice.FileConvertClick - }); - } - - if (config.fillForms) { - OCA.Files.fileActions.registerAction({ - name: "onlyofficeFill", - displayName: t(OCA.Onlyoffice.AppName, "Fill in form in ONLYOFFICE"), - mime: config.mime, - permissions: OC.PERMISSION_UPDATE, - iconClass: "icon-onlyoffice-fill", - actionHandler: OCA.Onlyoffice.FileClick - }); - } - - if (config.createForm) { - OCA.Files.fileActions.registerAction({ - name: "onlyofficeCreateForm", - displayName: t(OCA.Onlyoffice.AppName, "Create form"), - mime: config.mime, - permissions: ($("#isPublic").val() ? OC.PERMISSION_UPDATE : OC.PERMISSION_READ), - iconClass: "icon-onlyoffice-create", - actionHandler: OCA.Onlyoffice.CreateFormClick - }); - } - - if (config.saveas && !$("#isPublic").val()) { - OCA.Files.fileActions.registerAction({ - name: "onlyofficeDownload", - displayName: t(OCA.Onlyoffice.AppName, "Download as"), - mime: config.mime, - permissions: OC.PERMISSION_READ, - iconClass: "icon-onlyoffice-download", - actionHandler: OCA.Onlyoffice.DownloadClick - }); - } - }); - } + if (config.createForm) { + OCA.Files.fileActions.registerAction({ + name: "onlyofficeCreateForm", + displayName: t(OCA.Onlyoffice.AppName, "Create form"), + mime: config.mime, + permissions: ($("#isPublic").val() ? OC.PERMISSION_UPDATE : OC.PERMISSION_READ), + iconClass: "icon-onlyoffice-create", + actionHandler: OCA.Onlyoffice.CreateFormClick + }); + } - OCA.Onlyoffice.GetSettings(register); + if (config.saveas && !$("#isPublic").val()) { + OCA.Files.fileActions.registerAction({ + name: "onlyofficeDownload", + displayName: t(OCA.Onlyoffice.AppName, "Download as"), + mime: config.mime, + permissions: OC.PERMISSION_READ, + iconClass: "icon-onlyoffice-download", + actionHandler: OCA.Onlyoffice.DownloadClick + }); + } + }); }; OCA.Onlyoffice.NewFileMenu = { @@ -534,38 +512,34 @@ var fileName = $("#filename").val(); var extension = getFileExtension(fileName); - var initSharedButton = function () { - var formats = OCA.Onlyoffice.setting.formats; - - var config = formats[extension]; - if (!config) { - return; - } + var formats = OCA.Onlyoffice.setting.formats; - var editorUrl = OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/s/" + encodeURIComponent($("#sharingToken").val())); + var config = formats[extension]; + if (!config) { + return; + } - if (_oc_appswebroots.richdocuments - || _oc_appswebroots.files_pdfviewer && extension === "pdf" - || _oc_appswebroots.text && extension === "txt") { + var editorUrl = OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/s/" + encodeURIComponent($("#sharingToken").val())); - var button = document.createElement("a"); - button.href = editorUrl; - button.className = "onlyoffice-public-open button"; - button.innerText = t(OCA.Onlyoffice.AppName, "Open in ONLYOFFICE") + if (_oc_appswebroots.richdocuments + || _oc_appswebroots.files_pdfviewer && extension === "pdf" + || _oc_appswebroots.text && extension === "txt") { - if (!OCA.Onlyoffice.setting.sameTab) { - button.target = "_blank"; - } + var button = document.createElement("a"); + button.href = editorUrl; + button.className = "onlyoffice-public-open button"; + button.innerText = t(OCA.Onlyoffice.AppName, "Open in ONLYOFFICE") - $("#preview").prepend(button); - } else { - OCA.Onlyoffice.frameSelector = "#onlyofficeFrame"; - var $iframe = $("<iframe id=\"onlyofficeFrame\" nonce=\"" + btoa(OC.requestToken) + "\" scrolling=\"no\" allowfullscreen src=\"" + editorUrl + "?inframe=true\" />"); - $("#app-content").append($iframe); + if (!OCA.Onlyoffice.setting.sameTab) { + button.target = "_blank"; } - }; - OCA.Onlyoffice.GetSettings(initSharedButton); + $("#preview").prepend(button); + } else { + OCA.Onlyoffice.frameSelector = "#onlyofficeFrame"; + var $iframe = $("<iframe id=\"onlyofficeFrame\" nonce=\"" + btoa(OC.requestToken) + "\" scrolling=\"no\" allowfullscreen src=\"" + editorUrl + "?inframe=true\" />"); + $("#app-content").append($iframe); + } } else { OC.Plugins.register("OCA.Files.NewFileMenu", OCA.Onlyoffice.NewFileMenu); diff --git a/js/viewer.js b/js/viewer.js index b95f72a..fc69001 100644 --- a/js/viewer.js +++ b/js/viewer.js @@ -22,29 +22,13 @@ } OCA.Onlyoffice = { - AppName: "onlyoffice", - frameSelector: null, - setting: {}, - }; - - OCA.Onlyoffice.GetSettings = function (callbackSettings) { - if (OCA.Onlyoffice.setting.formats) { - - callbackSettings(); - - } else { - - $.get(OC.generateUrl("apps/" + OCA.Onlyoffice.AppName + "/ajax/settings"), - function onSuccess(settings) { - OCA.Onlyoffice.setting = settings; - - callbackSettings(); - } - ); - - } + AppName: "onlyoffice", + frameSelector: null, + setting: {}, }; + OCA.Onlyoffice.setting = OCP.InitialState.loadState(OCA.Onlyoffice.AppName, "settings"); + var OnlyofficeViewerVue = { name: "OnlyofficeViewerVue", render: function (createElement) { @@ -88,21 +72,19 @@ if (OCA.Viewer) { OCA.Onlyoffice.frameSelector = "#onlyofficeViewerFrame"; - OCA.Onlyoffice.GetSettings(function () { + var mimes = $.map(OCA.Onlyoffice.setting.formats, function (format) { + if (format.def) { + return format.mime; + } + }); - var mimes = $.map(OCA.Onlyoffice.setting.formats, function (format) { - if (format.def) { - return format.mime; - } - }); + OCA.Viewer.registerHandler({ + id: OCA.Onlyoffice.AppName, + group: null, + mimes: mimes, + component: OnlyofficeViewerVue + }) - OCA.Viewer.registerHandler({ - id: OCA.Onlyoffice.AppName, - group: null, - mimes: mimes, - component: OnlyofficeViewerVue - }) - }); } }; diff --git a/lib/listeners/filesharinglistener.php b/lib/listeners/filesharinglistener.php index 3274a46..95ad58e 100644 --- a/lib/listeners/filesharinglistener.php +++ b/lib/listeners/filesharinglistener.php @@ -22,10 +22,13 @@ namespace OCA\Onlyoffice\Listeners; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\Util; +use OCP\AppFramework\Services\IInitialState; +use OCP\IServerContainer; use OCA\Files_Sharing\Event\BeforeTemplateRenderedEvent; use OCA\Onlyoffice\AppConfig; +use OCA\Onlyoffice\SettingsData; /** * File Sharing listener @@ -40,10 +43,28 @@ class FileSharingListener implements IEventListener { private $appConfig; /** + * Initial state + * + * @var IInitialState + */ + private $initialState; + + /** + * Server container + * + * @var IServerContainer + */ + private $serverContainer; + + /** * @param AppConfig $config - application configuration */ - public function __construct(AppConfig $appConfig) { + public function __construct(AppConfig $appConfig, + IInitialState $initialState, + IServerContainer $serverContainer) { $this->appConfig = $appConfig; + $this->initialState = $initialState; + $this->serverContainer = $serverContainer; } public function handle(Event $event): void { @@ -59,6 +80,11 @@ class FileSharingListener implements IEventListener { Util::addScript("onlyoffice", "listener"); } + $container = $this->serverContainer; + $this->initialState->provideLazyInitialState("settings", function () use ($container) { + return $container->query(SettingsData::class); + }); + Util::addStyle("onlyoffice", "main"); } } diff --git a/lib/listeners/fileslistener.php b/lib/listeners/fileslistener.php index ccb07f0..0f1210d 100644 --- a/lib/listeners/fileslistener.php +++ b/lib/listeners/fileslistener.php @@ -22,10 +22,13 @@ namespace OCA\Onlyoffice\Listeners; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\Util; +use OCP\AppFramework\Services\IInitialState; +use OCP\IServerContainer; use OCA\Files\Event\LoadAdditionalScriptsEvent; use OCA\Onlyoffice\AppConfig; +use OCA\Onlyoffice\SettingsData; /** * File listener @@ -40,10 +43,28 @@ class FilesListener implements IEventListener { private $appConfig; /** + * Initial state + * + * @var IInitialState + */ + private $initialState; + + /** + * Server container + * + * @var IServerContainer + */ + private $serverContainer; + + /** * @param AppConfig $config - application configuration */ - public function __construct(AppConfig $appConfig) { + public function __construct(AppConfig $appConfig, + IInitialState $initialState, + IServerContainer $serverContainer) { $this->appConfig = $appConfig; + $this->initialState = $initialState; + $this->serverContainer = $serverContainer; } public function handle(Event $event): void { @@ -69,6 +90,11 @@ class FilesListener implements IEventListener { Util::addStyle("onlyoffice", "share"); } + $container = $this->serverContainer; + $this->initialState->provideLazyInitialState("settings", function () use ($container) { + return $container->query(SettingsData::class); + }); + Util::addStyle("onlyoffice", "main"); Util::addStyle("onlyoffice", "template"); } diff --git a/lib/listeners/viewerlistener.php b/lib/listeners/viewerlistener.php index e61a49b..fe85415 100644 --- a/lib/listeners/viewerlistener.php +++ b/lib/listeners/viewerlistener.php @@ -23,10 +23,13 @@ use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventListener; use OCP\Util; use OCP\AppFramework\Http\ContentSecurityPolicy; +use OCP\AppFramework\Services\IInitialState; +use OCP\IServerContainer; use OCA\Viewer\Event\LoadViewer; use OCA\Onlyoffice\AppConfig; +use OCA\Onlyoffice\SettingsData; /** * Viewer listener @@ -41,10 +44,28 @@ class ViewerListener implements IEventListener { private $appConfig; /** + * Initial state + * + * @var IInitialState + */ + private $initialState; + + /** + * Server container + * + * @var IServerContainer + */ + private $serverContainer; + + /** * @param AppConfig $config - application configuration */ - public function __construct(AppConfig $appConfig) { + public function __construct(AppConfig $appConfig, + IInitialState $initialState, + IServerContainer $serverContainer) { $this->appConfig = $appConfig; + $this->initialState = $initialState; + $this->serverContainer = $serverContainer; } public function handle(Event $event): void { @@ -60,6 +81,11 @@ class ViewerListener implements IEventListener { Util::addStyle("onlyoffice", "viewer"); + $container = $this->serverContainer; + $this->initialState->provideLazyInitialState("settings", function () use ($container) { + return $container->query(SettingsData::class); + }); + $csp = new ContentSecurityPolicy(); $csp->addAllowedFrameDomain("'self'"); $cspManager = \OC::$server->getContentSecurityPolicyManager(); diff --git a/lib/settingsdata.php b/lib/settingsdata.php new file mode 100644 index 0000000..d246cf0 --- /dev/null +++ b/lib/settingsdata.php @@ -0,0 +1,45 @@ +<?php +/** + * + * (c) Copyright Ascensio System SIA 2022 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +namespace OCA\Onlyoffice; + +use OCA\Onlyoffice\AppConfig; + +class SettingsData implements \JsonSerializable { + + /** + * Application configuration + * + * @var AppConfig + */ + private $appConfig; + + public function __construct(AppConfig $appConfig) { + $this->appConfig = $appConfig; + } + + public function jsonSerialize(): array { + $data = [ + "formats" => $this->appConfig->FormatsSetting(), + "sameTab" => $this->appConfig->GetSameTab() + ]; + + return $data; + } +}
\ No newline at end of file |