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" />
+
+
+
$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
}
/**