From 2f1cf5faa23f8e48b35f3402a5b2cb94b677bbc4 Mon Sep 17 00:00:00 2001 From: erseco Date: Wed, 4 Oct 2023 18:02:01 +0100 Subject: [PATCH 1/3] Added experimental support to use ODF as default new file format --- js/settings.js | 5 ++- lib/AppConfig.php | 27 ++++++++++++ lib/AppInfo/Application.php | 30 +++++++++++--- lib/Controller/SettingsController.php | 8 +++- lib/TemplateManager.php | 59 +++++++++++++++++++++------ templates/settings.php | 6 +++ 6 files changed, 114 insertions(+), 21 deletions(-) diff --git a/js/settings.js b/js/settings.js index 80978758..4b3af761 100644 --- a/js/settings.js +++ b/js/settings.js @@ -210,6 +210,7 @@ var toolbarNoTabs = $("#onlyofficeToolbarNoTabs").is(":checked"); var reviewDisplay = $("input[type='radio'][name='reviewDisplay']:checked").attr("id").replace("onlyofficeReviewDisplay_", ""); var theme = $("input[type='radio'][name='theme']:checked").attr("id").replace("onlyofficeTheme_", ""); + var defaultOdf = $("#defaultOdf").is(":checked"); $.ajax({ method: "PUT", @@ -229,7 +230,9 @@ help: help, toolbarNoTabs: toolbarNoTabs, reviewDisplay: reviewDisplay, - theme: theme + theme: theme, + defaultOdf: defaultOdf + }, success: function onSuccess(response) { $(".section-onlyoffice").removeClass("icon-loading"); diff --git a/lib/AppConfig.php b/lib/AppConfig.php index 7f9c1cc9..192f1f79 100644 --- a/lib/AppConfig.php +++ b/lib/AppConfig.php @@ -326,6 +326,13 @@ class AppConfig { */ private $_editors_check_interval = "editors_check_interval"; + /** + * The config key for the setting default odf + * + * @var string + */ + private $_defaultOdf = "defaultOdf"; + /** * @param string $AppName - application name */ @@ -886,6 +893,26 @@ public function GetCustomizationToolbarNoTabs() { return $this->config->getAppValue($this->appName, $this->_customizationToolbarNoTabs, "true") === "true"; } + /** + * Save the default ODF setting + * + * @param bool $value - default ODF + */ + public function SetDefaultOdf($value) { + $this->logger->info("Set ODF as default: " . json_encode($value), ["app" => $this->appName]); + + $this->config->setAppValue($this->appName, $this->_defaultOdf, json_encode($value)); + } + + /** + * Get the default ODF setting + * + * @return bool + */ + public function GetDefaultOdf() { + return $this->config->getAppValue($this->appName, $this->_defaultOdf, "false") === "true"; + } + /** * Save review viewing mode setting * diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index d18e9092..5eaf08f4 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -308,24 +308,42 @@ function (FileCreatedFromTemplateEvent $event) { && $this->appConfig->isUserAllowedToUse()) { $templateManager->registerTemplateFileCreator(function () use ($appName, $trans) { - $wordTemplate = new TemplateFileCreator($appName, $trans->t("New document"), ".docx"); - $wordTemplate->addMimetype("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + $wordTemplate; + if ($this->appConfig->GetDefaultOdf()){ + $wordTemplate = new TemplateFileCreator($appName, $trans->t("New document"), ".odt"); + $wordTemplate->addMimetype("application/vnd.oasis.opendocument.text"); + } else { + $wordTemplate = new TemplateFileCreator($appName, $trans->t("New 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("New spreadsheet"), ".xlsx"); - $cellTemplate->addMimetype("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + $cellTemplate; + if ($this->appConfig->GetDefaultOdf()){ + $cellTemplate = new TemplateFileCreator($appName, $trans->t("New spreadsheet"), ".ods"); + $cellTemplate->addMimetype("application/vnd.oasis.opendocument.spreadsheet"); + } else { + $cellTemplate = new TemplateFileCreator($appName, $trans->t("New 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("New presentation"), ".pptx"); - $slideTemplate->addMimetype("application/vnd.openxmlformats-officedocument.presentationml.presentation"); + $slideTemplate; + if ($this->appConfig->GetDefaultOdf()){ + $slideTemplate = new TemplateFileCreator($appName, $trans->t("New presentation"), ".odp"); + $slideTemplate->addMimetype("application/vnd.oasis.opendocument.presentation"); + } else { + $slideTemplate = new TemplateFileCreator($appName, $trans->t("New presentation"), ".pptx"); + $slideTemplate->addMimetype("application/vnd.openxmlformats-officedocument.presentationml.presentation"); + } $slideTemplate->setIconClass("icon-onlyoffice-new-pptx"); $slideTemplate->setRatio(16/9); return $slideTemplate; diff --git a/lib/Controller/SettingsController.php b/lib/Controller/SettingsController.php index 7f22b9fe..9e444a67 100644 --- a/lib/Controller/SettingsController.php +++ b/lib/Controller/SettingsController.php @@ -134,7 +134,8 @@ public function index() { "reviewDisplay" => $this->config->GetCustomizationReviewDisplay(), "theme" => $this->config->GetCustomizationTheme(), "templates" => $this->GetGlobalTemplates(), - "linkToDocs" => $this->config->GetLinkToDocs() + "linkToDocs" => $this->config->GetLinkToDocs(), + "defaultOdf" => $this->config->GetDefaultOdf() ]; return new TemplateResponse($this->appName, "settings", $data, "blank"); } @@ -212,6 +213,7 @@ public function SaveAddress($documentserver, * @param bool $help - display help * @param bool $toolbarNoTabs - display toolbar tab * @param string $reviewDisplay - review viewing mode + * @param bool $defaultOdf - use ODF formats as default * * @return array */ @@ -229,7 +231,8 @@ public function SaveCommon($defFormats, $help, $toolbarNoTabs, $reviewDisplay, - $theme + $theme, + $defaultOdf ) { $this->config->SetDefaultFormats($defFormats); @@ -247,6 +250,7 @@ public function SaveCommon($defFormats, $this->config->SetCustomizationToolbarNoTabs($toolbarNoTabs); $this->config->SetCustomizationReviewDisplay($reviewDisplay); $this->config->SetCustomizationTheme($theme); + $this->config->SetDefaultOdf($defaultOdf); return [ ]; diff --git a/lib/TemplateManager.php b/lib/TemplateManager.php index 7ec2bbd8..2650837e 100644 --- a/lib/TemplateManager.php +++ b/lib/TemplateManager.php @@ -129,6 +129,12 @@ public static function GetTypeTemplate($mime) { return "spreadsheet"; case "application/vnd.openxmlformats-officedocument.presentationml.presentation": return "presentation"; + case "application/vnd.oasis.opendocument.text": + return "document"; + case "application/vnd.oasis.opendocument.spreadsheet": + return "spreadsheet"; + case "application/vnd.oasis.opendocument.presentation": + return "presentation"; } return ""; @@ -142,13 +148,28 @@ public static function GetTypeTemplate($mime) { * @return string */ public static function GetMimeTemplate($type) { - switch($type) { - case "document": - return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; - case "spreadsheet": - return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - case "presentation": - return "application/vnd.openxmlformats-officedocument.presentationml.presentation"; + + $appConfig = new AppConfig(self::$appName); + if ($appConfig->GetDefaultOdf()) { + + switch($type) { + case "document": + return "application/vnd.oasis.opendocument.text"; + case "spreadsheet": + return "application/vnd.oasis.opendocument.spreadsheet"; + case "presentation": + return "application/vnd.oasis.opendocument.presentation"; + } + } else { + + switch($type) { + case "document": + return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; + case "spreadsheet": + return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; + case "presentation": + return "application/vnd.openxmlformats-officedocument.presentationml.presentation"; + } } return ""; @@ -163,11 +184,25 @@ public static function GetMimeTemplate($type) { */ public static function IsTemplateType($name) { $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION)); - switch($ext) { - case "docx": - case "xlsx": - case "pptx": - return true; + + $appConfig = new AppConfig(self::$appName); + if ($appConfig->GetDefaultOdf()) { + + switch($ext) { + case "odt": + case "ods": + case "odp": + return true; + } + + } else { + + switch($ext) { + case "docx": + case "xlsx": + case "pptx": + return true; + } } return false; diff --git a/templates/settings.php b/templates/settings.php index 5fcb98be..96d85f90 100644 --- a/templates/settings.php +++ b/templates/settings.php @@ -148,6 +148,12 @@

+

+ checked="checked" /> + +

+

t("The default application for opening the format")) ?>

$setting) { ?> From 9f516a755723218a02787652ff1dd024a1a50c29 Mon Sep 17 00:00:00 2001 From: erseco Date: Fri, 13 Oct 2023 21:13:28 +0100 Subject: [PATCH 2/3] Refactored code to simplify --- lib/AppInfo/Application.php | 48 ++++++++++++++++++--------------- lib/TemplateManager.php | 54 +++++++++++++------------------------ 2 files changed, 46 insertions(+), 56 deletions(-) diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 5eaf08f4..95908c0d 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -308,44 +308,50 @@ function (FileCreatedFromTemplateEvent $event) { && $this->appConfig->isUserAllowedToUse()) { $templateManager->registerTemplateFileCreator(function () use ($appName, $trans) { - $wordTemplate; - if ($this->appConfig->GetDefaultOdf()){ - $wordTemplate = new TemplateFileCreator($appName, $trans->t("New document"), ".odt"); - $wordTemplate->addMimetype("application/vnd.oasis.opendocument.text"); - } else { - $wordTemplate = new TemplateFileCreator($appName, $trans->t("New document"), ".docx"); - $wordTemplate->addMimetype("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); + $extension = ".docx"; + $mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; + + if ($this->appConfig->GetDefaultOdf()) { + $extension = ".odt"; + $mimeType = "application/vnd.oasis.opendocument.text"; } + $wordTemplate = new TemplateFileCreator($appName, $trans->t("New document"), $extension); + $wordTemplate->addMimetype($mimeType); $wordTemplate->setIconClass("icon-onlyoffice-new-docx"); $wordTemplate->setRatio(21/29.7); + return $wordTemplate; }); $templateManager->registerTemplateFileCreator(function () use ($appName, $trans) { - $cellTemplate; - if ($this->appConfig->GetDefaultOdf()){ - $cellTemplate = new TemplateFileCreator($appName, $trans->t("New spreadsheet"), ".ods"); - $cellTemplate->addMimetype("application/vnd.oasis.opendocument.spreadsheet"); - } else { - $cellTemplate = new TemplateFileCreator($appName, $trans->t("New spreadsheet"), ".xlsx"); - $cellTemplate->addMimetype("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); + $extension = ".xlsx"; + $mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; + + if ($this->appConfig->GetDefaultOdf()) { + $extension = ".ods"; + $mimeType = "application/vnd.oasis.opendocument.spreadsheet"; } + $cellTemplate = new TemplateFileCreator($appName, $trans->t("New spreadsheet"), $extension); + $cellTemplate->addMimetype($mimeType); $cellTemplate->setIconClass("icon-onlyoffice-new-xlsx"); $cellTemplate->setRatio(21/29.7); + return $cellTemplate; }); $templateManager->registerTemplateFileCreator(function () use ($appName, $trans) { - $slideTemplate; - if ($this->appConfig->GetDefaultOdf()){ - $slideTemplate = new TemplateFileCreator($appName, $trans->t("New presentation"), ".odp"); - $slideTemplate->addMimetype("application/vnd.oasis.opendocument.presentation"); - } else { - $slideTemplate = new TemplateFileCreator($appName, $trans->t("New presentation"), ".pptx"); - $slideTemplate->addMimetype("application/vnd.openxmlformats-officedocument.presentationml.presentation"); + $extension = ".pptx"; + $mimeType = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; + + if ($this->appConfig->GetDefaultOdf()) { + $extension = ".odp"; + $mimeType = "application/vnd.oasis.opendocument.presentation"; } + $slideTemplate = new TemplateFileCreator($appName, $trans->t("New presentation"), $extension); + $slideTemplate->addMimetype($mimeType); $slideTemplate->setIconClass("icon-onlyoffice-new-pptx"); $slideTemplate->setRatio(16/9); + return $slideTemplate; }); } diff --git a/lib/TemplateManager.php b/lib/TemplateManager.php index 2650837e..b00f5a5c 100644 --- a/lib/TemplateManager.php +++ b/lib/TemplateManager.php @@ -149,30 +149,23 @@ public static function GetTypeTemplate($mime) { */ public static function GetMimeTemplate($type) { + $defaultMimes = [ + "document" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "spreadsheet" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "presentation" => "application/vnd.openxmlformats-officedocument.presentationml.presentation" + ]; + $appConfig = new AppConfig(self::$appName); if ($appConfig->GetDefaultOdf()) { - - switch($type) { - case "document": - return "application/vnd.oasis.opendocument.text"; - case "spreadsheet": - return "application/vnd.oasis.opendocument.spreadsheet"; - case "presentation": - return "application/vnd.oasis.opendocument.presentation"; - } - } else { - - switch($type) { - case "document": - return "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; - case "spreadsheet": - return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - case "presentation": - return "application/vnd.openxmlformats-officedocument.presentationml.presentation"; - } + $defaultMimes = [ + "document" => "application/vnd.oasis.opendocument.text", + "spreadsheet" => "application/vnd.oasis.opendocument.spreadsheet", + "presentation" => "application/vnd.oasis.opendocument.presentation" + ]; } - return ""; + return $defaultMimes[$type] ?? ""; + } /** @@ -185,24 +178,15 @@ public static function GetMimeTemplate($type) { public static function IsTemplateType($name) { $ext = strtolower(pathinfo($name, PATHINFO_EXTENSION)); + $supportedExtensions = ["docx", "xlsx", "pptx"]; + $appConfig = new AppConfig(self::$appName); if ($appConfig->GetDefaultOdf()) { + $supportedExtensions = ["odt", "ods", "odp"]; + } - switch($ext) { - case "odt": - case "ods": - case "odp": - return true; - } - - } else { - - switch($ext) { - case "docx": - case "xlsx": - case "pptx": - return true; - } + if (in_array($ext, $supportedExtensions)) { + return true; } return false; From 5600b1ccfc5537d2ad2758ff9ba2f7db45f5abae Mon Sep 17 00:00:00 2001 From: erseco Date: Fri, 13 Oct 2023 21:28:25 +0100 Subject: [PATCH 3/3] More refactorization and to fit the codestyle --- lib/AppConfig.php | 2 +- lib/FileCreator.php | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/AppConfig.php b/lib/AppConfig.php index 192f1f79..ca02d73f 100644 --- a/lib/AppConfig.php +++ b/lib/AppConfig.php @@ -331,7 +331,7 @@ class AppConfig { * * @var string */ - private $_defaultOdf = "defaultOdf"; + private $_defaultOdf = "default_odf"; /** * @param string $AppName - application name diff --git a/lib/FileCreator.php b/lib/FileCreator.php index 8a7ac35d..e9098017 100644 --- a/lib/FileCreator.php +++ b/lib/FileCreator.php @@ -92,13 +92,13 @@ public function getId(): string { * @return string */ public function getName(): string { - switch ($this->format) { - case "xlsx": - return $this->trans->t("New spreadsheet"); - case "pptx": - return $this->trans->t("New presentation"); - } - return $this->trans->t("New document"); + $formats = [ + "xlsx" => "Spreadsheet", + "ods" => "Spreadsheet", + "pptx" => "Presentation", + "odp" => "Presentation" + ]; + return $this->trans->t($formats[$this->format] ?? "Document"); // Document for docx/odt } /**