diff --git a/features/bootstrap/RestContext.php b/features/bootstrap/RestContext.php index 3b542b664..328603c94 100644 --- a/features/bootstrap/RestContext.php +++ b/features/bootstrap/RestContext.php @@ -1333,7 +1333,7 @@ class RestContext extends BehatContext $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HTTPHEADER,$headr); - curl_setopt($ch, CURLOPT_POSTFIELDS, array('prf_filename'=>$sfile, "prf_path" => $path, "prf_content" => null)); + curl_setopt($ch, CURLOPT_POSTFIELDS, array('prf_filename'=>$sfile, "prf_path" => $path)); curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $postResult = curl_exec($ch); diff --git a/workflow/engine/src/BusinessModel/FilesManager.php b/workflow/engine/src/BusinessModel/FilesManager.php index a2da64444..d2cd7a0e2 100644 --- a/workflow/engine/src/BusinessModel/FilesManager.php +++ b/workflow/engine/src/BusinessModel/FilesManager.php @@ -67,7 +67,6 @@ class FilesManager } \G::verifyPath($sDirectory, true); $aTheFiles = array(); - $aDirectories = array(); $aFiles = array(); $oDirectory = dir($sDirectory); while ($sObject = $oDirectory->read()) { @@ -127,7 +126,7 @@ class FilesManager } } return $aTheFiles; - } catch (Exception $e) { + } catch (\Exception $e) { throw $e; } } @@ -184,6 +183,12 @@ class FilesManager $sDirectory = PATH_DATA_MAILTEMPLATES . $sProcessUID . PATH_SEP . $sSubDirectory . $aData['prf_filename']; break; } + $content = $aData['prf_content']; + if (is_string($content)) { + if (file_exists(PATH_SEP.$sDirectory)) { + throw (new \Exception( 'The file: '.$sMainDirectory. PATH_SEP . $sSubDirectory . $aData['prf_filename'] . ' already exists.')); + } + } if (!file_exists($sCheckDirectory)) { $sPkProcessFiles = \G::generateUniqueID(); $oProcessFiles = new \ProcessFiles(); diff --git a/workflow/engine/src/BusinessModel/ProcessSupervisor.php b/workflow/engine/src/BusinessModel/ProcessSupervisor.php index 571d4a9e4..86a212075 100644 --- a/workflow/engine/src/BusinessModel/ProcessSupervisor.php +++ b/workflow/engine/src/BusinessModel/ProcessSupervisor.php @@ -624,9 +624,10 @@ class ProcessSupervisor * * @param string $sProcessUID * @param string $sDynUID + * @param int $sPudPosition * @access public */ - public function addProcessSupervisorDynaform($sProcessUID, $sDynUID) + public function addProcessSupervisorDynaform($sProcessUID, $sDynUID, $sPudPosition) { $oTypeDynaform = \DynaformPeer::retrieveByPK($sDynUID); if (is_null( $oTypeDynaform )) { @@ -692,9 +693,10 @@ class ProcessSupervisor while ($aRow = $oDataset->getRow()) { $aResp = array('pud_uid' => $aRow['STEP_UID'], 'pud_position' => $aRow['STEP_POSITION'], - 'dyn_uid' => $aRow['STEP_UID_OBJ'], - 'dyn_title' => $aRow['DYN_TITLE']); + 'dyn_uid' => $aRow['STEP_UID_OBJ']); $oDataset->next(); + $aRespPosition = $this->updateProcessSupervisorDynaform($sProcessUID ,$aRow['STEP_UID'], $sPudPosition); + $aResp = array_merge(array('dyn_title' => $aRow['DYN_TITLE']), $aRespPosition); } return $aResp; } else { @@ -707,9 +709,11 @@ class ProcessSupervisor * * @param string $sProcessUID * @param string $sInputDocumentUID + * @param int $sPuiPosition * @access public */ - public function addProcessSupervisorInputDocument($sProcessUID, $sInputDocumentUID) + + public function addProcessSupervisorInputDocument($sProcessUID, $sInputDocumentUID, $sPuiPosition) { $oTypeInputDocument= \InputDocumentPeer::retrieveByPK($sInputDocumentUID); if (is_null( $oTypeInputDocument )) { @@ -747,7 +751,7 @@ class ProcessSupervisor $oStepSupervisor->create(array('PRO_UID' => $sProcessUID, 'STEP_TYPE_OBJ' => "INPUT_DOCUMENT", 'STEP_UID_OBJ' => $sInputDocumentUID, - 'STEP_POSITION' => $oStepSupervisor->getNextPosition($sProcessUID, "DYNAFORM"))); + 'STEP_POSITION' => $oStepSupervisor->getNextPosition($sProcessUID, "INPUT_DOCUMENT"))); $sDelimiter = \DBAdapter::getStringDelimiter(); $oCriteria = new \Criteria('workflow'); $oCriteria->addSelectColumn(\StepSupervisorPeer::STEP_UID); @@ -776,9 +780,10 @@ class ProcessSupervisor while ($aRow = $oDataset->getRow()) { $aResp = array('pui_uid' => $aRow['STEP_UID'], 'pui_position' => $aRow['STEP_POSITION'], - 'input_doc_uid' => $aRow['STEP_UID_OBJ'], - 'input_doc_title' => $aRow['INP_DOC_TITLE']); + 'input_doc_uid' => $aRow['STEP_UID_OBJ']); $oDataset->next(); + $aRespPosition = $this->updateProcessSupervisorInputDocument($sProcessUID ,$aRow['STEP_UID'], $sPuiPosition); + $aResp = array_merge(array('input_doc_title' => $aRow['INP_DOC_TITLE']), $aRespPosition); } return $aResp; } else { @@ -821,19 +826,15 @@ class ProcessSupervisor */ public function removeDynaformSupervisor($sProcessUID, $sPudUID) { - $oConnection = \Propel::getConnection(\StepSupervisorPeer::DATABASE_NAME); try { $oDynaformSupervidor = \StepSupervisorPeer::retrieveByPK($sPudUID); if (!is_null($oDynaformSupervidor)) { - $oConnection->begin(); - $iResult = $oDynaformSupervidor->delete(); - $oConnection->commit(); - return $iResult; + $oProcessMap = new \processMap(new \DBConnection()); + $oProcessMap->removeSupervisorStep( $oDynaformSupervidor->getStepUid(), $sProcessUID, 'DYNAFORM', $oDynaformSupervidor->getStepUidObj(), $oDynaformSupervidor->getStepPosition() ); } else { throw (new \Exception('This row does not exist!')); } } catch (Exception $oError) { - $oConnection->rollback(); throw ($oError); } } @@ -851,10 +852,8 @@ class ProcessSupervisor try { $oInputDocumentSupervidor = \StepSupervisorPeer::retrieveByPK($sPuiUID); if (!is_null($oInputDocumentSupervidor)) { - $oConnection->begin(); - $iResult = $oInputDocumentSupervidor->delete(); - $oConnection->commit(); - return $iResult; + $oProcessMap = new \processMap(new \DBConnection()); + $oProcessMap->removeSupervisorStep( $oInputDocumentSupervidor->getStepUid(), $sProcessUID, 'INPUT_DOCUMENT', $oInputDocumentSupervidor->getStepUidObj(), $oInputDocumentSupervidor->getStepPosition() ); } else { throw (new \Exception('This row does not exist!')); } @@ -863,5 +862,174 @@ class ProcessSupervisor throw ($oError); } } -} + /** + * Assign a dynaform supervisor of a process + * + * @param string $sProcessUID + * @param string $sPudUID + * @param string $sPudPosition + * @access public + */ + public function updateProcessSupervisorDynaform($sProcessUID, $sPudUID, $sPudPosition) + { + $oCriteria=\StepSupervisorPeer::retrieveByPK($sPudUID); + $actualPosition = $oCriteria->getStepPosition(); + $tempPosition = (isset($sPudPosition)) ? $sPudPosition : $actualPosition; + if (isset($tempPosition) && ($tempPosition != $actualPosition)) { + $this->moveDynaforms($sProcessUID, $sPudUID, $tempPosition); + } + //Return + unset($sPudPosition); + $sPudPosition = $tempPosition; + $oCriteria->setStepPosition($sPudPosition); + $oCriteria->save(); + $oCriteria=array('pud_uid' => $oCriteria->getStepUid(), + 'pud_position' => $oCriteria->getStepPosition(), + 'dyn_uid' => $oCriteria->getStepUidObj()); + return $oCriteria; + } + + /** + * Assign a InputDocument supervisor of a process + * + * @param string $sProcessUID + * @param string $sPuiUID + * @param string $sPuiPosition + * @access public + */ + public function updateProcessSupervisorInputDocument($sProcessUID, $sPuiUID, $sPuiPosition) + { + $oCriteria=\StepSupervisorPeer::retrieveByPK($sPuiUID); + $actualPosition = $oCriteria->getStepPosition(); + $tempPosition = (isset($sPuiPosition)) ? $sPuiPosition : $actualPosition; + if (isset($tempPosition) && ($tempPosition != $actualPosition)) { + $this->moveInputDocuments($sProcessUID, $sPuiUID, $tempPosition); + } + //Return + unset($sPuiPosition); + $sPuiPosition = $tempPosition; + $oCriteria->setStepPosition($sPuiPosition); + $oCriteria->save(); + $oCriteria=array('pui_uid' => $oCriteria->getStepUid(), + 'pui_position' => $oCriteria->getStepPosition(), + 'inp_doc_uid' => $oCriteria->getStepUidObj()); + return $oCriteria; + } + + /** + * Validate Process Uid + * @var string $pro_uid. Uid for Process + * @var string $pu_uid. Uid for Step + * @var string $pu_pos. Position for Step + * + * @return void + */ + public function moveDynaforms($pro_uid, $pu_uid, $pu_pos) + { + $aSteps = $this->getProcessSupervisorDynaforms($pro_uid); + $step_pos = $pu_pos; + $step_uid = $pu_uid; + foreach ($aSteps as $dataStep) { + if ($dataStep['pud_uid'] == $step_uid) { + $prStepPos = (int)$dataStep['pud_position']; + } + } + $seStepPos = $step_pos; + //Principal Step is up + if ($prStepPos == $seStepPos) { + return true; + } elseif ($prStepPos < $seStepPos) { + $modPos = 'UP'; + $newPos = $seStepPos; + $iniPos = $prStepPos+1; + $finPos = $seStepPos; + } else { + $modPos = 'DOWN'; + $newPos = $seStepPos; + $iniPos = $seStepPos; + $finPos = $prStepPos-1; + } + $range = range($iniPos, $finPos); + foreach ($aSteps as $dataStep) { + if ((in_array($dataStep['pud_position'], $range)) && ($dataStep['pud_uid'] != $step_uid)) { + $stepChangeIds[] = $dataStep['pud_uid']; + $stepChangePos[] = $dataStep['pud_position']; + } + } + foreach ($stepChangeIds as $key => $value) { + if ($modPos == 'UP') { + $tempPos = ((int)$stepChangePos[$key])-1; + $this ->changePosStep($value, $tempPos); + } else { + $tempPos = ((int)$stepChangePos[$key])+1; + $this ->changePosStep($value, $tempPos); + } + } + $this ->changePosStep($value, $tempPos); + } + + /** + * Validate Process Uid + * @var string $pro_uid. Uid for Process + * @var string $pu_uid. Uid for Step + * @var string $pu_pos. Position for Step + * + * @return void + */ + public function moveInputDocuments($pro_uid, $pu_uid, $pu_pos) + { + $aSteps = $this->getProcessSupervisorInputDocuments($pro_uid); + $step_pos = $pu_pos; + $step_uid = $pu_uid; + foreach ($aSteps as $dataStep) { + if ($dataStep['pui_uid'] == $step_uid) { + $prStepPos = (int)$dataStep['pui_position']; + } + } + $seStepPos = $step_pos; + //Principal Step is up + if ($prStepPos == $seStepPos) { + return true; + } elseif ($prStepPos < $seStepPos) { + $modPos = 'UP'; + $newPos = $seStepPos; + $iniPos = $prStepPos+1; + $finPos = $seStepPos; + } else { + $modPos = 'DOWN'; + $newPos = $seStepPos; + $iniPos = $seStepPos; + $finPos = $prStepPos-1; + } + $range = range($iniPos, $finPos); + foreach ($aSteps as $dataStep) { + if ((in_array($dataStep['pui_position'], $range)) && ($dataStep['pui_uid'] != $step_uid)) { + $stepChangeIds[] = $dataStep['pui_uid']; + $stepChangePos[] = $dataStep['pui_position']; + } + } + foreach ($stepChangeIds as $key => $value) { + if ($modPos == 'UP') { + $tempPos = ((int)$stepChangePos[$key])-1; + $this ->changePosStep($value, $tempPos); + } else { + $tempPos = ((int)$stepChangePos[$key])+1; + $this ->changePosStep($value, $tempPos); + } + } + $this ->changePosStep($value, $tempPos); + } + + /** + * Validate Process Uid + * @var string $pro_uid. Uid for process + * + */ + public function changePosStep ($step_uid, $pos) + { + $oCriteria=\StepSupervisorPeer::retrieveByPK($step_uid); + $oCriteria->setStepPosition($pos); + $oCriteria->save(); + } +} diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project/FilesManager.php b/workflow/engine/src/Services/Api/ProcessMaker/Project/FilesManager.php index e916c8a8f..351af84be 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Project/FilesManager.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project/FilesManager.php @@ -37,15 +37,17 @@ class FilesManager extends Api /** * @param string $prj_uid {@min 32} {@max 32} - * @param ProcessFilesManagerStructure $request_data + * @param ProcessFilesManagerStructurePost $request_data + * @param string $prf_content * * @url POST /:prj_uid/file-manager */ - public function doPostProcessFilesManager($prj_uid, ProcessFilesManagerStructure $request_data) + public function doPostProcessFilesManager($prj_uid, ProcessFilesManagerStructurePost $request_data, $prf_content=null) { try { $userUid = $this->getUserId(); $request_data = (array)($request_data); + $request_data = array_merge(array('prf_content' => $prf_content ), $request_data); $filesManager = new \BusinessModel\FilesManager(); $arrayData = $filesManager->addProcessFilesManager($prj_uid, $userUid, $request_data); //Response @@ -151,6 +153,18 @@ class FilesManager extends Api } } +class ProcessFilesManagerStructurePost +{ /** + * @var string {@from body} + */ + public $prf_filename; + + /** + * @var string {@from body} + */ + public $prf_path; +} + class ProcessFilesManagerStructure { /** diff --git a/workflow/engine/src/Services/Api/ProcessMaker/Project/ProcessSupervisors.php b/workflow/engine/src/Services/Api/ProcessMaker/Project/ProcessSupervisors.php index 11cf7a782..3dff5185e 100644 --- a/workflow/engine/src/Services/Api/ProcessMaker/Project/ProcessSupervisors.php +++ b/workflow/engine/src/Services/Api/ProcessMaker/Project/ProcessSupervisors.php @@ -215,14 +215,15 @@ class ProcessSupervisors extends Api * * @param string $prjUid {@min 32} {@max 32} * @param string $dyn_uid {@min 32} {@max 32} + * @param int $pud_position * * @status 201 */ - public function doPostProcessSupervisorDynaform($prjUid, $dyn_uid) + public function doPostProcessSupervisorDynaform($prjUid, $dyn_uid, $pud_position=null) { try { $supervisor = new \BusinessModel\ProcessSupervisor(); - $objectData = $supervisor->addProcessSupervisorDynaform($prjUid, $dyn_uid); + $objectData = $supervisor->addProcessSupervisorDynaform($prjUid, $dyn_uid, $pud_position); //Response $response = $objectData; } catch (\Exception $e) { @@ -237,14 +238,15 @@ class ProcessSupervisors extends Api * * @param string $prjUid {@min 32} {@max 32} * @param string $inp_doc_uid {@min 32} {@max 32} + * @param int $pui_position * * @status 201 */ - public function doPostProcessSupervisorInputDocument($prjUid, $inp_doc_uid) + public function doPostProcessSupervisorInputDocument($prjUid, $inp_doc_uid, $pui_position=null) { try { $supervisor = new \BusinessModel\ProcessSupervisor(); - $objectData = $supervisor->addProcessSupervisorInputDocument($prjUid, $inp_doc_uid); + $objectData = $supervisor->addProcessSupervisorInputDocument($prjUid, $inp_doc_uid, $pui_position); //Response $response = $objectData; } catch (\Exception $e) { @@ -265,7 +267,7 @@ class ProcessSupervisors extends Api { try { $supervisor = new \BusinessModel\ProcessSupervisor(); - $arrayData = $supervisor->removeProcessSupervisor($prjUid, $puUid); + $supervisor->removeProcessSupervisor($prjUid, $puUid); } catch (\Exception $e) { //response throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); @@ -283,7 +285,7 @@ class ProcessSupervisors extends Api { try { $supervisor = new \BusinessModel\ProcessSupervisor(); - $arrayData = $supervisor->removeDynaformSupervisor($prjUid, $pudUid); + $supervisor->removeDynaformSupervisor($prjUid, $pudUid); } catch (\Exception $e) { //response throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); @@ -301,11 +303,57 @@ class ProcessSupervisors extends Api { try { $supervisor = new \BusinessModel\ProcessSupervisor(); - $arrayData = $supervisor->removeInputDocumentSupervisor($prjUid, $puiUid); + $supervisor->removeInputDocumentSupervisor($prjUid, $puiUid); } catch (\Exception $e) { //response throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); } } + + /** + * @url PUT /:prjUid/process-supervisor/dynaform/:pud_uid + * + * @param string $prjUid {@min 32} {@max 32} + * @param string $pud_uid {@min 32} {@max 32} + * @param int $pud_position + * + * @status 201 + */ + public function doPutProcessSupervisorDynaform($prjUid, $pud_uid, $pud_position = null) + { + try { + $supervisor = new \BusinessModel\ProcessSupervisor(); + $objectData = $supervisor->updateProcessSupervisorDynaform($prjUid, $pud_uid, $pud_position); + //Response + $response = $objectData; + } catch (\Exception $e) { + //Response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } + + /** + * @url PUT /:prjUid/process-supervisor/input-document/:pui_uid + * + * @param string $prjUid {@min 32} {@max 32} + * @param string $pui_uid {@min 32} {@max 32} + * @param int $pui_position + * + * @status 201 + */ + public function doPutProcessSupervisorInputDocument($prjUid, $pui_uid, $pui_position = null) + { + try { + $supervisor = new \BusinessModel\ProcessSupervisor(); + $objectData = $supervisor->updateProcessSupervisorInputDocument($prjUid, $pui_uid, $pui_position); + //Response + $response = $objectData; + } catch (\Exception $e) { + //Response + throw new RestException(Api::STAT_APP_EXCEPTION, $e->getMessage()); + } + return $response; + } }