From 0dd886bf39f2c1cbc2cf1ef98f8f76e79d766f4a Mon Sep 17 00:00:00 2001
From: Damien <damien.burel@maarch.org>
Date: Tue, 17 Dec 2019 14:31:28 +0100
Subject: [PATCH] FEAT #11158 TIME 0:30 Document editors

---
 .../xml/documentEditorsConfig.xml             | 10 +++++
 .../xml/onlineEditorsConfig.xml.default       |  7 ----
 rest/index.php                                |  1 +
 .../controllers/DocumentEditorController.php  | 38 +++++++++++++++++++
 .../controllers/OnlyOfficeController.php      |  6 +--
 src/app/user/controllers/UserController.php   |  4 +-
 6 files changed, 54 insertions(+), 12 deletions(-)
 create mode 100644 apps/maarch_entreprise/xml/documentEditorsConfig.xml
 delete mode 100644 apps/maarch_entreprise/xml/onlineEditorsConfig.xml.default
 create mode 100644 src/app/contentManagement/controllers/DocumentEditorController.php

diff --git a/apps/maarch_entreprise/xml/documentEditorsConfig.xml b/apps/maarch_entreprise/xml/documentEditorsConfig.xml
new file mode 100644
index 00000000000..e9d7d68d0f0
--- /dev/null
+++ b/apps/maarch_entreprise/xml/documentEditorsConfig.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ROOT>
+    <java>
+        <enabled>true</enabled>
+    </java>
+    <onlyoffice>
+        <enabled>true</enabled>
+        <server_uri>10.2.95.76:8765</server_uri>
+    </onlyoffice>
+</ROOT>
diff --git a/apps/maarch_entreprise/xml/onlineEditorsConfig.xml.default b/apps/maarch_entreprise/xml/onlineEditorsConfig.xml.default
deleted file mode 100644
index 36632361c76..00000000000
--- a/apps/maarch_entreprise/xml/onlineEditorsConfig.xml.default
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<ROOT>
-    <ONLY_OFFICE>
-        <ENABLED>true</ENABLED>
-        <SERVER_URI>127.0.0.1</SERVER_URI>
-    </ONLY_OFFICE>
-</ROOT>
diff --git a/rest/index.php b/rest/index.php
index 624ddc075d2..f783c454fff 100755
--- a/rest/index.php
+++ b/rest/index.php
@@ -138,6 +138,7 @@ $app->post('/jnlp', \ContentManagement\controllers\JnlpController::class . ':gen
 $app->get('/jnlp/{jnlpUniqueId}', \ContentManagement\controllers\JnlpController::class . ':renderJnlp');
 $app->post('/jnlp/{jnlpUniqueId}', \ContentManagement\controllers\JnlpController::class . ':processJnlp');
 $app->get('/jnlp/lock/{jnlpUniqueId}', \ContentManagement\controllers\JnlpController::class . ':isLockFileExisting');
+$app->get('/documentEditors', \ContentManagement\controllers\DocumentEditorController::class . ':get');
 $app->get('/onlyOffice/configuration', \ContentManagement\controllers\OnlyOfficeController::class . ':getConfiguration');
 $app->post('/onlyOffice/mergedFile', \ContentManagement\controllers\OnlyOfficeController::class . ':saveMergedFile');
 $app->get('/onlyOffice/mergedFile', \ContentManagement\controllers\OnlyOfficeController::class . ':getMergedFile');
diff --git a/src/app/contentManagement/controllers/DocumentEditorController.php b/src/app/contentManagement/controllers/DocumentEditorController.php
new file mode 100644
index 00000000000..818e6f9f3aa
--- /dev/null
+++ b/src/app/contentManagement/controllers/DocumentEditorController.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * Copyright Maarch since 2008 under licence GPLv3.
+ * See LICENCE.txt file at the root folder for more details.
+ * This file is part of Maarch software.
+ */
+
+/**
+ * @brief Online Editor Controller
+ *
+ * @author dev@maarch.org
+ */
+
+namespace ContentManagement\controllers;
+
+use Slim\Http\Request;
+use Slim\Http\Response;
+use SrcCore\models\CoreConfigModel;
+
+class DocumentEditorController
+{
+    const DOCUMENT_EDITION_METHODS = ['java', 'onlyoffice'];
+
+    public static function get(Request $request, Response $response)
+    {
+        $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'apps/maarch_entreprise/xml/documentEditorsConfig.xml']);
+
+        $allowedMethods = [];
+        foreach (self::DOCUMENT_EDITION_METHODS as $method) {
+            if (!empty($loadedXml->$method->enabled) || $loadedXml->$method->enabled == 'true') {
+                $allowedMethods[] = $method;
+            }
+        }
+
+        return $response->withJson($allowedMethods);
+    }
+}
diff --git a/src/app/contentManagement/controllers/OnlyOfficeController.php b/src/app/contentManagement/controllers/OnlyOfficeController.php
index 00759d32422..f02bb3a34da 100644
--- a/src/app/contentManagement/controllers/OnlyOfficeController.php
+++ b/src/app/contentManagement/controllers/OnlyOfficeController.php
@@ -27,15 +27,15 @@ class OnlyOfficeController
 {
     public static function getConfiguration(Request $request, Response $response)
     {
-        $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'apps/maarch_entreprise/xml/onlineEditorsConfig.xml']);
+        $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'apps/maarch_entreprise/xml/documentEditorsConfig.xml']);
 
