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 3e2a40ce1ede6f7d9f266c25b9d54b077e6eb669..b4b7e11aabe4ec7145ccb781d40db4ae9276cd5f 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 40e7600350320c0c3a9d0e026ba2554433e1bdad..6438fce7e678a9d6e390b184d5a9bd03cc69a6e0 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 d1075e84ad00f65136abdd6d98b090bc17a030d5..ea6c95d42a8297b55bc48a2cf018081df3c214a1 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 8c065e61e984b8a61df5f948fa42cac33e9d89bf..7d3a99d1e45dde528478d33d0d8d8591a5ff6162 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 dc673374030c00a3dd49a37bd8677dd2b4d05e4f..a470fad3b6802063ae4d04acc82522a5394c05f4 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 3527a5d149be9cbc62c82ede5db623f1aa4aec4d..479588c5c2089f36182e3d2ca7fb3932bed7c72b 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 6d8afd0c2bdf057cae928390853988119c2e6e32..bb828ebde46b3ea9c5429e4e5aadcf6be1ab4355 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>