HOR-1576 "Support Multiple File variable for file deletion" SOLVED
Issue:
Support Multiple File variable for file deletion
Cause:
Nuevo requerimiento de funciones
Solution:
- Se implemento el metodo "\ProcessMaker\BusinessModel\Cases::deleteMultipleFile()" para la eliminacion del
documento de la BD y en el APP_DATA; esto para variables normales y grids
- Se implemento esto en:
* Web: cases_SaveData.php
* End-point: PUT /api/1.0/{workspace}/light/{app_uid}/variable?dyn_uid={dyn_uid}&del_index={del_index}
- La variable y el formato de la misma, es el siguiente:
...
[__VARIABLE_DOCUMENT_DELETE__] => Array
( [multipleFileVar001] => Array
( [0] => Array
( [appDocUid] => 42072183457acd3d2045e71059588476
[version] => 1
)
[1] => Array
( [appDocUid] => 42072183457acd3d2045e71059588476
[version] => 1
)
....
)
[gridVar001] => Array
( [1] => Array
( [multipleFile0000000002] => Array
( [0] => Array
( [appDocUid] => 88526242657acd3dccaa4b8052310943
[version] => 1
)
[1] => Array
( [appDocUid] => 88526242657acd3dccaa4b8052310943
[version] => 1
)
)
...
)
...
)
....
)
...
This commit is contained in:
@@ -101,6 +101,16 @@ try {
|
||||
throw new Exception( G::LoadTranslation( 'ID_INVALID_APPLICATION_ID_MSG', array ('<a href=\'' . $_SERVER['HTTP_REFERER'] . '\'>{1}</a>',G::LoadTranslation( 'ID_REOPEN' ) ) ) );
|
||||
}
|
||||
|
||||
$arrayVariableDocumentToDelete = [];
|
||||
|
||||
if (array_key_exists('__VARIABLE_DOCUMENT_DELETE__', $_POST['form'])) {
|
||||
if (is_array($_POST['form']['__VARIABLE_DOCUMENT_DELETE__']) && !empty($_POST['form']['__VARIABLE_DOCUMENT_DELETE__'])) {
|
||||
$arrayVariableDocumentToDelete = $_POST['form']['__VARIABLE_DOCUMENT_DELETE__'];
|
||||
}
|
||||
|
||||
unset($_POST['form']['__VARIABLE_DOCUMENT_DELETE__']);
|
||||
}
|
||||
|
||||
/*
|
||||
* PMDynaform
|
||||
* DYN_VERSION is 1: classic Dynaform,
|
||||
@@ -442,6 +452,13 @@ try {
|
||||
}
|
||||
}
|
||||
|
||||
//Delete MultipleFile
|
||||
if (!empty($arrayVariableDocumentToDelete)) {
|
||||
$case = new \ProcessMaker\BusinessModel\Cases();
|
||||
|
||||
$case->deleteMultipleFile($_SESSION['APPLICATION'], $arrayVariableDocumentToDelete);
|
||||
}
|
||||
|
||||
//Go to the next step
|
||||
$aNextStep = $oCase->getNextStep( $_SESSION['PROCESS'], $_SESSION['APPLICATION'], $_SESSION['INDEX'], $_SESSION['STEP_POSITION'] );
|
||||
if (isset( $_GET['_REFRESH_'] )) {
|
||||
|
||||
@@ -1840,6 +1840,16 @@ class Cases
|
||||
$_SESSION['APPLICATION'] = $app_uid;
|
||||
$_SESSION['USER_LOGGED'] = $usr_uid;
|
||||
|
||||
$arrayVariableDocumentToDelete = [];
|
||||
|
||||
if (array_key_exists('__VARIABLE_DOCUMENT_DELETE__', $app_data)) {
|
||||
if (is_array($app_data['__VARIABLE_DOCUMENT_DELETE__']) && !empty($app_data['__VARIABLE_DOCUMENT_DELETE__'])) {
|
||||
$arrayVariableDocumentToDelete = $app_data['__VARIABLE_DOCUMENT_DELETE__'];
|
||||
}
|
||||
|
||||
unset($app_data['__VARIABLE_DOCUMENT_DELETE__']);
|
||||
}
|
||||
|
||||
$case = new \Cases();
|
||||
$fields = $case->loadCase($app_uid, $del_index);
|
||||
$_POST['form'] = $app_data;
|
||||
@@ -1866,6 +1876,11 @@ class Cases
|
||||
}
|
||||
$data['APP_DATA'] = array_merge($fields['APP_DATA'], $_POST['form']);
|
||||
$case->updateCase($app_uid, $data);
|
||||
|
||||
//Delete MultipleFile
|
||||
if (!empty($arrayVariableDocumentToDelete)) {
|
||||
$this->deleteMultipleFile($app_uid, $arrayVariableDocumentToDelete);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3044,5 +3059,148 @@ class Cases
|
||||
return $flagParticipated;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete MultipleFile in Case data
|
||||
*
|
||||
* @param array $arrayApplicationData Case data
|
||||
* @param string $variable1 Variable1
|
||||
* @param string $variable2 Variable2
|
||||
* @param string $type Type (NORMAL, GRID)
|
||||
* @param array $arrayDocumentToDelete Document to delete
|
||||
*
|
||||
* @return array Returns array with Case data updated
|
||||
*/
|
||||
private function __applicationDataDeleteMultipleFile(array $arrayApplicationData, $variable1, $variable2, $type, array $arrayDocumentToDelete)
|
||||
{
|
||||
if (array_key_exists($variable1, $arrayApplicationData) &&
|
||||
is_array($arrayApplicationData[$variable1]) && !empty($arrayApplicationData[$variable1])
|
||||
) {
|
||||
switch ($type) {
|
||||
case 'NORMAL':
|
||||
$arrayAux = $arrayApplicationData[$variable1];
|
||||
$arrayApplicationData[$variable1] = [];
|
||||
$keyd = null;
|
||||
|
||||
foreach ($arrayAux as $key => $value) {
|
||||
if ($value['appDocUid'] == $arrayDocumentToDelete['appDocUid'] &&
|
||||
(int)($value['version']) == (int)($arrayDocumentToDelete['version'])
|
||||
) {
|
||||
$keyd = $key;
|
||||
} else {
|
||||
$arrayApplicationData[$variable1][] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
if (!is_null($keyd)) {
|
||||
$variable1 = $variable1 . '_label';
|
||||
|
||||
if (array_key_exists($variable1, $arrayApplicationData) &&
|
||||
is_array($arrayApplicationData[$variable1]) && !empty($arrayApplicationData[$variable1])
|
||||
) {
|
||||
$arrayAux = $arrayApplicationData[$variable1];
|
||||
$arrayApplicationData[$variable1] = [];
|
||||
|
||||
foreach ($arrayAux as $key => $value) {
|
||||
if ($key != $keyd) {
|
||||
$arrayApplicationData[$variable1][] = $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'GRID':
|
||||
foreach ($arrayApplicationData[$variable1] as $key => $value) {
|
||||
if (array_key_exists($variable2, $value)) {
|
||||
$arrayApplicationData[$variable1][$key] = $this->__applicationDataDeleteMultipleFile(
|
||||
$value, $variable2, null, 'NORMAL', $arrayDocumentToDelete
|
||||
);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//Return
|
||||
return $arrayApplicationData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete MultipleFile
|
||||
*
|
||||
* @param string $applicationUid Unique id of Case
|
||||
* @param array $arrayVariableDocumentToDelete Variable with Documents to delete
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function deleteMultipleFile($applicationUid, array $arrayVariableDocumentToDelete)
|
||||
{
|
||||
$case = new \Cases();
|
||||
$appDocument = new \AppDocument();
|
||||
|
||||
$arrayApplicationData = $this->getApplicationRecordByPk($applicationUid, [], false);
|
||||
$arrayApplicationData['APP_DATA'] = $case->unserializeData($arrayApplicationData['APP_DATA']);
|
||||
$flagDelete = false;
|
||||
|
||||
foreach ($arrayVariableDocumentToDelete as $key => $value) {
|
||||
if (is_array($value) && !empty($value)) {
|
||||
$type = '';
|
||||
|
||||
$arrayAux = $value;
|
||||
$arrayAux = array_shift($arrayAux);
|
||||
|
||||
if (array_key_exists('appDocUid', $arrayAux)) {
|
||||
$type = 'NORMAL';
|
||||
} else {
|
||||
$arrayAux = array_shift($arrayAux);
|
||||
$arrayAux = array_shift($arrayAux);
|
||||
|
||||
if (array_key_exists('appDocUid', $arrayAux)) {
|
||||
$type = 'GRID';
|
||||
}
|
||||
}
|
||||
|
||||
switch ($type) {
|
||||
case 'NORMAL':
|
||||
$variable = $key;
|
||||
$arrayDocumentDelete = $value;
|
||||
|
||||
foreach ($arrayDocumentDelete as $value2) {
|
||||
$appDocument->remove($value2['appDocUid'], (int)($value2['version']));
|
||||
|
||||
$arrayApplicationData['APP_DATA'] = $this->__applicationDataDeleteMultipleFile(
|
||||
$arrayApplicationData['APP_DATA'], $variable, null, $type, $value2
|
||||
);
|
||||
|
||||
$flagDelete = true;
|
||||
}
|
||||
break;
|
||||
case 'GRID':
|
||||
$grid = $key;
|
||||
|
||||
foreach ($value as $value2) {
|
||||
foreach ($value2 as $key3 => $value3) {
|
||||
$variable = $key3;
|
||||
$arrayDocumentDelete = $value3;
|
||||
|
||||
foreach ($arrayDocumentDelete as $value4) {
|
||||
$appDocument->remove($value4['appDocUid'], (int)($value4['version']));
|
||||
|
||||
$arrayApplicationData['APP_DATA'] = $this->__applicationDataDeleteMultipleFile(
|
||||
$arrayApplicationData['APP_DATA'], $grid, $variable, $type, $value4
|
||||
);
|
||||
|
||||
$flagDelete = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($flagDelete) {
|
||||
$result = $case->updateCase($applicationUid, $arrayApplicationData);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user