From fc7312180570f88f418b75d6419672fed5657629 Mon Sep 17 00:00:00 2001 From: Omar Suca Date: Wed, 14 Aug 2013 13:03:21 -0400 Subject: [PATCH 1/3] BUG-12285 Issue with Input Document with Process Permission. SOLVED Descripcion: When uploaded a document and given Process Permission to users to delete and upload new document, this does not reflect in the process. The current user can't see the files uploded from supervisor. Solucion: Se constato de que existe un filtro dentro de un query que restringe la visualizacion de archivos subidos por el supervisor, la cual fue quitada y de ese modo ya funciono. Para la actualizacion de campos del caso especificamente para los tipo input se realizo los siguientes pasos: - Se obtuvo todos los formularios en los cuales el usuario partipo. - Se filtro por tipo de campo (file) para realiza el update del caso. - El valor de cada campo tipo file asociado a un input document sera actualizado con el nombre del file subido por parte del supervisor. Resuelto para la version PM 2.5.2 --- workflow/engine/classes/class.case.php | 9 --- .../cases/cases_SupervisorSaveDocument.php | 63 ++++++++++++++++++- 2 files changed, 62 insertions(+), 10 deletions(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 9db2d6d56..ea2df69ab 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -4367,15 +4367,6 @@ class Cases $oCriteria->add(AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), Criteria::IN); $oCriteria->add(AppDocumentPeer::DEL_INDEX, 100000); - $oCriteria->add( - $oCriteria->getNewCriterion( - AppDocumentPeer::APP_DOC_UID, $aObjectPermissions['INPUT_DOCUMENTS'], Criteria::IN - )-> - addOr($oCriteria->getNewCriterion(AppDocumentPeer::USR_UID, array($sUserUID, '-1'), Criteria::IN))); - - $oCriteria->addJoin(AppDocumentPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); - $oCriteria->add(ApplicationPeer::PRO_UID, $sProcessUID); - $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_INDEX); $oDataset = AppDocumentPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); diff --git a/workflow/engine/methods/cases/cases_SupervisorSaveDocument.php b/workflow/engine/methods/cases/cases_SupervisorSaveDocument.php index df68699c3..ba234cf11 100755 --- a/workflow/engine/methods/cases/cases_SupervisorSaveDocument.php +++ b/workflow/engine/methods/cases/cases_SupervisorSaveDocument.php @@ -25,7 +25,8 @@ try { //save info G::LoadClass( 'case' ); - + G::LoadClass( 'tasks' ); + $oAppDocument = new AppDocument(); $aFields = array ('APP_UID' => $_GET['APP_UID'],'DEL_INDEX' => 100000,'USR_UID' => $_SESSION['USER_LOGGED'],'DOC_UID' => $_GET['UID'],'APP_DOC_TYPE' => $_POST['form']['APP_DOC_TYPE'],'APP_DOC_CREATE_DATE' => date( 'Y-m-d H:i:s' ),'APP_DOC_COMMENT' => isset( $_POST['form']['APP_DOC_COMMENT'] ) ? $_POST['form']['APP_DOC_COMMENT'] : '','APP_DOC_TITLE' => '','APP_DOC_FILENAME' => isset( $_FILES['form']['name']['APP_DOC_FILENAME'] ) ? $_FILES['form']['name']['APP_DOC_FILENAME'] : '' ); @@ -38,6 +39,7 @@ try { if ($_FILES['form']['error']['APP_DOC_FILENAME'] == 0) { $sPathName = PATH_DOCUMENT . G::getPathFromUID($_GET['APP_UID']) . PATH_SEP; $sFileName = $sAppDocUid . '.' . $ext; + $sOriginalName = $_FILES['form']['name']['APP_DOC_FILENAME']; G::uploadFile( $_FILES['form']['tmp_name']['APP_DOC_FILENAME'], $sPathName, $sFileName ); //Plugin Hook PM_UPLOAD_DOCUMENT for upload document @@ -49,6 +51,65 @@ try { unlink( $sPathName . $sFileName ); } //end plugin + + //update AppData with the current file uploaded + $oCase = new Cases(); + $aAppDataFields = $oCase->loadCase( $_GET['APP_UID'] ); + + $oCriteria = new Criteria('workflow'); + $oCriteria->addSelectColumn(AppDelegationPeer::TAS_UID); + $oCriteria->add(AppDelegationPeer::APP_UID, $_GET['APP_UID'], CRITERIA::EQUAL); + $oCriteria->addAscendingOrderByColumn(AppDelegationPeer::DEL_INDEX); + $oDataset = AppDelegationPeer::doSelectRS($oCriteria); + $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + $oDataset->next(); + $oTask = new Tasks(); + + $aDynaforms = array(); + while ($aRow = $oDataset->getRow()) { + $aSteps = $oTask->getStepsOfTask($aRow['TAS_UID']); + if (is_array($aSteps)) { + foreach ($aSteps as $key => $value) { + $oCriteriaStep = new Criteria('workflow'); + $oCriteriaStep->addSelectColumn(StepPeer::STEP_UID_OBJ); + $sStepId = (isset($value['STEP_UID'])) ? $value['STEP_UID'] : 0 ; + $oCriteriaStep->add(StepPeer::STEP_UID, $sStepId, CRITERIA::EQUAL); + $oCriteriaStep->add(StepPeer::STEP_TYPE_OBJ, 'DYNAFORM', CRITERIA::EQUAL); + $oDataSetStep = StepPeer::doSelectRS($oCriteriaStep); + $oDataSetStep->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $oDataSetStep->next(); + $aRows = $oDataSetStep->getRow(); + + if (is_array($aRows) && !in_array($aRows['STEP_UID_OBJ'], $aDynaforms)) { + $aDynaforms[] = $aRows['STEP_UID_OBJ']; + } + } + unset($value); + } + $oDataset->next(); + } + + + if (count($aDynaforms) > 0) { + require_once ("classes/model/Dynaform.php"); + $dynInstance = new Dynaform(); + foreach ($aDynaforms as $key => $value) { + $aAllFields = $dynInstance->getDynaformFields($value); + if (is_array($aAllFields)) { + foreach ($aAllFields as $kInput => $input) { + $aPropertiesField = get_object_vars($input); + if ($aPropertiesField['type'] == 'file' && $aPropertiesField['input'] == $_GET['UID'] && !empty($aAppDataFields['APP_DATA'][$kInput])) { + $aAppDataFields['APP_DATA'][$kInput] = $sOriginalName; + $oCase->updateCase( $_GET['APP_UID'], $aAppDataFields ); + } + } + unset($input); + } + } + unset($value); + } + //End Update AppData with the current file uploaded } } //go to the next step From 2b7613f7615b5417873088d3f56846d93b4ff988 Mon Sep 17 00:00:00 2001 From: Omar Suca Date: Thu, 15 Aug 2013 15:01:34 -0400 Subject: [PATCH 2/3] BUG-12285 Issue with Input Document with Process Permission. SOLVED Descripcion: When uploaded a document and given Process Permission to users to delete and upload new document, this does not reflect in the process. The current user can't see the files uploded from supervisor. Solucion: Se constato de que existe un filtro dentro de un query que restringe la visualizacion de archivos subidos por el supervisor, la cual fue quitada y de ese modo ya funciono. Para la actualizacion de campos del caso especificamente para los tipo input se realizo los siguientes pasos: - Se obtuvo todos los formularios en los cuales el usuario partipo. - Se filtro por tipo de campo (file) para realiza el update del caso. - El valor de cada campo tipo file asociado a un input document sera actualizado con el nombre del file subido por parte del supervisor. Resuelto para la version PM 2.5.2 --- workflow/engine/classes/class.case.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index ea2df69ab..7b48ebf44 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -4366,7 +4366,9 @@ class Cases $oCriteria->add(AppDocumentPeer::APP_DOC_TYPE, array('INPUT'), Criteria::IN); $oCriteria->add(AppDocumentPeer::APP_DOC_STATUS, array('ACTIVE'), Criteria::IN); $oCriteria->add(AppDocumentPeer::DEL_INDEX, 100000); - + $oCriteria->addJoin(AppDocumentPeer::APP_UID, ApplicationPeer::APP_UID, Criteria::LEFT_JOIN); + $oCriteria->add(ApplicationPeer::PRO_UID, $sProcessUID); + $oCriteria->addAscendingOrderByColumn(AppDocumentPeer::APP_DOC_INDEX); $oDataset = AppDocumentPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); From fce9104b6293e37ac2c63d3574364ebe8e699d42 Mon Sep 17 00:00:00 2001 From: Omar Suca Date: Mon, 19 Aug 2013 09:58:00 -0400 Subject: [PATCH 3/3] BUG-12285 Issue with Input Document with Process Permission. SOLVED Descripcion: When uploaded a document and given Process Permission to users to delete and upload new document, this does not reflect in the process. The current user can't see the files uploded from supervisor. Solucion: Se constato de que existe un filtro dentro de un query que restringe la visualizacion de archivos subidos por el supervisor, la cual fue quitada y de ese modo ya funciono. Para la actualizacion de campos del caso especificamente para los tipo input se realizo los siguientes pasos: Se obtuvo todos los formularios en los cuales el usuario partipo. Se filtro por tipo de campo (file) para realiza el update del caso. El valor de cada campo tipo file asociado a un input document sera actualizado con el nombre del file subido por parte del supervisor. Resuelto para la version PM 2.5.2 --- .../engine/methods/cases/cases_SupervisorSaveDocument.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/workflow/engine/methods/cases/cases_SupervisorSaveDocument.php b/workflow/engine/methods/cases/cases_SupervisorSaveDocument.php index ba234cf11..a7f35ff06 100755 --- a/workflow/engine/methods/cases/cases_SupervisorSaveDocument.php +++ b/workflow/engine/methods/cases/cases_SupervisorSaveDocument.php @@ -98,8 +98,9 @@ try { $aAllFields = $dynInstance->getDynaformFields($value); if (is_array($aAllFields)) { foreach ($aAllFields as $kInput => $input) { - $aPropertiesField = get_object_vars($input); - if ($aPropertiesField['type'] == 'file' && $aPropertiesField['input'] == $_GET['UID'] && !empty($aAppDataFields['APP_DATA'][$kInput])) { + if (!isset($input->input)) continue; + + if ($input->type == 'file' && $input->input == $_GET['UID'] && !empty($aAppDataFields['APP_DATA'][$kInput])) { $aAppDataFields['APP_DATA'][$kInput] = $sOriginalName; $oCase->updateCase( $_GET['APP_UID'], $aAppDataFields ); }