From de8419d7893d6040cffdb1418300226f4d1842aa Mon Sep 17 00:00:00 2001 From: Armand Bahi <armand.bahi@veremes.com> Date: Tue, 8 Jan 2019 15:48:12 +0100 Subject: [PATCH] Upload multiple documents front-end --- .../javascript/app/vmap/tools/insert.js | 22 ++++++++++++++----- .../app/vmap/tools/select/select.js | 12 ++++++++++ .../javascript/app/services/formSrvc.js | 7 +++++- .../externs/formReader/formReaderDrtv.js | 16 ++++++++++++++ .../externs/studio/lang/lang-en.json | 1 + .../externs/studio/lang/lang-fr.json | 1 + .../externs/studio/templates/ElementForm.html | 8 +++++++ 7 files changed, 60 insertions(+), 7 deletions(-) diff --git a/src/module_vmap/module/javascript/app/vmap/tools/insert.js b/src/module_vmap/module/javascript/app/vmap/tools/insert.js index 3e2a40ce..b4b7e11a 100644 --- a/src/module_vmap/module/javascript/app/vmap/tools/insert.js +++ b/src/module_vmap/module/javascript/app/vmap/tools/insert.js @@ -1528,14 +1528,24 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.getFormDat var oFormData_ = new FormData(); for (var key in oValues) { + + var bIsMultipleFiles = false; + if (goog.isObject(oValues[key])) { + if (goog.isDefAndNotNull(oValues[key].length)) { + bIsMultipleFiles = true + } + } + // Fichier ? - if (goog.isDefAndNotNull(oValues[key])) { - if (goog.isDefAndNotNull(oValues[key]['aFiles'])) { - oFormData_.append(key + '_attached_content', oValues[key]['aFiles'][0]); - oFormData_.append(key, oValues[key]['aFiles'][0]['name']); - } else { - oFormData_.append(key, oValues[key]); + if (goog.isDefAndNotNull(oValues[key]['aFiles'])) { + oFormData_.append(key + '_attached_content', oValues[key]['aFiles'][0]); + oFormData_.append(key, oValues[key]['aFiles'][0]['name']); + } else if (bIsMultipleFiles) { + for (var i = 0; i < oValues[key].length; i++) { + oFormData_.append(key + '[]', oValues[key][i]); } + } else { + oFormData_.append(key, oValues[key]); } } 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 40e76003..6438fce7 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 @@ -1650,10 +1650,22 @@ nsVmap.nsToolsManager.Select.prototype.selectController.prototype.getFormDataFro var oFormData_ = new FormData(); for (var key in oValues) { + + var bIsMultipleFiles = false; + if (goog.isObject(oValues[key])) { + if (goog.isDefAndNotNull(oValues[key].length)) { + bIsMultipleFiles = true + } + } + // Fichier ? if (goog.isDefAndNotNull(oValues[key]['aFiles'])) { oFormData_.append(key + '_attached_content', oValues[key]['aFiles'][0]); oFormData_.append(key, oValues[key]['aFiles'][0]['name']); + } else if (bIsMultipleFiles) { + for (var i = 0; i < oValues[key].length; i++) { + oFormData_.append(key + '[]', oValues[key][i]); + } } else { oFormData_.append(key, oValues[key]); } diff --git a/src/vitis/client/javascript/app/services/formSrvc.js b/src/vitis/client/javascript/app/services/formSrvc.js index d1075e84..ea6c95d4 100755 --- a/src/vitis/client/javascript/app/services/formSrvc.js +++ b/src/vitis/client/javascript/app/services/formSrvc.js @@ -57,6 +57,9 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe if (goog.isDefAndNotNull(oFiles)) { if (oFiles.length > 0) { oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"]] = oFiles[0]; + if (oFiles.length > 1) { + 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"]; @@ -74,6 +77,9 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe if (goog.isDefAndNotNull(oElemValue['aFiles'])) { if (goog.isDefAndNotNull(oElemValue['aFiles'][0])) { oFormKeysValues[aFormRowElementsList[ifieldIndex]["name"]] = oElemValue['aFiles'][0]; + if (oElemValue['aFiles'].length > 1) { + 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"]; @@ -163,7 +169,6 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe i++; } } - // return oFormData; }, /** diff --git a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js index 8c065e61..7d3a99d1 100644 --- a/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js +++ b/src/vitis/client/javascript/externs/formReader/formReaderDrtv.js @@ -875,6 +875,14 @@ formReader.appFormFieldSpecificParamsDrtv = function ($timeout, $translate, prop $(element)["fileinput"](oOptions); break; case 'file_wsdata': + + // Évite la multiplication des champs depuis le studio + // quand on coche/décoche "Multiple documents" + if ($(element).parent().find('.file-input').length > 0) { + $(element).remove(); + break; + } + // Si sélection d'un fichier à uploader : sauve ses paramètres. element[0].addEventListener("change", function () { var oFileList = { @@ -909,6 +917,14 @@ formReader.appFormFieldSpecificParamsDrtv = function ($timeout, $translate, prop $(element)["fileinput"](oOptions); break; case 'image_wsdata': + + // Évite la multiplication des champs depuis le studio + // quand on coche/décoche "Multiple documents" + if ($(element).parent().find('.file-input').length > 0) { + $(element).remove(); + break; + } + if (!goog.isDefAndNotNull(scope["field"]["display_width"])) { scope["field"]["display_width"] = "100%"; } diff --git a/src/vitis/client/javascript/externs/studio/lang/lang-en.json b/src/vitis/client/javascript/externs/studio/lang/lang-en.json index dc673374..a470fad3 100755 --- a/src/vitis/client/javascript/externs/studio/lang/lang-en.json +++ b/src/vitis/client/javascript/externs/studio/lang/lang-en.json @@ -155,6 +155,7 @@ "Height": "Height :", "Required": "Required", "displayOnly": "Display only", + "multipleFiles": "Multiple files", "Default": "Default", "DefaultValue": "Default value", "DynamicOptions": "Dynamic options", diff --git a/src/vitis/client/javascript/externs/studio/lang/lang-fr.json b/src/vitis/client/javascript/externs/studio/lang/lang-fr.json index 3527a5d1..479588c5 100755 --- a/src/vitis/client/javascript/externs/studio/lang/lang-fr.json +++ b/src/vitis/client/javascript/externs/studio/lang/lang-fr.json @@ -161,6 +161,7 @@ "Height": "Hauteur :", "Required": "Requis", "displayOnly": "Uniquement en consultation", + "multipleFiles": "Multiple documents", "Default": "Défaut", "DefaultValue": "Valeur par défaut", "DynamicOptions": "Options dynamiques", diff --git a/src/vitis/client/javascript/externs/studio/templates/ElementForm.html b/src/vitis/client/javascript/externs/studio/templates/ElementForm.html index 6d8afd0c..bb828ebd 100755 --- a/src/vitis/client/javascript/externs/studio/templates/ElementForm.html +++ b/src/vitis/client/javascript/externs/studio/templates/ElementForm.html @@ -1649,6 +1649,10 @@ <label id="label_slider_Element_size" for="slider_Element_size">{{::ctrl.text.Component.General.Width}}</label> <input ng-disabled="locker" data-app-param-element id="slider_Element_size" data-slider-id='slider_Element_size' type="text" data-slider-min="0" data-slider-max="12" data-slider-step="1" data-slider-value="12" required> </div> + <div class="checkbox checkbox-primary checkbox_margin"> + <input ng-disabled="locker" type="checkbox" name="Element_Form_multipleFiles_input" id="Element_Form_multipleFiles_input" ng-model="model.multiple"> + <label for="Element_Form_multipleFiles_input" id="Element_Form_multipleFiles_label" class="control-label unselectable ">{{::ctrl.text.Component.General.multipleFiles}}</label> + </div> <div class="checkbox checkbox-primary checkbox_margin"> <input ng-disabled="locker" type="checkbox" name="Element_Form_displayOnly_input" id="Element_Form_displayOnly_input" ng-model="model.displayOnly"> <label for="Element_Form_displayOnly_input" id="Element_Form_displayOnly_label" class="control-label unselectable ">{{::ctrl.text.Component.General.displayOnly}}</label> @@ -1730,6 +1734,10 @@ <label id="label_slider_Element_size" for="slider_Element_size">{{::ctrl.text.Component.General.Width}}</label> <input ng-disabled="locker" data-app-param-element id="slider_Element_size" data-slider-id='slider_Element_size' type="text" data-slider-min="0" data-slider-max="12" data-slider-step="1" data-slider-value="12" required> </div> + <div class="checkbox checkbox-primary checkbox_margin"> + <input ng-disabled="locker" type="checkbox" name="Element_Form_multipleFiles_input" id="Element_Form_multipleFiles_input" ng-model="model.multiple"> + <label for="Element_Form_multipleFiles_input" id="Element_Form_multipleFiles_label" class="control-label unselectable ">{{::ctrl.text.Component.General.multipleFiles}}</label> + </div> <div class="checkbox checkbox-primary checkbox_margin"> <input ng-disabled="locker" type="checkbox" name="Element_Form_displayOnly_input" id="Element_Form_displayOnly_input" ng-model="model.displayOnly"> <label for="Element_Form_displayOnly_input" id="Element_Form_displayOnly_label" class="control-label unselectable ">{{::ctrl.text.Component.General.displayOnly}}</label> -- GitLab