diff --git a/workflow/engine/classes/class.case.php b/workflow/engine/classes/class.case.php index 930178246..596c46629 100755 --- a/workflow/engine/classes/class.case.php +++ b/workflow/engine/classes/class.case.php @@ -73,6 +73,7 @@ class Cases private $appSolr = null; public $dir = 'ASC'; public $sort = 'APP_MSG_DATE'; + public $arrayTriggerExecutionTime = []; public function __construct() { @@ -1319,6 +1320,10 @@ class Cases $appAssignSelfServiceValue->remove($sAppUid, $iDelIndex); /*----------------------------------********---------------------------------*/ + //Delete record of the table LIST_UNASSIGNED + $unassigned = new ListUnassigned(); + $unassigned->remove($sAppUid, $iDelIndex); + $aFields = $oAppDel->toArray(BasePeer::TYPE_FIELDNAME); $aFields['APP_STATUS'] = 'TO_DO'; $inbox = new ListInbox(); @@ -1541,6 +1546,10 @@ class Cases //If exist paused cases $closedTasks[] = $row; $aIndex[] = $row['DEL_INDEX']; + $res = $this->GetAllOpenDelegation( array('APP_UID'=>$sAppUid, 'APP_THREAD_PARENT'=>$row['DEL_PREVIOUS']), 'NONE' ); + foreach ($res as $in) { + $aIndex[] = $in['DEL_INDEX']; + } $pausedTasks = $this->getReviewedTasksPaused($sAppUid,$aIndex); } } @@ -3547,10 +3556,8 @@ class Cases $oPMScript = new PMScript(); $oPMScript->setFields($aFields); - $arraySystemConfiguration = System::getSystemConfiguration(PATH_CONFIG . "env.ini"); - /*----------------------------------********---------------------------------*/ - $cs = new CodeScanner((isset($arraySystemConfiguration["enable_blacklist"]) && (int)($arraySystemConfiguration["enable_blacklist"]) == 1)? "DISABLED_CODE" : ""); + $cs = new CodeScanner(SYS_SYS); $strFoundDisabledCode = ""; /*----------------------------------********---------------------------------*/ @@ -3585,6 +3592,8 @@ class Cases if ($bExecute) { $oPMScript->setScript($aTrigger['TRI_WEBBOT']); $oPMScript->execute(); + + $this->arrayTriggerExecutionTime[$aTrigger['TRI_UID']] = $oPMScript->scriptExecutionTime; } } /*----------------------------------********---------------------------------*/ @@ -4396,6 +4405,132 @@ class Cases /*----------------------------------********---------------------------------*/ } + /** + * Un cancel case + * + * @param string $caseUID + * @param string $userUID + * @return int + */ + public function unCancelCase($appUID, $userUID) + { + try { + global $RBAC; + if ($RBAC->userCanAccess('PM_UNCANCELCASE') !== 1) { + throw new Exception(G::LoadTranslation('ID_YOU_DO_NOT_HAVE_PERMISSION')); + } + + $application = new Application(); + $rowApplication = $application->load($appUID); + if ($rowApplication["APP_STATUS"] !== "CANCELLED") { + throw new Exception(G::LoadTranslation('ID_THE_APPLICATION_IS_NOT_CANCELED', [$appUID])); + } + + $criteriaAppDelay = new Criteria('workflow'); + $criteriaAppDelay->add(AppDelayPeer::APP_UID, $appUID); + $criteriaAppDelay->add(AppDelayPeer::APP_STATUS, 'CANCELLED'); + $criteriaAppDelay->add(AppDelayPeer::PRO_UID, $rowApplication['PRO_UID']); + $criteriaAppDelay->addDescendingOrderByColumn(AppDelayPeer::APP_ENABLE_ACTION_DATE); + $resultSetAppDelay = AppDelayPeer::doSelectRS($criteriaAppDelay); + $resultSetAppDelay->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $resultSetAppDelay->next(); + $rowAppDelay = $resultSetAppDelay->getRow(); + if (!isset($rowAppDelay['APP_STATUS'])) { + throw new Exception(G::LoadTranslation('ID_THREAD_STATUS_DOES_NOT_EXIST_FOR_THE_APPLICATION.', [$appUID])); + } + + $users = new Users(); + $rowUsers = $users->load($userUID); + + //Application + $rowApplication['APP_STATUS'] = 'TO_DO'; + $rowApplication['APP_UPDATE_DATE'] = date('Y-m-d H:i:s'); + $application->update($rowApplication); + + //AppDelegation + $appDelegation = new AppDelegation(); + $rowAppDelegation = $appDelegation->Load($appUID, $rowAppDelay['APP_DEL_INDEX']); + + $appDelegation = new AppDelegation(); + $delIndex = $appDelegation->createAppDelegation($rowAppDelegation['PRO_UID'], $rowAppDelegation['APP_UID'], $rowAppDelegation['TAS_UID'], $userUID, $rowAppDelay['APP_THREAD_INDEX']); + + //AppThread + $dataAppThread = [ + 'APP_UID' => $rowApplication['APP_UID'], + 'APP_THREAD_INDEX' => $rowAppDelay['APP_THREAD_INDEX'], + 'APP_THREAD_STATUS' => 'OPEN', + 'DEL_INDEX' => $delIndex + ]; + $appThread = new AppThread(); + $appThread->update($dataAppThread); + + //AppDelay + $dataAppDelay = [ + 'PRO_UID' => $rowApplication['PRO_UID'], + 'APP_UID' => $rowApplication['APP_UID'], + 'APP_THREAD_INDEX' => $rowAppDelay['APP_THREAD_INDEX'], + 'APP_DELINDEX' => $delIndex, + 'APP_TYPE' => 'UNCANCEL', + 'APP_STATUS' => $rowApplication['APP_STATUS'], + 'APP_NEXT_TASK' => 0, + 'APP_DELEGATION_USER' => $userUID, + 'APP_ENABLE_ACTION_USER' => $userUID, + 'APP_ENABLE_ACTION_DATE' => date('Y-m-d H:i:s'), + 'APP_DISABLE_ACTION_USER' => 0 + ]; + $appDelay = new AppDelay(); + $appDelay->create($dataAppDelay); + + //ListCanceled + $criteriaListCanceled = new Criteria("workflow"); + $criteriaListCanceled->add(ListCanceledPeer::APP_UID, $appUID); + $resultSetListCanceled = ListCanceledPeer::doSelectRS($criteriaListCanceled); + $resultSetListCanceled->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $resultSetListCanceled->next(); + $rowListCanceled = $resultSetListCanceled->getRow(); + ListCanceledPeer::doDelete($criteriaListCanceled); + $usrTotalCancelled = $rowUsers['USR_TOTAL_CANCELLED'] - 1; + + //ListInbox + $rowListCanceled['DEL_PREVIOUS_USR_USERNAME'] = $rowListCanceled['DEL_CURRENT_USR_USERNAME']; + $rowListCanceled['DEL_PREVIOUS_USR_FIRSTNAME'] = $rowListCanceled['DEL_CURRENT_USR_FIRSTNAME']; + $rowListCanceled['DEL_PREVIOUS_USR_LASTNAME'] = $rowListCanceled['DEL_CURRENT_USR_LASTNAME']; + $rowListCanceled['APP_STATUS'] = 'TO_DO'; + $rowListCanceled['APP_UPDATE_DATE'] = date('Y-m-d H:i:s'); + $rowListCanceled['DEL_RISK_DATE'] = date('Y-m-d H:i:s'); + $rowListCanceled['DEL_INDEX'] = $delIndex; + unset($rowListCanceled['DEL_CURRENT_USR_USERNAME']); + unset($rowListCanceled['DEL_CURRENT_USR_FIRSTNAME']); + unset($rowListCanceled['DEL_CURRENT_USR_LASTNAME']); + unset($rowListCanceled['APP_CANCELED_DATE']); + $listInbox = new ListInbox(); + $listInbox->create($rowListCanceled); + $usrTotalInbox = $rowUsers['USR_TOTAL_INBOX'] + 1; + + //Users + $users->update([ + 'USR_UID' => $userUID, + 'USR_TOTAL_INBOX' => $usrTotalInbox, + 'USR_TOTAL_CANCELLED' => $usrTotalCancelled + ]); + + //ListParticipatedLast + $criteriaListParticipatedLast = new Criteria("workflow"); + $criteriaListParticipatedLast->add(ListParticipatedLastPeer::APP_UID, $appUID); + $resultSetListParticipatedLast = ListParticipatedLastPeer::doSelectRS($criteriaListParticipatedLast); + $resultSetListParticipatedLast->setFetchmode(ResultSet::FETCHMODE_ASSOC); + $resultSetListParticipatedLast->next(); + $rowListParticipatedLast = $resultSetListParticipatedLast->getRow(); + $rowListParticipatedLast['APP_STATUS'] = 'TO_DO'; + $rowListParticipatedLast['DEL_THREAD_STATUS'] = 'OPEN'; + $rowListParticipatedLast['DEL_INIT_DATE'] = null; + $listParticipatedLast = new ListParticipatedLast(); + $listParticipatedLast->update($rowListParticipatedLast); + } catch (Exception $oException) { + throw $oException; + } + } + /* * reactive a case * @@ -5376,7 +5511,8 @@ class Cases $sBody2 = G::replaceDataGridField($sBody, $arrayData2, false); - $respTo = $this->getTo($aTask["TAS_ASSIGN_TYPE"], $aTask["TAS_UID"], $aTask["USR_UID"], $arrayData); + $respTo = $this->getTo($aTask['TAS_UID'], $aTask['USR_UID'], $arrayData); + $sTo = $respTo['to']; $sCc = $respTo['cc']; @@ -5427,67 +5563,104 @@ class Cases throw $oException; } } - - public function getTo($taskType, $taskUid, $taskUsrUid, $arrayData) + + public function getTo($taskUid, $userUid, $arrayData) { $sTo = null; $sCc = null; $arrayResp = array (); - $task = new Tasks (); + $tasks = new Tasks(); $group = new Groups (); $oUser = new Users (); - - switch ($taskType) { - case "SELF_SERVICE" : - if (isset ( $taskUid ) && ! empty ( $taskUid )) { - $arrayTaskUser = array (); - - $arrayAux1 = $task->getGroupsOfTask ( $taskUid, 1 ); - - foreach ( $arrayAux1 as $arrayGroup ) { - $arrayAux2 = $group->getUsersOfGroup ( $arrayGroup ["GRP_UID"] ); - - foreach ( $arrayAux2 as $arrayUser ) { - $arrayTaskUser [] = $arrayUser ["USR_UID"]; + + $task = TaskPeer::retrieveByPK($taskUid); + + switch ($task->getTasAssignType()) { + case 'SELF_SERVICE': + $to = ''; + $cc = ''; + + //Query + $criteria = new Criteria('workflow'); + + $criteria->addSelectColumn(UsersPeer::USR_UID); + $criteria->addSelectColumn(UsersPeer::USR_USERNAME); + $criteria->addSelectColumn(UsersPeer::USR_FIRSTNAME); + $criteria->addSelectColumn(UsersPeer::USR_LASTNAME); + $criteria->addSelectColumn(UsersPeer::USR_EMAIL); + + $criteria->add(UsersPeer::USR_STATUS, 'CLOSED', Criteria::NOT_EQUAL); + + $rsCriteria = null; + + if (trim($task->getTasGroupVariable()) != '') { + //SELF_SERVICE_VALUE + $variable = trim($task->getTasGroupVariable(), ' @#%?$='); + + //Query + if (isset($arrayData[$variable])) { + $data = $arrayData[$variable]; + + switch (gettype($data)) { + case 'string': + $criteria->addJoin(GroupUserPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); + + $criteria->add(GroupUserPeer::GRP_UID, $data, Criteria::EQUAL); + + $rsCriteria = GroupUserPeer::doSelectRS($criteria); + break; + case 'array': + $criteria->add(UsersPeer::USR_UID, $data, Criteria::IN); + + $rsCriteria = UsersPeer::doSelectRS($criteria); + break; } } - - $arrayAux1 = $task->getUsersOfTask ( $taskUid, 1 ); - - foreach ( $arrayAux1 as $arrayUser ) { - $arrayTaskUser [] = $arrayUser ["USR_UID"]; - } - - $criteria = new Criteria ( "workflow" ); - - $criteria->addSelectColumn ( UsersPeer::USR_UID ); - $criteria->addSelectColumn ( UsersPeer::USR_USERNAME ); - $criteria->addSelectColumn ( UsersPeer::USR_FIRSTNAME ); - $criteria->addSelectColumn ( UsersPeer::USR_LASTNAME ); - $criteria->addSelectColumn ( UsersPeer::USR_EMAIL ); - $criteria->add ( UsersPeer::USR_UID, $arrayTaskUser, Criteria::IN ); - $rsCriteria = UsersPeer::doSelectRs ( $criteria ); - $rsCriteria->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); - - $to = null; - $cc = null; - $sw = 1; - - while ( $rsCriteria->next () ) { - $row = $rsCriteria->getRow (); - - $toAux = ((($row ["USR_FIRSTNAME"] != "") || ($row ["USR_LASTNAME"] != "")) ? $row ["USR_FIRSTNAME"] . " " . $row ["USR_LASTNAME"] . " " : "") . "<" . $row ["USR_EMAIL"] . ">"; - - if ($sw == 1) { - $to = $toAux; - $sw = 0; - } else { - $cc = $cc . (($cc != null) ? "," : null) . $toAux; + } else { + //SELF_SERVICE + $arrayTaskUser = []; + + $arrayAux1 = $tasks->getGroupsOfTask($taskUid, 1); + + foreach ($arrayAux1 as $arrayGroup) { + $arrayAux2 = $group->getUsersOfGroup($arrayGroup['GRP_UID']); + + foreach ($arrayAux2 as $arrayUser) { + $arrayTaskUser [] = $arrayUser ['USR_UID']; } } - $arrayResp ['to'] = $to; - $arrayResp ['cc'] = $cc; + + $arrayAux1 = $tasks->getUsersOfTask($taskUid, 1); + + foreach ($arrayAux1 as $arrayUser) { + $arrayTaskUser[] = $arrayUser['USR_UID']; + } + + + //Query + $criteria->add(UsersPeer::USR_UID, $arrayTaskUser, Criteria::IN); + + $rsCriteria = UsersPeer::doSelectRS($criteria); } + + if (!is_null($rsCriteria)) { + $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); + + while ($rsCriteria->next()) { + $record = $rsCriteria->getRow(); + + $toAux = (($record['USR_FIRSTNAME'] != '' || $record['USR_LASTNAME'] != '')? $record['USR_FIRSTNAME'] . ' ' . $record['USR_LASTNAME'] . ' ' : '') . '<' . $record['USR_EMAIL'] . '>'; + + if ($to == '') { + $to = $toAux; + } else { + $cc .= (($cc != '')? ',' : '') . $toAux; + } + } + } + + $arrayResp['to'] = $to; + $arrayResp['cc'] = $cc; break; case "MULTIPLE_INSTANCE" : $to = null; @@ -5520,7 +5693,7 @@ class Cases $arrayUsers = $arrayData [$nextTaskAssignVariable]; $oDerivation = new Derivation (); $userFields = $oDerivation->getUsersFullNameFromArray ( $arrayUsers ); - + foreach ( $userFields as $row ) { $toAux = ((($row ["USR_FIRSTNAME"] != "") || ($row ["USR_LASTNAME"] != "")) ? $row ["USR_FIRSTNAME"] . " " . $row ["USR_LASTNAME"] . " " : "") . "<" . $row ["USR_EMAIL"] . ">"; if ($sw == 1) { @@ -5535,8 +5708,9 @@ class Cases } break; default : - if (isset ( $taskUsrUid ) && ! empty ( $taskUsrUid )) { - $aUser = $oUser->load ( $taskUsrUid ); + if (isset($userUid) && !empty($userUid)) { + $aUser = $oUser->load($userUid); + $sTo = ((($aUser ["USR_FIRSTNAME"] != "") || ($aUser ["USR_LASTNAME"] != "")) ? $aUser ["USR_FIRSTNAME"] . " " . $aUser ["USR_LASTNAME"] . " " : "") . "<" . $aUser ["USR_EMAIL"] . ">"; } $arrayResp ['to'] = $sTo; @@ -6929,14 +7103,16 @@ class Cases * @return $aThreads */ - public function GetAllOpenDelegation($aData) + public function GetAllOpenDelegation($aData, $status = 'OPEN') { try { $aThreads = array(); $c = new Criteria(); $c->add(AppDelegationPeer::APP_UID, $aData['APP_UID']); $c->add(AppDelegationPeer::DEL_PREVIOUS, $aData['APP_THREAD_PARENT']); - $c->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); + if($status === 'OPEN'){ + $c->add(AppDelegationPeer::DEL_THREAD_STATUS, 'OPEN'); + } $rs = AppDelegationPeer::doSelectRs($c); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->next(); @@ -7090,7 +7266,7 @@ class Cases * @return array (criteria+array) */ - public function getUsersParticipatedInCase($sAppUid) + public function getUsersParticipatedInCase($sAppUid, $usrStatus = '') { $c = new Criteria('workflow'); $c->addSelectColumn(AppDelegationPeer::APP_UID); @@ -7098,6 +7274,10 @@ class Cases $c->addSelectColumn(UsersPeer::USR_USERNAME); $c->addSelectColumn(UsersPeer::USR_EMAIL); + if($usrStatus != '') { + $c->add(UsersPeer::USR_STATUS, $usrStatus, CRITERIA::EQUAL); + } + $c->add(AppDelegationPeer::APP_UID, $sAppUid, CRITERIA::EQUAL); $c->addJoin(AppDelegationPeer::USR_UID, UsersPeer::USR_UID, Criteria::LEFT_JOIN); $rs = AppDelegationPeer::doSelectRS($c); @@ -7377,4 +7557,3 @@ class Cases return $rows; } } - diff --git a/workflow/engine/classes/class.pmScript.php b/workflow/engine/classes/class.pmScript.php index a98368792..3ec8cef4d 100644 --- a/workflow/engine/classes/class.pmScript.php +++ b/workflow/engine/classes/class.pmScript.php @@ -119,6 +119,8 @@ class PMScript */ public $affected_fields; + public $scriptExecutionTime = 0; + /** * Constructor of the class PMScript * @@ -346,7 +348,15 @@ class PMScript $sScript .= substr( $this->sScript, $iAux ); $sScript = "try {\n" . $sScript . "\n} catch (Exception \$oException) {\n " . " \$this->aFields['__ERROR__'] = utf8_encode(\$oException->getMessage());\n}"; //echo '
-->'; print_r($this->aFields); echo '<---'; - $this->executeAndCatchErrors( $sScript, $this->sScript ); + + $timeStart = microtime(true); + + $this->executeAndCatchErrors($sScript, $this->sScript); + + $timeEnd = microtime(true); + + $this->scriptExecutionTime = round($timeEnd - $timeStart, 5); + $this->aFields["__VAR_CHANGED__"] = implode(",", $this->affected_fields); for ($i = 0; $i < count( $this->affected_fields ); $i ++) { $_SESSION['TRIGGER_DEBUG']['DATA'][] = Array ('key' => $this->affected_fields[$i],'value' => isset( $this->aFields[$this->affected_fields[$i]] ) ? $this->aFields[$this->affected_fields[$i]] : '' @@ -508,7 +518,7 @@ class PMScript } return $bResult; } - + Public function evaluateVariable () { $process = new Process(); @@ -530,7 +540,7 @@ class PMScript if(strpos($var, '_label') === false) { if(in_array($var,$processVariables)) { if(isset($this->aFields[$var]) && is_array($this->aFields[$var][1]) ) { - $varLabel = $var.'_label'; + $varLabel = $var.'_label'; $arrayValue = $this->aFields[$var]; if(is_array($arrayValue) && sizeof($arrayValue)) { foreach($arrayValue as $val) { @@ -546,7 +556,7 @@ class PMScript $varType = $varInfo['VAR_FIELD_TYPE']; switch($varType) { case 'array': - $arrayLabels = '["'.implode('","',$arrayLabels).'"]'; + $arrayLabels = '["'.implode('","',$arrayLabels).'"]'; $newFields[$var] = $arrayValues; $newFields[$varLabel] = $arrayLabels; break; @@ -555,7 +565,7 @@ class PMScript $newFields[$varLabel] = $arrayLabels[0]; break; } - $this->affected_fields[] = $varLabel; + $this->affected_fields[] = $varLabel; $this->aFields = array_merge($this->aFields,$newFields); unset($newFields); unset($arrayValues); @@ -586,13 +596,13 @@ class PMScript } } } catch (Exception $e) { - + } } } } } - } + } } } } diff --git a/workflow/engine/methods/cases/casesSaveDataView.php b/workflow/engine/methods/cases/casesSaveDataView.php index d0fd20b7e..149b10ddc 100755 --- a/workflow/engine/methods/cases/casesSaveDataView.php +++ b/workflow/engine/methods/cases/casesSaveDataView.php @@ -54,6 +54,8 @@ $_SESSION['TRIGGER_DEBUG']['ERRORS'] = Array (); $_SESSION['TRIGGER_DEBUG']['DATA'] = Array (); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_NAMES'] = Array (); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_VALUES'] = Array (); +$_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = []; + $triggers = $oCase->loadTriggers( $_SESSION['TASK'], 'DYNAFORM', $_GET['UID'], 'AFTER' ); $_SESSION['TRIGGER_DEBUG']['NUM_TRIGGERS'] = count( $triggers ); $_SESSION['TRIGGER_DEBUG']['TIME'] = G::toUpper(G::loadTranslation('ID_AFTER')); @@ -67,6 +69,8 @@ if ($_SESSION['TRIGGER_DEBUG']['NUM_TRIGGERS'] != 0) { //Execute after triggers - Start $Fields['APP_DATA'] = $oCase->ExecuteTriggers( $_SESSION['TASK'], 'DYNAFORM', $_GET['UID'], 'AFTER', $Fields['APP_DATA'] ); //Execute after triggers - End + + $_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = $oCase->arrayTriggerExecutionTime; } //go to the next step @@ -85,4 +89,3 @@ if ($trigger_debug_session) { } G::header( 'location: ' . $aNextStep['PAGE'] ); - diff --git a/workflow/engine/methods/cases/cases_Derivate.php b/workflow/engine/methods/cases/cases_Derivate.php index 6ba245564..5d86f07b6 100755 --- a/workflow/engine/methods/cases/cases_Derivate.php +++ b/workflow/engine/methods/cases/cases_Derivate.php @@ -88,6 +88,7 @@ try { $_SESSION['TRIGGER_DEBUG']['DATA'] = Array (); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_NAMES'] = Array (); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_VALUES'] = Array (); + $_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = []; $triggers = $oCase->loadTriggers( $_SESSION['TASK'], 'ASSIGN_TASK', - 2, 'BEFORE' ); @@ -101,6 +102,7 @@ try { $_SESSION['TRIGGER_DEBUG']['info'][0]['TIME'] = G::toUpper(G::loadTranslation('ID_BEFORE')); $_SESSION['TRIGGER_DEBUG']['info'][0]['TRIGGERS_NAMES'] = $oCase->getTriggerNames( $triggers ); $_SESSION['TRIGGER_DEBUG']['info'][0]['TRIGGERS_VALUES'] = $triggers; + $_SESSION['TRIGGER_DEBUG']['info'][0]['TRIGGERS_EXECUTION_TIME'] = $oCase->arrayTriggerExecutionTime; } unset($appFields['APP_STATUS']); @@ -146,6 +148,7 @@ try { $_SESSION['TRIGGER_DEBUG']['info'][1]['TIME'] = G::toUpper(G::loadTranslation('ID_AFTER')); $_SESSION['TRIGGER_DEBUG']['info'][1]['TRIGGERS_NAMES'] = $oCase->getTriggerNames( $triggers ); $_SESSION['TRIGGER_DEBUG']['info'][1]['TRIGGERS_VALUES'] = $triggers; + $_SESSION['TRIGGER_DEBUG']['info'][1]['TRIGGERS_EXECUTION_TIME'] = $oCase->arrayTriggerExecutionTime; } unset($appFields['APP_STATUS']); unset($appFields['APP_PROC_STATUS']); @@ -173,10 +176,10 @@ try { $pmGoogle = new PMGoogleApi (); if ($pmGoogle->getServiceGmailStatus ()) { $flagGmail = true; - + $appDel = new AppDelegation (); $actualThread = $appDel->Load ( $_SESSION ['APPLICATION'], $_SESSION ['INDEX'] ); - + $appDelPrev = $appDel->LoadParallel ( $_SESSION ['APPLICATION'] ); $Pmgmail = new \ProcessMaker\BusinessModel\Pmgmail (); if (! $appDelPrev) { @@ -314,4 +317,3 @@ try { $G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); G::RenderPage( 'publish', 'blank' ); } - diff --git a/workflow/engine/methods/cases/cases_SaveData.php b/workflow/engine/methods/cases/cases_SaveData.php index d9349c2bd..daef6f9e7 100755 --- a/workflow/engine/methods/cases/cases_SaveData.php +++ b/workflow/engine/methods/cases/cases_SaveData.php @@ -61,21 +61,21 @@ if (!isset($_SESSION['USER_LOGGED'])) { } /** - * If you can, you may want to set post_max_size to a low value (say 1M) to make - * testing easier. First test to see how your script behaves. Try uploading a file - * that is larger than post_max_size. If you do you will get a message like this + * If you can, you may want to set post_max_size to a low value (say 1M) to make + * testing easier. First test to see how your script behaves. Try uploading a file + * that is larger than post_max_size. If you do you will get a message like this * in your error log: - * - * [09-Jun-2010 19:28:01] PHP Warning: POST Content-Length of 30980857 bytes exceeds + * + * [09-Jun-2010 19:28:01] PHP Warning: POST Content-Length of 30980857 bytes exceeds * the limit of 2097152 bytes in Unknown on line 0 - * + * * This makes the script is not completed. - * + * * Solving the problem: * The PHP documentation http://php.net/manual/en/ini.core.php#ini.post-max-size * provides a hack to solve this problem: - * - * If the size of post data is greater than post_max_size, the $_POST and $_FILES + * + * If the size of post data is greater than post_max_size, the $_POST and $_FILES * superglobals are empty. */ if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) && empty($_FILES) && $_SERVER['CONTENT_LENGTH'] > 0) { @@ -140,6 +140,7 @@ try { $_SESSION['TRIGGER_DEBUG']['DATA'] = Array (); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_NAMES'] = Array (); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_VALUES'] = Array (); + $_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = []; $triggers = $oCase->loadTriggers( $_SESSION['TASK'], 'DYNAFORM', $_GET['UID'], 'AFTER' ); @@ -161,6 +162,8 @@ try { //Execute after triggers - Start $Fields['APP_DATA'] = $oCase->ExecuteTriggers( $_SESSION['TASK'], 'DYNAFORM', $_GET['UID'], 'AFTER', $Fields['APP_DATA'] ); //Execute after triggers - End + + $_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = $oCase->arrayTriggerExecutionTime; } //save data in PM Tables if necessary @@ -484,4 +487,3 @@ try { G::RenderPage( 'publish', 'blank' ); die(); } - diff --git a/workflow/engine/methods/cases/cases_SaveDocument.php b/workflow/engine/methods/cases/cases_SaveDocument.php index 6c69c9ec4..f461fbec6 100755 --- a/workflow/engine/methods/cases/cases_SaveDocument.php +++ b/workflow/engine/methods/cases/cases_SaveDocument.php @@ -84,6 +84,7 @@ $_SESSION["TRIGGER_DEBUG"]["ERRORS"] = array(); $_SESSION["TRIGGER_DEBUG"]["DATA"] = array(); $_SESSION["TRIGGER_DEBUG"]["TRIGGERS_NAMES"] = array(); $_SESSION["TRIGGER_DEBUG"]["TRIGGERS_VALUES"] = array(); +$_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = []; $_SESSION["TRIGGER_DEBUG"]["NUM_TRIGGERS"] = count($arrayTrigger); $_SESSION["TRIGGER_DEBUG"]["TIME"] = "AFTER"; @@ -229,4 +230,3 @@ $_SESSION['BREAKSTEP']['NEXT_STEP'] = $aNextStep; $G_PUBLISH->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage ); G::RenderPage( 'publish' ); }*/ - diff --git a/workflow/engine/methods/cases/cases_Step.php b/workflow/engine/methods/cases/cases_Step.php index 559e4c302..40faa3562 100755 --- a/workflow/engine/methods/cases/cases_Step.php +++ b/workflow/engine/methods/cases/cases_Step.php @@ -181,6 +181,7 @@ if ($flagExecuteBeforeTriggers) { $_SESSION['TRIGGER_DEBUG']['DATA'] = Array (); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_NAMES'] = Array (); $_SESSION['TRIGGER_DEBUG']['TRIGGERS_VALUES'] = Array (); + $_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = []; $triggers = $oCase->loadTriggers( $_SESSION['TASK'], $_GET['TYPE'], $_GET['UID'], 'BEFORE' ); @@ -195,6 +196,8 @@ if ($flagExecuteBeforeTriggers) { //Execute before triggers - Start $Fields['APP_DATA'] = $oCase->ExecuteTriggers( $_SESSION['TASK'], $_GET['TYPE'], $_GET['UID'], 'BEFORE', $Fields['APP_DATA'] ); //Execute before triggers - End + + $_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = $oCase->arrayTriggerExecutionTime; } else { unset( $_SESSION['_NO_EXECUTE_TRIGGERS_'] ); } @@ -617,6 +620,8 @@ try { $Fields['TAS_UID'] = $_SESSION['TASK']; //Execute after triggers - End + $_SESSION['TRIGGER_DEBUG']['TRIGGERS_EXECUTION_TIME'] = $oCase->arrayTriggerExecutionTime; + //Save data - Start unset($Fields['APP_STATUS']); unset($Fields['APP_PROC_STATUS']); @@ -1169,4 +1174,3 @@ if ($_SESSION['TRIGGER_DEBUG']['ISSET'] && !$isIE) { showdebug(); }' ); } - diff --git a/workflow/engine/methods/cases/debug_triggers.php b/workflow/engine/methods/cases/debug_triggers.php index ba78fe0ff..bf0b03b05 100755 --- a/workflow/engine/methods/cases/debug_triggers.php +++ b/workflow/engine/methods/cases/debug_triggers.php @@ -27,6 +27,10 @@ foreach ($aTriggers as $aTrigger) { $geshi->set_line_style( 'background: #f0f0f0;' ); $triggersList[$i]['code'] = $geshi->parse_code(); //$aTrigger['TRIGGERS_VALUES'][$index]['TRI_WEBBOT']; + + $triggerUid = $aTrigger['TRIGGERS_VALUES'][$index]['TRI_UID']; + $triggersList[$i]['script_execution_time'] = $aTrigger['TRIGGERS_EXECUTION_TIME'][$triggerUid]; + $i ++; } } else { diff --git a/workflow/engine/templates/cases/main.js b/workflow/engine/templates/cases/main.js index 1efdd264d..96ce6df91 100755 --- a/workflow/engine/templates/cases/main.js +++ b/workflow/engine/templates/cases/main.js @@ -337,7 +337,8 @@ Ext.onReady(function(){ [ {name: 'name'}, {name: 'execution_time'}, - {name: 'code'} + {name: 'code'}, + {name: "script_execution_time"} ] ); @@ -362,7 +363,8 @@ Ext.onReady(function(){ columns: [ {id:'name',header: _('ID_NAME'), width: 60, sortable: true, dataIndex: 'name'}, {header: _('ID_EXECUTION'), width: 30, sortable: true, dataIndex: 'execution_time'}, - {header: "Code", width: 30, sortable: false, dataIndex: 'code', hidden: true} + {header: "Code", width: 30, sortable: false, dataIndex: 'code', hidden: true}, + {header: _("ID_EXECUTION_TIME") + " (" + _("ID_MILLISECONDS") + ")", dataIndex: "script_execution_time", width: 60, sortable: true, hidden: true} ], view: new Ext.grid.GroupingView({