-        if (empty($loadedXml) || empty($loadedXml->ONLY_OFFICE->ENABLED) || $loadedXml->ONLY_OFFICE->ENABLED == 'false' || empty($loadedXml->ONLY_OFFICE->SERVER_URI)) {
+        if (empty($loadedXml) || empty($loadedXml->onlyoffice->enabled) || $loadedXml->onlyoffice->enabled == 'false' || empty($loadedXml->onlyoffice->server_uri)) {
             return $response->withJson(['enabled' => false]);
         }
 
         $coreUrl = str_replace('rest/', '', UrlController::getCoreUrl());
 
-        return $response->withJson(['enabled' => true, 'serverUri' => (string)$loadedXml->ONLY_OFFICE->SERVER_URI, 'coreUrl' => $coreUrl]);
+        return $response->withJson(['enabled' => true, 'serverUri' => (string)$loadedXml->onlyoffice->server_uri, 'coreUrl' => $coreUrl]);
     }
 
     public static function saveMergedFile(Request $request, Response $response)
diff --git a/src/app/user/controllers/UserController.php b/src/app/user/controllers/UserController.php
index c5d5ad01d5f..975d13d9ef8 100755
--- a/src/app/user/controllers/UserController.php
+++ b/src/app/user/controllers/UserController.php
@@ -17,6 +17,7 @@ namespace User\controllers;
 use Basket\models\BasketModel;
 use Basket\models\GroupBasketModel;
 use Basket\models\RedirectBasketModel;
+use ContentManagement\controllers\DocumentEditorController;
 use Docserver\controllers\DocserverController;
 use Docserver\models\DocserverModel;
 use Email\controllers\EmailController;
@@ -53,7 +54,6 @@ use User\models\UserSignatureModel;
 class UserController
 {
     const ALTERNATIVES_CONNECTIONS_METHODS = ['sso', 'cas', 'ldap', 'ozwillo', 'shibboleth'];
-    const DOCUMENT_EDITION_METHODS = ['java', 'onlyOffice'];
 
     public function get(Request $request, Response $response)
     {
@@ -537,7 +537,7 @@ class UserController
         } elseif (!Validator::arrayType()->notEmpty()->validate($body['preferences'])) {
             return $response->withStatus(400)->withJson(['errors' => 'Body preferences is empty or not an array']);
         }
-        if (!in_array($body['preferences']['documentEdition'], UserController::DOCUMENT_EDITION_METHODS)) {
+        if (!in_array($body['preferences']['documentEdition'], DocumentEditorController::DOCUMENT_EDITION_METHODS)) {
             return $response->withStatus(400)->withJson(['errors' => 'Body preferences[documentEdition] is not allowed']);
         }
 
-- 
GitLab