From b0cf8d8e2d1de80ecd88ed2ca4b93394f30a8030 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Carretero?=
 <frederic.carretero@veremes.com>
Date: Wed, 21 Nov 2018 10:12:31 +0100
Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20d'un=20projet=20FME=20su?=
 =?UTF-8?q?r=20S3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 web_service/ws/Workspaces.class.inc | 77 +++++++++++++++--------------
 1 file changed, 41 insertions(+), 36 deletions(-)

diff --git a/web_service/ws/Workspaces.class.inc b/web_service/ws/Workspaces.class.inc
index f7919371..d4670d92 100755
--- a/web_service/ws/Workspaces.class.inc
+++ b/web_service/ws/Workspaces.class.inc
@@ -714,7 +714,7 @@ class Workspaces extends GTF {
             $error_message = "";
 
             // Si le dossier {id} n'existe pas (Important pour gérer les erreurs)
-            if (!is_dir($sDirName)) {
+            if (isDirInWsDataDir('gtf', 'workspace', $this->aValues["my_vitis_id"]) !== true) {
                 $error_message .= $sDirName . " does not exist";
                 writeToErrorLog("WARNING: " . $error_message);
 
@@ -725,7 +725,7 @@ class Workspaces extends GTF {
                 return $sMessage;
             }
             // Si le dossier {id}/fme n'existe pas (Important pour gérer les erreurs)
-            if (!is_dir($sDirName . "/fme")) {
+            if (isDirInWsDataDir('gtf', 'workspace', $this->aValues["my_vitis_id"], 'fme') !== true) {
                 $error_message .= $sDirName . "/fme does not exist";
                 writeToErrorLog("WARNING: " . $error_message);
 
@@ -737,9 +737,10 @@ class Workspaces extends GTF {
             }
 
             // Si le dossier {id}/form n'existe pas il est crée
-            if (!is_dir($sDirName . "/form")) {
+            if (isDirInWsDataDir('gtf', 'workspace', $this->aValues["my_vitis_id"], 'form') !== true) {
                 writeToErrorLog("WARNING: " . $sDirName . "/form dit not exist");
-                @mkdir($sDirName . "/form");
+                if ($this->aProperties['fileS3Uploader'] === false)
+                    @mkdir($sDirName . "/form");
             }
 
             if (!empty($this->aValues["cmd"])) {
@@ -846,15 +847,16 @@ class Workspaces extends GTF {
             if (!empty($this->aValues["fmw_file_file"])) {
                 $this->aValues["fmw_file"] = $this->aValues["fmw_file_name"];
             }
+            // Upload du fichier de ressource.
             if (!empty($this->aValues["comp_file_file"])) {
                 $this->aValues["comp_file"] = $this->aValues["comp_file_name"];
-                $fp = fopen($sDirName . "/fme/" . utf8_decode($this->aValues["comp_file_name"]), "w");
-                fwrite($fp, $this->aValues["comp_file_file"]);
-                fclose($fp);
-                $ext = pathinfo($sDirName . "/fme/" . utf8_decode($this->aValues["comp_file_name"]), PATHINFO_EXTENSION);
+                putFileContentInWsDataDir('gtf', 'workspace', $this->aValues["my_vitis_id"], 'fme', $this->aValues["comp_file_name"], $this->aValues["comp_file_file"]);
+                /*
+                $ext = pathinfo($_FILES['comp_file']['name'], PATHINFO_EXTENSION);
                 if ($ext == "zip") {
-                    unZip($sDirName . "/fme/" . utf8_decode($this->aValues["comp_file_name"]), $sDirName . "/fme/");
+                    unZip($sDirName . "/fme/" . utf8_decode($_FILES['comp_file']['name']), $sDirName . "/fme/");
                 }
+                */
             }
             $aReturn = $this->genericPut($this->aProperties['schema_gtf'], 'workspace', 'workspace_id');
             if ($aReturn["sStatus"] == 1) {
@@ -882,35 +884,38 @@ class Workspaces extends GTF {
                         $aExt = explode(".", $this->aValues["fmw_file_name"]);
                         if ($aExt[count($aExt) - 1] == "fmw") {
                             // Sauve le nouveau fichier fmw.
-                            $fp = fopen($sDirName . "/fme/" . utf8_decode($this->aValues["fmw_file_name"]), "w");
-                            fwrite($fp, $this->aValues["fmw_file_file"]);
-                            fclose($fp);
-                            // Fichier .fmw original en .bak.
-                            copy($sDirName . "/fme/" . utf8_decode($this->aValues['fmw_file_name']), $sDirName . "/fme/" . utf8_decode($this->aValues['fmw_file_name']) . '.bak');
-                            // Création du nouveau formulaire.
-                            $oFmwParser = new GtfFmwParser($sDirName . "/fme/" . $this->aValues["fmw_file_name"]);
-                            // Sauve le .fmw sans les visualizers.
-                            $oFmwParser->save($sDirName . "/fme/" . utf8_decode($this->aValues["fmw_file_name"]));
-                            // Création des formulaires json.
-                            $aJson = $oFmwParser->productJson($this->aProperties, $oWorkspace->aFields["name"]);
-                            $fJson = fopen($sDirName . "/form/DSubform.json", "w");
-                            if (fwrite($fJson, json_encode($aJson)) == FALSE) {
-                                if ($fJson == FALSE) {
-                                    writeToErrorLog("Subform.json can't be opened : " . $sDirName . "/form/ressources/Subform.json" . "(Workspaces.class.inc : verify the property workspace_dir)");
-                                } else {
-                                    writeToErrorLog("Subform.json can't be writed : " . $sDirName . "/form/ressources/Subform.json" . "(Workspaces.class.inc : verify the folder's rights)");
-                                }
+                            putFileContentInWsDataDir('gtf', 'workspace', $this->aValues["my_vitis_id"], 'fme', $this->aValues["fmw_file_name"], $this->aValues["fmw_file_file"]);
+                            // Copie du .fmw original en .bak.
+                            if (!empty($sErrorMessage)) {
+                                writeToErrorLog($sErrorMessage);
+                                $oError = new VitisError(8, $sErrorMessage);
+                                $aXmlRacineAttribute['status'] = 0;
+                                $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']);
                             }
-                            fclose($fJson);
-                            if ($oWorkspace->aFields["form_type"] == 'default') {
-                                copy($sDirName . "/form/DSubform.json", $sDirName . "/form/Subform.json");
-                                copy($sDirName . "/form/DSubform.json", $sDirName . "/form/WSubform.json");
+                            else {
+                                copyFileInWsDataDir ('gtf', 'workspace', $this->aValues["my_vitis_id"], 'fme', $this->aValues['fmw_file_name'], $this->aValues['fmw_file_name'] . '.bak');
+                                // Création des fichiers vides de ressources js et css.
+                                putFileContentInWsDataDir('gtf', 'workspace', $this->aValues["my_vitis_id"], 'form/ressources', 'Subform.js', '');
+                                putFileContentInWsDataDir('gtf', 'workspace', $this->aValues["my_vitis_id"], 'form/ressources', 'Subform.css', '');
+                                // Lit le contenu du fichier .fmw du projet.
+                                $sFmwFileContent = getFileContentInWsDataDir("gtf", "workspace", $this->aValues["my_vitis_id"], $sField = 'fme', $this->aValues['fmw_file_name']);
+                                // Sauve le .fmw sans les visualizers.
+                                $oFmwParser = new GtfFmwParser($this->aValues['fmw_file_name'], $sFmwFileContent, $this->aProperties);
+                                $oFmwParser->save($oFmwParser->sFmwFileName);
+                                putFileContentInWsDataDir('gtf', 'workspace', $this->aValues["my_vitis_id"], 'fme', $this->aValues['fmw_file_name'], file_get_contents($oFmwParser->sFmwFileName));
+                                // Création des formulaires json.
+                                $aJson = $oFmwParser->productJson($oWorkspace->aFields["name"]);
+                                if (putFileContentInWsDataDir('gtf', 'workspace', $this->aValues["my_vitis_id"], 'form', 'DSubform.json', json_encode($aJson)) !== false && $oWorkspace->aFields["form_type"] == 'default') {
+                                    copyFileInWsDataDir ('gtf', 'workspace', $this->aValues["my_vitis_id"], 'form', 'DSubform.json', 'WSubform.json');
+                                    copyFileInWsDataDir ('gtf', 'workspace', $this->aValues["my_vitis_id"], 'form', 'DSubform.json', 'Subform.json');
+                                }
+                                // Récupère les anciens paramètres.
+                                $oFmwParser->getBdMetadata($this->oConnection->oBd, $this->aValues["my_vitis_id"]);
+                                // Mise à jour des paramètres du nouveau fichier dans la base.
+                                $oFmwParser->sSaveDate = gmdate('Y-m-d G:i:s');
+                                $oFmwParser->updateMetadata($this->oConnection->oBd, $this->aValues["my_vitis_id"]);
+                                /*****************************************************************/
                             }
-                            // Récupère les anciens paramètres.
-                            $oFmwParser->getBdMetadata($this->oConnection->oBd, $this->aValues["my_vitis_id"]);
-                            // Mise à jour des paramètres du nouveau fichier dans la base.
-                            $oFmwParser->sSaveDate = gmdate('Y-m-d G:i:s');
-                            $oFmwParser->updateMetadata($this->oConnection->oBd, $this->aValues["my_vitis_id"]);
                         }
                     } else {
                         $aXmlRacineAttribute['status'] = 1;
-- 
GitLab