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 6438fce7e678a9d6e390b184d5a9bd03cc69a6e0..568395bf3cfad59de8c1f56c7ef278b2a33a1f34 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 @@ -1664,7 +1664,11 @@ 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++) { - oFormData_.append(key + '[]', oValues[key][i]); + if (goog.isDefAndNotNull(oValues[key][i]['name'])) { + oFormData_.append(key + '[]', oValues[key][i], oValues[key][i]['name']); + } else { + oFormData_.append(key + '[]', oValues[key][i]); + } } } else { oFormData_.append(key, oValues[key]); diff --git a/src/module_vmap/web_service/ws/Querys.class.inc b/src/module_vmap/web_service/ws/Querys.class.inc index 88a588898c2f0f9f81a9534d5943b713e8301313..f58e0702faa98683b64b255c3f4f2beb0e4446e1 100644 --- a/src/module_vmap/web_service/ws/Querys.class.inc +++ b/src/module_vmap/web_service/ws/Querys.class.inc @@ -1439,6 +1439,9 @@ class Querys extends Vmap { $this->aValues['my_vitis_id'] = $this->aValues[$bo_id_field]; + error_log('$_FILES: '. print_r($_FILES, true)); + error_log('$this->aValues: '. print_r($this->aValues, true)); + // Fichiers à uploader ? if (!empty($_FILES) && !empty($this->aValues['my_vitis_id'])) { @@ -1447,10 +1450,11 @@ class Querys extends Vmap { $aUploadReturn = $this->oFilesManager->uploadInWsDataDir('vitis', $sBusinessObjectId, $this->aValues['my_vitis_id'], $sName, 'documents'); $this->aValues[$sName] = $aUploadReturn['field_value']; } - - $aReturn = $this->genericPut($bo_schema, $bo_table, $bo_id_field); } + // Maj en base + $aReturn = $this->genericPut($bo_schema, $bo_table, $bo_id_field); + // Lance l'évènement webSocket if (!empty($bo_event)) { sendWebsocketMessage($this->aProperties['websocket_server'], $this->aProperties['websocket_port'], $this->aProperties['websocket_alias'], array( diff --git a/src/vitis/client/javascript/app/services/formSrvc.js b/src/vitis/client/javascript/app/services/formSrvc.js index ea6c95d42a8297b55bc48a2cf018081df3c214a1..8d0eba1b8081f66b2a2a5a010c020d67da6788b1 100755 --- a/src/vitis/client/javascript/app/services/formSrvc.js +++ b/src/vitis/client/javascript/app/services/formSrvc.js @@ -51,44 +51,74 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe case "upload": case "file_wsdata": case "image_wsdata": + + var bContainFiles = false; + var oFiles = null; if (document.getElementById(aFormRowElementsList[ifieldIndex]["id"]) != null) { - var bContainFiles = true; - var oFiles = document.getElementById(aFormRowElementsList[ifieldIndex]["id"]).files; - 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"]; + bContainFiles = true; + oFiles = document.getElementById(aFormRowElementsList[ifieldIndex]["id"]).files; + console.log('1'); + } 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); + + if (goog.isArray(oElemValue)) { + if (goog.isDefAndNotNull(oElemValue[0])) { + if (goog.isDefAndNotNull(oElemValue[0]['name'])) { + oFiles = []; + for (var i = 0; i < oElemValue.length; i++) { + if (goog.isDefAndNotNull(oElemValue[i]['name'])) { + oFiles.push(oElemValue[i]); + } + } } - } else { - bContainFiles = false; + } + } + } + + console.log("oFiles: ", oFiles); + + 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"]; } } else { bContainFiles = false; } + } else { + bContainFiles = false; + } - if (!bContainFiles) { - 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]; - 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"]; - } + if (!bContainFiles) { + 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]; + 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"]; } } } } } + + console.log("oFormKeysValues: ", oFormKeysValues); break; // Si double liste : valeurs séparé par un champ. case "double_select": @@ -160,6 +190,9 @@ vitisApp.formSrvc = function (envSrvc, propertiesSrvc, sessionSrvc, formReaderSe } } } else { + + console.log("oFormKeysValues: ", oFormKeysValues); + // Sauve les clés et valeurs dans un objet "FormData". oFormData = new FormData(); var aFormKeys = Object.keys(oFormKeysValues); diff --git a/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.html b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.html index 93f54c0a17bb87be07a715b1c2fe79a0e4a26bf1..1c45940a5a4c49fb4620f12d5b48cc98b6e456c8 100644 --- a/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.html +++ b/src/vitis/client/javascript/externs/formReader/component/file_picker/file_picker.html @@ -50,8 +50,8 @@ <!-- Bouton caché input --> <div class="hide" ng-if="!field.displayOnly"> - <input ng-if="!field.multiple" type="file" id="{{:refresh:field.id}}" class="file" name="{{:refresh:field.name}}" class="form-control" ng-required="field.required"> - <input ng-if="field.multiple" type="file" id="{{:refresh:field.id}}" class="file" name="{{:refresh:field.name}}" class="form-control" ng-required="field.required" multiple> + <input ng-if="!field.multiple" type="file" id="{{:refresh:field.id}}_hidden" class="file" name="{{:refresh:field.name}}" class="form-control" ng-required="field.required"> + <input ng-if="field.multiple" type="file" id="{{:refresh:field.id}}_hidden" class="file" name="{{:refresh:field.name}}" class="form-control" ng-required="field.required" multiple> </div> </div> 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 36e8e6800c4664e0e8c1333bc81e61cb0ae5bbaf..93053f9f50533bef688cc2d3cf74bbb4c54c9ec4 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 @@ -84,19 +84,47 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie var iCounter = 0; for (var i = 0; i < aAvaliableFiles.length; i++) { + ajaxRequest({ 'method': 'GET', 'url': aAvaliableFiles[i], 'headers': { 'Accept': 'application/x-vm-json' }, - 'scope': this.$scope_, + 'scope': scope, + 'ajaxLoader': true, 'responseType': 'blob', 'success': function(response) { iCounter++; if (goog.isDefAndNotNull(response['data'])) { var oBlob = response['data']; + + if (goog.isDefAndNotNull(response['headers'])) { + if (goog.isString(response['headers']['content-disposition'])) { + + var sName; + var aContentDisp = response['headers']['content-disposition'].split(';'); + for (var i = 0; i < aContentDisp.length; i++) { + if(aContentDisp[i].indexOf('filename=') !== -1){ + sName = aContentDisp[i].split('"')[1]; + } + } + + if (sName) { + oBlob['name'] = sName; + // oBlob['lastModified'] = new Date().getTime(); + // oBlob['lastModifiedDate'] = new Date(); + // oBlob['webkitRelativePath'] = ''; + + // var oFile = new File([oBlob], sName, { + // 'type': scope['field']['type'] === 'image_wsdata' ? 'image' : '' + // }); + + // scope['aFiles'].push(oFile); + } + } + } scope['aFiles'].push(oBlob); } if (iCounter === aAvaliableFiles.length) { @@ -161,7 +189,7 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie var deferred = $q.defer(); setTimeout(function () { - var oInput = $(element).find('#' + scope['field']['id']); + var oInput = $(element).find('#' + scope['field']['id'] + '_hidden'); deferred.resolve(oInput); }); @@ -178,6 +206,8 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie sPreviewContainer = 'aPreviewImages'; } + console.log("initPreview: ", scope['aFiles']); + // Vide les images qui ont étés supprimées de aFiles var bIsPresent; for (var i = scope[sPreviewContainer].length - 1; i >= 0; i--) { @@ -270,13 +300,19 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie if (result) { for (var i = 0; i < scope['aFiles'].length; i++) { if(scope['aFiles'][i]['name'] === oFile['name']){ + console.log('1', oFile['name']); scope['aFiles'].splice(i, 1); } } // Affichage des images setTimeout(function () { + + // Initialise l'affichage des images scope['initPreview'](); + + // Sauvegarde les fichiers sur oFormValues + scope['saveFiles'](); }); } } @@ -287,7 +323,7 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie * Show the finder to search no files to add */ scope['searchNewFile'] = function() { - var oInput = $(element).find('#' + scope['field']['id']); + var oInput = $(element).find('#' + scope['field']['id'] + '_hidden'); $(oInput).click(); } @@ -331,6 +367,15 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie }); } + /** + * Sauvegarde les fichiers sur oFormValues + */ + scope['saveFiles'] = function() { + console.log("saveFiles: ", scope['aFiles']); + console.log("scope['oFormValues']: ", scope["oFormValues"]); + scope['oFormValues'][scope['sFormDefinitionName']][scope['field'].name] = scope['aFiles']; + } + }, post: function (scope, element, attributes, controller, transcludeFn) { $log.log("formReader.FilePickerDirective.post"); @@ -355,6 +400,9 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie // Set la nouvelle valeur de l'attibut setTimeout(function () { oInput[0]['files_vitis'] = scope['aFiles']; + + // Sauvegarde les fichiers sur oFormValues + scope['saveFiles'](); }); }); @@ -365,6 +413,9 @@ nsVitisComponent.FilePickerDirective = function ($timeout, $translate, propertie // Initialise l'affichage des images scope['initPreview'](); + + // Sauvegarde les fichiers sur oFormValues + scope['saveFiles'](); }); } });