From 04c7dc1d6275c00dc2fd5c9f4e4d79c9e7ec74a0 Mon Sep 17 00:00:00 2001 From: Armand Bahi <armand.bahi@veremes.com> Date: Mon, 28 Jan 2019 14:14:41 +0100 Subject: [PATCH] Suppression des fichiers sur le serveur --- .../app/vmap/tools/select/select.js | 13 +----- .../web_service/ws/Querys.class.inc | 15 +++++- .../javascript/app/services/formSrvc.js | 46 +++++++++---------- .../component/file_picker/file_picker.js | 32 +++++++++++++ .../class/vmlib/files/Files_manager.class.inc | 41 ++++++++++++----- 5 files changed, 99 insertions(+), 48 deletions(-) diff --git a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js index 2da086c6..bf55eda5 100755 --- a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js +++ b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js @@ -1648,7 +1648,6 @@ nsVmap.nsToolsManager.Select.prototype.selectController.prototype.getFormDataFro oVmap.log('nsVmap.nsToolsManager.Select.prototype.selectController.prototype.getFormDataFromValues'); var oFormData_ = new FormData(); - var oUnchangedFiles = {}; for (var key in oValues) { @@ -1665,13 +1664,7 @@ nsVmap.nsToolsManager.Select.prototype.selectController.prototype.getFormDataFro oFormData_.append(key, oValues[key]['aFiles'][0]['name']); } else if (bIsMultipleFiles) { for (var i = 0; i < oValues[key].length; i++) { - if (oValues[key][i]._modified === false) { - // Mémorise les fichiers non modifiés par l'utilisateur - if (!goog.isArray(oUnchangedFiles[key])) { - oUnchangedFiles[key] = []; - } - oUnchangedFiles[key].push(oValues[key][i]['name']); - } else { + if (oValues[key][i]._modified !== false) { // Ajoute les fichiers if (goog.isDefAndNotNull(oValues[key][i]['name'])) { oFormData_.append(key + '[]', oValues[key][i], oValues[key][i]['name']); @@ -1685,10 +1678,6 @@ nsVmap.nsToolsManager.Select.prototype.selectController.prototype.getFormDataFro } } - if (Object.keys(oUnchangedFiles).length > 0) { - oFormData_.append('vitis_unchanged_files', JSON.stringify(oUnchangedFiles)); - } - return oFormData_; }; diff --git a/src/module_vmap/web_service/ws/Querys.class.inc b/src/module_vmap/web_service/ws/Querys.class.inc index e3f6c006..05db9e05 100644 --- a/src/module_vmap/web_service/ws/Querys.class.inc +++ b/src/module_vmap/web_service/ws/Querys.class.inc @@ -1444,6 +1444,19 @@ class Querys extends Vmap { $aUnchangedFiles = json_decode($this->aValues['vitis_unchanged_files'], true); } + // Fichiers à supprimer ? + if (!empty($this->aValues['vitis_deleted_files'])) { + $aDeletedFiles = json_decode($this->aValues['vitis_deleted_files'], true); + foreach ($aDeletedFiles as $sName => $aFile) { + // Supprime les fichiers + $this->oFilesManager->cleanWsDataDir('vitis', $sBusinessObjectId, $this->aValues['my_vitis_id'], $sName, 'documents', $aDeletedFiles[$sName], false); + // Set aValues avec les fichiers restants + if (!empty($aUnchangedFiles[$sName])) { + $this->aValues[$sName] = implode('|', $aUnchangedFiles[$sName]); + } + } + } + // Fichiers à uploader ? if (!empty($_FILES) && !empty($this->aValues['my_vitis_id'])) { foreach ($_FILES as $sName => $aFile) { @@ -1455,7 +1468,7 @@ class Querys extends Vmap { } // Nettoyage de l'espace ws_data - $this->oFilesManager->emptyWsDataDir('vitis', $sBusinessObjectId, $this->aValues['my_vitis_id'], $sName, 'documents', $aExceptions); + $this->oFilesManager->cleanWsDataDir('vitis', $sBusinessObjectId, $this->aValues['my_vitis_id'], $sName, 'documents', false, $aExceptions); // Écriture des fichiers $aUploadReturn = $this->oFilesManager->uploadInWsDataDir('vitis', $sBusinessObjectId, $this->aValues['my_vitis_id'], $sName, 'documents', -1, "all", null, true); diff --git a/src/vitis/client/javascript/app/services/formSrvc.js b/src/vitis/client/javascript/app/services/formSrvc.js index 8d0eba1b..c2d0eb55 100755 --- a/src/vitis/client/javascript/app/services/formSrvc.js +++ b/src/vitis/client/javascript/app/services/formSrvc.js @@ -54,19 +54,11 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe var bContainFiles = false; var oFiles = null; - if (document.getElementById(aFormRowElementsList[ifieldIndex]["id"]) != null) { + if (document.getElementById(aFormRowElementsList[ifieldIndex]['id']) != null) { bContainFiles = true; - oFiles = document.getElementById(aFormRowElementsList[ifieldIndex]["id"]).files; - console.log('1'); + oFiles = document.getElementById(aFormRowElementsList[ifieldIndex]['id']).files; } else { - console.log('2'); - - var oElemValue = aFormValues[aFormRowElementsList[ifieldIndex]["name"]]; - - console.log("aFormValues: ", aFormValues); - console.log("aFormRowElementsList[ifieldIndex][name]: ", aFormRowElementsList[ifieldIndex]["name"]); - console.log("oElemValue: ", oElemValue); - + var oElemValue = aFormValues[aFormRowElementsList[ifieldIndex]['name']]; if (goog.isArray(oElemValue)) { if (goog.isDefAndNotNull(oElemValue[0])) { if (goog.isDefAndNotNull(oElemValue[0]['name'])) { @@ -81,17 +73,23 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe } } - console.log("oFiles: ", oFiles); - if (goog.isDefAndNotNull(oFiles)) { if (oFiles.length > 0) { - oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"]] = oFiles[0]; + oFormKeysValues[aFormRowElementsList[ifieldIndex]['name']] = oFiles[0]; if (oFiles.length > 1) { - oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"]] = oFiles; + oFormKeysValues[aFormRowElementsList[ifieldIndex]['name']] = oFiles; + } + if (goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]['width']) && goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]['height'])) { + oFormKeysValues[aFormRowElementsList[ifieldIndex]['name'] + '_width'] = aFormRowElementsList[ifieldIndex]['width']; + oFormKeysValues[aFormRowElementsList[ifieldIndex]['name'] + '_height'] = aFormRowElementsList[ifieldIndex]['height']; + } + // vitis_deleted_files + if (goog.isDefAndNotNull(aFormValues['vitis_deleted_files'])) { + oFormKeysValues['vitis_deleted_files'] = JSON.stringify(aFormValues['vitis_deleted_files']); } - if (goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]["width"]) && goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]["height"])) { - oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"] + "_width"] = aFormRowElementsList[ifieldIndex]["width"]; - oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"] + "_height"] = aFormRowElementsList[ifieldIndex]["height"]; + // vitis_unchanged_files + if (goog.isDefAndNotNull(aFormValues['vitis_unchanged_files'])) { + oFormKeysValues['vitis_unchanged_files'] = JSON.stringify(aFormValues['vitis_unchanged_files']); } } else { bContainFiles = false; @@ -101,17 +99,17 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe } if (!bContainFiles) { - var oElemValue = aFormValues[aFormRowElementsList[ifieldIndex]["name"]]; + var oElemValue = aFormValues[aFormRowElementsList[ifieldIndex]['name']]; if (goog.isDefAndNotNull(oElemValue)) { if (goog.isDefAndNotNull(oElemValue['aFiles'])) { if (goog.isDefAndNotNull(oElemValue['aFiles'][0])) { - oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"]] = oElemValue['aFiles'][0]; + oFormKeysValues[aFormRowElementsList[ifieldIndex]['name']] = oElemValue['aFiles'][0]; if (oElemValue['aFiles'].length > 1) { - oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"]] = oElemValue['aFiles']; + oFormKeysValues[aFormRowElementsList[ifieldIndex]['name']] = oElemValue['aFiles']; } - if (goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]["width"]) && goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]["height"])) { - oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"] + "_width"] = aFormRowElementsList[ifieldIndex]["width"]; - oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"] + "_height"] = aFormRowElementsList[ifieldIndex]["height"]; + if (goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]['width']) && goog.isDefAndNotNull(aFormRowElementsList[ifieldIndex]['height'])) { + oFormKeysValues[aFormRowElementsList[ifieldIndex]['name'] + '_width'] = aFormRowElementsList[ifieldIndex]['width']; + oFormKeysValues[aFormRowElementsList[ifieldIndex]['name'] + '_height'] = aFormRowElementsList[ifieldIndex]['height']; } } } diff --git a/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js index b23574a2..ca831964 100644 --- a/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js +++ b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.js @@ -45,6 +45,11 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie */ scope['aFiles'] = []; + /** + * Fichiers à supprimer + */ + scope['aDeletedFiles'] = []; + /** * Liste des URL des images à afficher */ @@ -116,6 +121,7 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie scope['aFiles'] = []; scope['aPreviewImages'] = []; scope['aPreviewDocuments'] = []; + scope['aDeletedFiles'] = []; scope['initPreview'](); }); } @@ -442,6 +448,9 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie }, 'callback': function (result) { if (result) { + + scope['aDeletedFiles'].push(oFile['name']); + for (var i = 0; i < scope['aFiles'].length; i++) { if(scope['aFiles'][i]['name'] === oFile['name']){ scope['aFiles'].splice(i, 1); @@ -624,6 +633,29 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie scope['saveFiles'] = function() { $log.log("formReader.FilePickerDirective.saveFiles"); + // Fichiers inchangés à ne pas re-envoyer + var aUnchangedFiles = []; + for (var i = 0; i < scope['aFiles'].length; i++) { + if (scope['aFiles'][i]._modified === false) { + aUnchangedFiles.push(scope['aFiles'][i]['name']); + } + } + if (aUnchangedFiles.length > 0) { + if (!goog.isDefAndNotNull(scope['oFormValues'][scope['sFormDefinitionName']]['vitis_unchanged_files'])) { + scope['oFormValues'][scope['sFormDefinitionName']]['vitis_unchanged_files'] = {} + } + scope['oFormValues'][scope['sFormDefinitionName']]['vitis_unchanged_files'][scope['field'].name] = aUnchangedFiles; + } + + // Fichiers à supprimer + if (scope['aDeletedFiles'].length > 0) { + if (!goog.isDefAndNotNull(scope['oFormValues'][scope['sFormDefinitionName']]['vitis_deleted_files'])) { + scope['oFormValues'][scope['sFormDefinitionName']]['vitis_deleted_files'] = {} + } + scope['oFormValues'][scope['sFormDefinitionName']]['vitis_deleted_files'][scope['field'].name] = scope['aDeletedFiles']; + } + + // Fichiers à envoyer scope['oFormValues'][scope['sFormDefinitionName']][scope['field'].name] = scope['aFiles']; } } diff --git a/src/vitis/vas/rest/class/vmlib/files/Files_manager.class.inc b/src/vitis/vas/rest/class/vmlib/files/Files_manager.class.inc index 2aac729c..53d2e359 100644 --- a/src/vitis/vas/rest/class/vmlib/files/Files_manager.class.inc +++ b/src/vitis/vas/rest/class/vmlib/files/Files_manager.class.inc @@ -477,7 +477,7 @@ class Files_manager{ *@param $sContainer folder between $sObject and $mId *@return true if the disrectory has benn cleaned */ - public function emptyWsDataDir($sModule, $sObject, $mId, $sField, $sContainer = "", $aExceptions = []){ + public function cleanWsDataDir($sModule, $sObject, $mId, $sField, $sContainer = "", $aFilesToDelete = false, $aExceptions = false){ // controle les attributs pour éviter les mauvais placements if (strpos($sModule, '/') > -1){ @@ -520,15 +520,32 @@ class Files_manager{ // Ajoute les miniatures aux exceptions $aMinExceptions = []; - for ($i=0; $i < count($aExceptions); $i++) { - $aMinException = explode('.', $aExceptions[$i]); - array_pop($aMinException); - array_push($aMinException, 'min'); - array_push($aMinException, 'jpg'); - array_push($aMinExceptions, implode('.', $aMinException)); + if ($aExceptions !== false) { + for ($i=0; $i < count($aExceptions); $i++) { + $aMinException = explode('.', $aExceptions[$i]); + array_pop($aMinException); + array_push($aMinException, 'min'); + array_push($aMinException, 'jpg'); + array_push($aMinExceptions, implode('.', $aMinException)); + } + for ($i=0; $i < count($aMinExceptions); $i++) { + array_push($aExceptions, $aMinExceptions[$i]); + } } - for ($i=0; $i < count($aMinExceptions); $i++) { - array_push($aExceptions, $aMinExceptions[$i]); + + // Ajoute les miniatures aux fichiers à supprimer + $aMinFilesToDelete = []; + if ($aFilesToDelete !== false) { + for ($i=0; $i < count($aFilesToDelete); $i++) { + $aMinFileToDelete = explode('.', $aFilesToDelete[$i]); + array_pop($aMinFileToDelete); + array_push($aMinFileToDelete, 'min'); + array_push($aMinFileToDelete, 'jpg'); + array_push($aMinFilesToDelete, implode('.', $aMinFileToDelete)); + } + for ($i=0; $i < count($aMinFilesToDelete); $i++) { + array_push($aFilesToDelete, $aMinFilesToDelete[$i]); + } } // création du fichier si besoin @@ -536,8 +553,10 @@ class Files_manager{ $files = glob($sDestDir . '/*'); // get all file names foreach($files as $file){ // iterate files if(is_file($file)){ - if (!in_array(basename($file), $aExceptions)) { - unlink($file); + if (in_array(basename($file), $aFilesToDelete) || $aFilesToDelete == false) { + if (!in_array(basename($file), $aExceptions) || $aExceptions == false) { + unlink($file); + } } } } -- GitLab