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/module_vmap/web_service/ws/Querys.class.inc b/src/module_vmap/web_service/ws/Querys.class.inc index 3aed39da27e23ba5bbe1615d9fa027c6127d5f48..da9788fb5969e4db206760b1971e165d81d4fd2b 100644 --- a/src/module_vmap/web_service/ws/Querys.class.inc +++ b/src/module_vmap/web_service/ws/Querys.class.inc @@ -15,8 +15,9 @@ require_once 'Vmap.class.inc'; require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vitis_lib/Connection.class.inc'; require_once 'Query.class.inc'; require_once 'BusinessObject.class.inc'; -require_once(dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/BdDataAccess.inc'); -require_once(dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/phpUtil.inc'); +require_once (dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/BdDataAccess.inc'); +require_once (dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/phpUtil.inc'); +require_once (dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/files/Files_manager.class.inc'); require_once 'vmlib/logUtil.inc'; require_once dirname($_SERVER['SCRIPT_FILENAME']) . '/class/vmlib/Vm.class.inc'; @@ -51,6 +52,8 @@ class Querys extends Vmap { $this->aProperties = $properties; $this->aValues['getGroup'] = false; $this->oConnection = new Connection($this->aValues, $this->aProperties); + + error_log('$_FILES: '. print_r($_FILES, true)); } /** @@ -841,7 +844,15 @@ class Querys extends Vmap { foreach ($aLigne['bo_' . $type] as $key => $value) { if (is_dir($sDataDir . "/" . $key)) { - $aLigne['bo_' . $type][$key] = $sDataUrl . "/" . $key . "/" . $value . "?d=" . $date->getTimestamp(); + $aFiles = explode('|', $value); + if (count($aFiles) > 1) { + $aLigne['bo_' . $type][$key] = []; + for ($i=0; $i < count($aFiles); $i++) { + array_push($aLigne['bo_' . $type][$key], $sDataUrl . "/" . $key . "/" . $aFiles[$i] . "?d=" . $date->getTimestamp()); + } + } else { + $aLigne['bo_' . $type][$key] = $sDataUrl . "/" . $key . "/" . $value . "?d=" . $date->getTimestamp(); + } } } } @@ -1429,32 +1440,18 @@ class Querys extends Vmap { $this->aValues['my_vitis_id'] = $this->aValues[$bo_id_field]; - // Définit si il a des fichiers a uploader - $bUploadFiles = false; - foreach ($this->aValues as $key => $value) { - if (strrpos($key, '_file')) { - $sName = substr($key, 0, strrpos($key, '_file')); - if (isset($this->aValues[$sName . '_name'])) { - $bUploadFiles = true; - } - } - } - // Fichiers à uploader ? - if ($bUploadFiles) { - // Création du dossier contenneur si il n'existe pas - $sDirPath = $this->createElementFilesFolder($sBusinessObjectId, $this->aValues['my_vitis_id']); - if (!is_dir($sDirPath)) { - $oError = new VitisError(1, "Unable to acces to the business object direrctory :" . $sDirPath); - $aXmlRacineAttribute['status'] = 0; - $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']); - return $sMessage; + if (!empty($_FILES) && !empty($this->aValues['my_vitis_id'])) { + + // Écriture du fichier + $oFileManager = new Files_manager($this->aProperties); + foreach ($_FILES as $sName => $aFile) { + $aUploadReturn = $oFileManager->uploadInWsDataDir('vitis', $sBusinessObjectId, $this->aValues['my_vitis_id'], $sName, 'documents'); + $this->aValues[$sName] = $aUploadReturn['field_value']; } - // Mise en place des fichiers - $this->aValues = $this->extractFilesFromValues($this->aValues, $sDirPath); - } - $aReturn = $this->genericPut($bo_schema, $bo_table, $bo_id_field); + $aReturn = $this->genericPut($bo_schema, $bo_table, $bo_id_field); + } // Lance l'évènement webSocket if (!empty($bo_event)) { @@ -1467,37 +1464,51 @@ class Querys extends Vmap { return $aReturn['sMessage']; } - /** - * Extract the files from aValues and modify the paths - * @param array $aValues - * @param string $sDirPath - * @param string $sFilePrefix - * @return array Parsed $aValues - */ - function extractFilesFromValues($aValues, $sDirPath) { + function extractFile($aValues, $sName, $oFile, $sDirPath) { - foreach ($aValues as $key => $value) { - if (strrpos($key, '_file')) { + if (!empty($sName) && !empty($oFile['name']) && !empty($oFile['file'])) { - $sName = substr($key, 0, strrpos($key, '_file')); - $sFileName = $aValues[$sName . '_name']; + // Crée le dossier si besoin + $sDirColumnPath = $sDirPath . '/' . $sName; + if (!is_dir($sDirColumnPath)) { + mkdir($sDirColumnPath, 0777, true); + } - if (!empty($sFileName)) { + // Cŕee le fichier sur le serveur + $fp = fopen($sDirColumnPath . '/' . $oFile['name'], "w"); + fwrite($fp, $oFile['file']); + fclose($fp); - $sDirColumnPath = $sDirPath . '/' . $sName; - if (!is_dir($sDirColumnPath)) { - mkdir($sDirColumnPath, 0777, true); - } + // Mise en place pour la base de données + if (empty($aValues[$sName])) { + $aValues[$sName] = $oFile['name']; + } else { + $aValues[$sName] .= '|' . $oFile['name']; + } + + if (!empty($aValues[$sName . '_file'])) { + unset($aValues[$sName . '_file']); + } + if (!empty($aValues[$sName . '_name'])) { + unset($aValues[$sName . '_name']); + } + } - // Cŕee le fichier sur le serveur - $fp = fopen($sDirColumnPath . '/' . $sFileName, "w"); - fwrite($fp, $value); - fclose($fp); + return $aValues; + } + + function extractFiles($aValues, $sDirPath) { - // Mise en place pour la base de données - $aValues[$sName] = $aValues[$sName . '_name']; - unset($aValues[$sName . '_file']); - unset($aValues[$sName . '_name']); + foreach ($_FILES as $key => $value) { + + if (!empty($value['file'])) { + $aValues = $this->extractFile($aValues, $key, $value, $sDirPath); + } + if (!empty($value[0])) { + for ($i=0; $i < count($value); $i++) { + if (!empty($value[$i]['file'])) { + $aValues = $this->extractFile($aValues, $key, $value[$i], $sDirPath); + } } } } @@ -1612,27 +1623,13 @@ class Querys extends Vmap { // Fichiers à uploader ? if (!empty($_FILES) && !empty($this->aValues['my_vitis_id'])) { - // Création du dossier contenneur - $sDirPath = $this->createElementFilesFolder($sBusinessObjectId, $this->aValues['my_vitis_id']); - if (!is_dir($sDirPath)) { - $oError = new VitisError(1, "Unable to acces to the business object direrctory :" . $sDirPath); - $aXmlRacineAttribute['status'] = 0; - $sMessage = $oError->asDocument('', 'vitis', $this->aValues['sEncoding'], True, $aXmlRacineAttribute, $this->aValues['sSourceEncoding'], $this->aValues['output']); - return $sMessage; - } // Écriture du fichier + $oFileManager = new Files_manager($this->aProperties); foreach ($_FILES as $sName => $aFile) { - - $sDirColumnPath = $sDirPath . '/' . $sName; - if (!is_dir($sDirColumnPath)) { - mkdir($sDirColumnPath, 0777, true); - } - - $this->aValues[$sName] = $aFile['name']; - - // Écrit le fichier dans son enplacement - uploadFile($sName, "", $sDirColumnPath . "/" . $aFile['name'], $aFile['size'] + 1); + $aUploadReturn = $oFileManager->uploadInWsDataDir('vitis', $sBusinessObjectId, $this->aValues['my_vitis_id'], $sName, 'documents'); + $this->aValues[$sName] = $aUploadReturn['field_value']; } + $this->genericPut($bo_schema, $bo_table, $bo_id_field); }