/** * prepareInformation * * @param array $arrayData Data * @param string $taskUid Unique id of Task * * return array Return array */ public function prepareInformation(array $arrayData, $taskUid = "") { try { if (!class_exists("Cases")) { G::LoadClass("case"); } $this->case = new Cases(); $task = new Task(); $arrayNextTask = array(); $arrayNextTaskDefault = array(); $i = 0; //SELECT * //FROM APP_DELEGATION AS A //LEFT JOIN TASK AS T ON(T.TAS_UID = A.TAS_UID) //LEFT JOIN ROUTE AS R ON(R.TAS_UID = A.TAS_UID) //WHERE //APP_UID = '$arrayData["APP_UID"]' //AND DEL_INDEX = '$arrayData["DEL_INDEX"]' $criteria = new Criteria("workflow"); $criteria->addSelectColumn(RoutePeer::TAS_UID); $criteria->addSelectColumn(RoutePeer::ROU_NEXT_TASK); $criteria->addSelectColumn(RoutePeer::ROU_TYPE); $criteria->addSelectColumn(RoutePeer::ROU_DEFAULT); $criteria->addSelectColumn(RoutePeer::ROU_CONDITION); if ($taskUid != "") { $criteria->add(RoutePeer::TAS_UID, $taskUid, Criteria::EQUAL); $criteria->addAscendingOrderByColumn(RoutePeer::ROU_CASE); $rsCriteria = RoutePeer::doSelectRS($criteria); } else { $criteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); $criteria->addJoin(AppDelegationPeer::TAS_UID, RoutePeer::TAS_UID, Criteria::LEFT_JOIN); $criteria->add(AppDelegationPeer::APP_UID, $arrayData["APP_UID"], Criteria::EQUAL); $criteria->add(AppDelegationPeer::DEL_INDEX, $arrayData["DEL_INDEX"], Criteria::EQUAL); $criteria->addAscendingOrderByColumn(RoutePeer::ROU_CASE); $rsCriteria = AppDelegationPeer::doSelectRS($criteria); } $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); $flagDefault = false; while ($rsCriteria->next()) { $arrayRouteData = G::array_merges($rsCriteria->getRow(), $arrayData); if ((int)($arrayRouteData["ROU_DEFAULT"]) == 1) { $arrayNextTaskDefault = $arrayRouteData; $flagDefault = true; continue; } $flagContinue = true; //Evaluate the condition if there are conditions defined if (isset($arrayRouteData["ROU_CONDITION"]) && trim($arrayRouteData["ROU_CONDITION"]) != "" && ($arrayRouteData["ROU_TYPE"] != "SELECT" || $arrayRouteData["ROU_TYPE"] == "PARALLEL-BY-EVALUATION")) { G::LoadClass("pmScript"); $arrayApplicationData = $this->case->loadCase($arrayData["APP_UID"]); $pmScript = new PMScript(); $pmScript->setFields($arrayApplicationData["APP_DATA"]); $pmScript->setScript($arrayRouteData["ROU_CONDITION"]); $flagContinue = $pmScript->evaluate(); } if (isset($arrayRouteData["ROU_CONDITION"]) && trim($arrayRouteData["ROU_CONDITION"]) == "" && $arrayRouteData["ROU_NEXT_TASK"] != "-1") { $arrayTaskData = $task->load($arrayRouteData["ROU_NEXT_TASK"]); if ($arrayTaskData["TAS_TYPE"] == "GATEWAYTOGATEWAY") { $flagContinue = false; } } if ($arrayRouteData["ROU_TYPE"] == "EVALUATE" && count($arrayNextTask) > 0) { $flagContinue = false; } if ($flagContinue) { $arrayNextTask[++$i] = $this->prepareInformationTask($arrayRouteData); } } if (count($arrayNextTask) == 0 && count($arrayNextTaskDefault) > 0) { $arrayNextTask[++$i] = $this->prepareInformationTask($arrayNextTaskDefault); } //Check Task GATEWAYTOGATEWAY or END-MESSAGE-EVENT or END-EMAIL-EVENT $arrayNextTaskBackup = $arrayNextTask; $arrayNextTask = array(); $i = 0; foreach ($arrayNextTaskBackup as $value) { $arrayNextTaskData = $value; if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] != "-1" && in_array($arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"], array("GATEWAYTOGATEWAY", "END-MESSAGE-EVENT", "END-EMAIL-EVENT")) ) { $arrayAux = $this->prepareInformation($arrayData, $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]); foreach ($arrayAux as $value2) { $arrayNextTask[++$i] = $value2; } } else { if (in_array($arrayNextTaskData["TAS_TYPE"], array("END-MESSAGE-EVENT", "END-EMAIL-EVENT")) && $arrayNextTaskData["NEXT_TASK"]["TAS_UID"] == "-1" ) { $arrayNextTaskData["NEXT_TASK"]["TAS_UID"] = $arrayNextTaskData["TAS_UID"] . "/" . $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]; } $arrayNextTask[++$i] = $arrayNextTaskData; } } //1. There is no rule if (count($arrayNextTask) == 0) { $oProcess = new Process(); $oProcessFieds = $oProcess->Load( $_SESSION['PROCESS'] ); if(isset($oProcessFieds['PRO_BPMN']) && $oProcessFieds['PRO_BPMN'] == 1){ throw new Exception(G::LoadTranslation("ID_NO_DERIVATION_BPMN_RULE")); }else{ throw new Exception(G::LoadTranslation("ID_NO_DERIVATION_RULE")); } } //Return return $arrayNextTask; } catch (Exception $e) { throw $e; } }
} if ($folderitem->filename == $aFields['APP_DOC_UID'] && $folderitem->type == 'PDF') { $aFields['VIEW2'] = G::LoadTranslation('ID_GET_EXTERNAL_FILE'); $aFields['FILE2'] = $folderitem->downloadScript; continue; } } } if ($aGields['OUT_DOC_GENERATE'] == 'BOTH' || $aGields['OUT_DOC_GENERATE'] == '') { $G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_ViewOutputDocument1', '', G::array_merges($aOD, $aFields), ''); } if ($aGields['OUT_DOC_GENERATE'] == 'DOC') { $G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_ViewOutputDocument2', '', G::array_merges($aOD, $aFields), ''); } if ($aGields['OUT_DOC_GENERATE'] == 'PDF') { $G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_ViewOutputDocument3', '', G::array_merges($aOD, $aFields), ''); } break; } break; case 'ASSIGN_TASK': $oDerivation = new Derivation(); $oProcess = new Process(); $aData = $oCase->loadCase($_SESSION['APPLICATION']); $aFields['PROCESS'] = $oProcess->load($_SESSION['PROCESS']); $aFields['PREVIOUS_PAGE'] = $aPreviousStep['PAGE']; $aFields['PREVIOUS_PAGE_LABEL'] = G::LoadTranslation('ID_PREVIOUS_STEP'); $aFields['ASSIGN_TASK'] = G::LoadTranslation('ID_ASSIGN_TASK'); $aFields['END_OF_PROCESS'] = G::LoadTranslation('ID_END_OF_PROCESS'); $aFields['NEXT_TASK_LABEL'] = G::LoadTranslation('ID_NEXT_TASK'); $aFields['EMPLOYEE'] = G::LoadTranslation('ID_EMPLOYEE');
} if ((int) $_SESSION['INDEX'] < 1) { G::SendTemporalMessage('ID_USER_HAVENT_RIGHTS_PAGE', 'error', 'labels'); G::header('location: ' . $_SERVER['HTTP_REFERER']); die; } /* Includes */ G::LoadClass('case'); G::LoadClass('derivation'); /* GET , POST & $_SESSION Vars */ //$_SESSION['STEP_POSITION'] = (int)$_GET['POSITION']; /* Menues */ $G_MAIN_MENU = 'processmaker'; $G_SUB_MENU = 'cases'; $G_ID_MENU_SELECTED = 'CASES'; $G_ID_SUB_MENU_SELECTED = 'CASES_TO_REVISE'; $oCase = new Cases(); $Fields = $oCase->loadCase($_SESSION['APPLICATION']); require_once 'classes/model/AppDocument.php'; require_once 'classes/model/Users.php'; $G_PUBLISH = new Publisher(); $oAppDocument = new AppDocument(); $oAppDocument->Fields = $oAppDocument->load($_GET['DOC']); $oo = $oAppDocument->load($_GET['DOC']); $oUser = new Users(); $aUser = $oUser->load($oAppDocument->Fields['USR_UID']); $Fields['CREATOR'] = $aUser['USR_FIRSTNAME'] . ' ' . $aUser['USR_LASTNAME']; $oAppDocument->Fields['VIEW'] = G::LoadTranslation('ID_OPEN'); $oAppDocument->Fields['FILE'] = 'cases_ShowDocument?a=' . $_GET['DOC'] . '&r=' . rand(); $G_PUBLISH->AddContent('xmlform', 'xmlform', 'cases/cases_ViewInputDocumentToRevise', '', G::array_merges($Fields, $oAppDocument->Fields), ''); G::RenderPage('publish');
/** * Restore the html code * * @param object $A * @return code html */ public function restore_html($A) { $script = null; $fileTmp = G::decrypt($A, URL_KEY); $form = new Form($fileTmp, PATH_DYNAFORM, SYS_LANG, true); //Navigation Bar $form->fields = G::array_merges(array("__DYNAFORM_OPTIONS" => new XmlForm_Field_XmlMenu(new Xml_Node("__DYNAFORM_OPTIONS", "complete", "", array("type" => "xmlmenu", "xmlfile" => "gulliver/dynaforms_Options")), SYS_LANG, PATH_XMLFORM, $form)), $form->fields); $form->enableTemplate = false; $html = $form->printTemplate($form->template, $script); $html = str_replace('{$form_className}', 'formDefault', $html); if (file_exists(PATH_DYNAFORM . $fileTmp . '.html')) { unlink(PATH_DYNAFORM . $fileTmp . '.html'); } $fp = fopen(PATH_DYNAFORM . $fileTmp . '.html', 'w'); fwrite($fp, $html); fclose($fp); return $html; }
public function getPreviousStep($sProUid = '', $sAppUid = '', $iDelIndex = 0, $iPosition = 0) { //Note: Depreciated, delete in the future G::LoadClass('pmScript'); $oPMScript = new PMScript(); $oApplication = new Application(); //$aFields = $oApplication->load($sAppUid); $oApplication = ApplicationPeer::retrieveByPk($sAppUid); $aFields = $oApplication->toArray(BasePeer::TYPE_FIELDNAME); if (!is_array($aFields['APP_DATA'])) { $aFields['APP_DATA'] = G::array_merges(G::getSystemConstants(), unserialize($aFields['APP_DATA'])); } $oPMScript->setFields($aFields['APP_DATA']); try { //get the current Delegation, and TaskUID $c = new Criteria(); $c->add(AppDelegationPeer::PRO_UID, $sProUid); $c->add(AppDelegationPeer::APP_UID, $sAppUid); $c->add(AppDelegationPeer::DEL_INDEX, $iDelIndex); $aRow = AppDelegationPeer::doSelect($c); $sTaskUid = $aRow[0]->getTasUid(); $iFirstStep = 1; if ($iPosition == 10000) { //get max step for this task $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn('MAX(' . StepPeer::STEP_POSITION . ')'); $c->add(StepPeer::PRO_UID, $sProUid); $c->add(StepPeer::TAS_UID, $sTaskUid); $rs = StepPeer::doSelectRS($c); $rs->next(); $row = $rs->getRow(); $iPosition = intval($row[0]); } else { $iPosition -= 1; } $aPreviousStep = null; if ($iPosition >= 1) { while ($iPosition >= $iFirstStep) { $bAccessStep = false; //step $oStep = new Step; $oStep = $oStep->loadByProcessTaskPosition($sProUid, $sTaskUid, $iPosition); if ($oStep) { if (trim($oStep->getStepCondition()) !== '') { $oPMScript->setScript($oStep->getStepCondition()); $bAccessStep = $oPMScript->evaluate(); } else { $bAccessStep = true; } if ($bAccessStep) { switch ($oStep->getStepTypeObj()) { case 'DYNAFORM': $sAction = 'EDIT'; break; case 'OUTPUT_DOCUMENT': $sAction = 'GENERATE'; break; case 'INPUT_DOCUMENT': $sAction = 'ATTACH'; break; case 'EXTERNAL': $sAction = 'EDIT'; break; case 'MESSAGE': $sAction = ''; break; } $aPreviousStep = array('TYPE' => $oStep->getStepTypeObj(), 'UID' => $oStep->getStepUidObj(), 'POSITION' => $oStep->getStepPosition(), 'PAGE' => 'cases_Step?TYPE=' . $oStep->getStepTypeObj() . '&UID=' . $oStep->getStepUidObj() . '&POSITION=' . $oStep->getStepPosition() . '&ACTION=' . $sAction ); $iPosition = $iFirstStep; } } $iPosition -= 1; } } if (!$aPreviousStep) { $aPreviousStep = false; } return $aPreviousStep; } catch (exception $e) { throw ($e); } }
/** * prepareInformation * * @param array $aData * @return $taskInfo */ function prepareInformation($aData) { $oTask = new Task(); //SELECT * //FROM APP_DELEGATION AS A //LEFT JOIN TASK AS T ON(T.TAS_UID = A.TAS_UID) //LEFT JOIN ROUTE AS R ON(R.TAS_UID = A.TAS_UID) //WHERE //APP_UID = '$aData['APP_UID']' //AND DEL_INDEX = '$aData['DEL_INDEX']' $c = new Criteria('workflow'); $c->clearSelectColumns(); $c->addSelectColumn(AppDelegationPeer::TAS_UID); $c->addSelectColumn(RoutePeer::ROU_CONDITION); $c->addSelectColumn(RoutePeer::ROU_NEXT_TASK); $c->addSelectColumn(RoutePeer::ROU_TYPE); $c->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); $c->addJoin(AppDelegationPeer::TAS_UID, RoutePeer::TAS_UID, Criteria::LEFT_JOIN); $c->add(AppDelegationPeer::APP_UID, $aData['APP_UID']); $c->add(AppDelegationPeer::DEL_INDEX, $aData['DEL_INDEX']); $c->addAscendingOrderByColumn(RoutePeer::ROU_CASE); $rs = AppDelegationPeer::doSelectRs($c); $rs->setFetchmode(ResultSet::FETCHMODE_ASSOC); $rs->next(); $aDerivation = $rs->getRow(); $i = 0; $taskInfo = array(); $oUser = new Users(); $this->case = new Cases(); // 1. there is no rule if (is_null($aDerivation['ROU_NEXT_TASK'])) { throw new Exception(G::LoadTranslation('ID_NO_DERIVATION_RULE')); } while (is_array($aDerivation)) { $oTask = new Task(); $aDerivation = G::array_merges($aDerivation, $aData); $bContinue = true; //evaluate the condition if there are conditions defined. if (isset($aDerivation['ROU_CONDITION']) && trim($aDerivation['ROU_CONDITION']) != '' && ($aDerivation['ROU_TYPE'] != 'SELECT' || $aDerivation['ROU_TYPE'] == 'PARALLEL-BY-EVALUATION')) { $AppFields = $this->case->loadCase($aData['APP_UID']); G::LoadClass('pmScript'); $oPMScript = new PMScript(); $oPMScript->setFields($AppFields['APP_DATA']); $oPMScript->setScript($aDerivation['ROU_CONDITION']); $bContinue = $oPMScript->evaluate(); } if ($aDerivation['ROU_TYPE'] == 'EVALUATE') { if (count($taskInfo) >= 1) { $bContinue = false; } } if ($bContinue) { $i++; $TaskFields = $oTask->load($aDerivation['TAS_UID']); $aDerivation = G::array_merges($aDerivation, $TaskFields); //2. if next case is an special case if ((int) $aDerivation['ROU_NEXT_TASK'] < 0) { $aDerivation['NEXT_TASK']['TAS_UID'] = (int) $aDerivation['ROU_NEXT_TASK']; $aDerivation['NEXT_TASK']['TAS_ASSIGN_TYPE'] = 'nobody'; $aDerivation['NEXT_TASK']['TAS_PRIORITY_VARIABLE'] = ''; $aDerivation['NEXT_TASK']['TAS_DEF_PROC_CODE'] = ''; $aDerivation['NEXT_TASK']['TAS_PARENT'] = ''; $aDerivation['NEXT_TASK']['TAS_TRANSFER_FLY'] = ''; switch ($aDerivation['ROU_NEXT_TASK']) { case -1: $aDerivation['NEXT_TASK']['TAS_TITLE'] = G::LoadTranslation('ID_END_OF_PROCESS'); break; case -2: $aDerivation['NEXT_TASK']['TAS_TITLE'] = G::LoadTranslation('ID_TAREA_COLGANTE'); break; } $aDerivation['NEXT_TASK']['USR_UID'] = ''; } else { //3. load the task information of normal NEXT_TASK $aDerivation['NEXT_TASK'] = $oTask->load($aDerivation['ROU_NEXT_TASK']); //print $aDerivation['ROU_NEXT_TASK']." **** ".$aDerivation['NEXT_TASK']['TAS_TYPE']."<hr>"; if ($aDerivation['NEXT_TASK']['TAS_TYPE'] === 'SUBPROCESS') { $oCriteria = new Criteria('workflow'); $oCriteria->add(SubProcessPeer::PRO_PARENT, $aDerivation['PRO_UID']); $oCriteria->add(SubProcessPeer::TAS_PARENT, $aDerivation['NEXT_TASK']['TAS_UID']); $oDataset = SubProcessPeer::doSelectRS($oCriteria); $oDataset->setFetchmode(ResultSet::FETCHMODE_ASSOC); $oDataset->next(); $aRow = $oDataset->getRow(); $sTaskParent = $aDerivation['NEXT_TASK']['TAS_UID']; $aDerivation['ROU_NEXT_TASK'] = $aRow['TAS_UID']; //print "<hr>Life is just a lonely highway"; $aDerivation['NEXT_TASK'] = $oTask->load($aDerivation['ROU_NEXT_TASK']); //print "<hr>Life is just a lonely highway";print"<hr>"; $oProcess = new Process(); $aRow = $oProcess->load($aRow['PRO_UID']); $aDerivation['NEXT_TASK']['TAS_TITLE'] .= ' (' . $aRow['PRO_TITLE'] . ')'; $aDerivation['NEXT_TASK']['TAS_PARENT'] = $sTaskParent; unset($oTask, $oProcess, $aRow, $sTaskParent); } else { $aDerivation['NEXT_TASK']['TAS_PARENT'] = ''; } $aDerivation['NEXT_TASK']['USER_ASSIGNED'] = $this->getNextAssignedUser($aDerivation); } $taskInfo[$i] = $aDerivation; } $rs->next(); $aDerivation = $rs->getRow(); } return $taskInfo; }
/** * @covers G::array_merges * @todo Implement testArray_merges(). */ public function testArray_merges() { $arrayTest1 = array('camp1' => 'val1', 'camp2' => 'val2', 'camp3' => 'val3', 'camp4' => 'val4'); $arrayTest2 = array('camp1' => '1', 'camp2' => '2'); $arrayResponse = G::array_merges($arrayTest1, $arrayTest2); $this->assertEquals($arrayResponse['camp1'], '1'); $this->assertEquals($arrayResponse['camp2'], '2'); $arrayResponse = G::array_merges($arrayTest2, $arrayTest1); $this->assertEquals($arrayResponse['camp3'], 'val3'); $this->assertEquals($arrayResponse['camp4'], 'val4'); }
/** * It Renders content according to Part['Type'] * * @author Fernando Ontiveros Lira <*****@*****.**> * * @param intPos = 0 * @return void * */ public function RenderContent0($intPos = 0, $showXMLFormName = false) { global $G_FORM; global $G_TABLE; global $G_TMP_TARGET; global $G_OP_MENU; global $G_IMAGE_FILENAME; global $G_IMAGE_PARTS; global $_SESSION; //Changed from $HTTP_SESSION_VARS global $G_OBJGRAPH; //For graphLayout component $this->intPos = $intPos; $Part = $this->Parts[$intPos]; $this->publishType = $Part['Type']; switch ($this->publishType) { case 'externalContent': $G_CONTENT = new Content(); if ($Part['Content'] != "") { $G_CONTENT = G::LoadContent($Part['Content']); } G::LoadTemplateExternal($Part['Template']); break; case 'image': $G_IMAGE_FILENAME = $Part['File']; $G_IMAGE_PARTS = $Part['Data']; break; case 'appform': global $APP_FORM; $G_FORM = $APP_FORM; break; case 'xmlform': case 'dynaform': global $G_FORM; if ($Part['AbsolutePath']) { $sPath = $Part['AbsolutePath']; } else { if ($this->publishType == 'xmlform') { $sPath = PATH_XMLFORM; } else { $sPath = PATH_DYNAFORM; } } //if the xmlform file doesn't exists, then try with the plugins folders if (!is_file($sPath . $Part['File'] . '.xml')) { $aux = explode(PATH_SEP, $Part['File']); //check if G_PLUGIN_CLASS is defined, because publisher can be called without an environment if (count($aux) > 2) { //Subfolders $filename = array_pop($aux); $aux0 = implode(PATH_SEP, $aux); $aux = array(); $aux[0] = $aux0; $aux[1] = $filename; } if (count($aux) == 2 && defined('G_PLUGIN_CLASS')) { $oPluginRegistry =& PMPluginRegistry::getSingleton(); if ($response = $oPluginRegistry->isRegisteredFolder($aux[0])) { if ($response !== true) { $sPath = PATH_PLUGINS . $response . PATH_SEP; } else { $sPath = PATH_PLUGINS; } } } } if (!class_exists($Part['Template']) || $Part['Template'] === 'xmlform') { $G_FORM = new Form($Part['File'], $sPath, SYS_LANG, false); } else { eval('$G_FORM = new ' . $Part['Template'] . ' ( $Part[\'File\'] , "' . $sPath . '");'); } if ($this->publishType == 'dynaform' && ($Part['Template'] == 'xmlform' || $Part['Template'] == 'xmlform_preview')) { $dynaformShow = isset($G_FORM->printdynaform) && $G_FORM->printdynaform ? 'gulliver/dynaforms_OptionsPrint' : 'gulliver/dynaforms_Options'; $G_FORM->fields = G::array_merges(array('__DYNAFORM_OPTIONS' => new XmlForm_Field_XmlMenu(new Xml_Node('__DYNAFORM_OPTIONS', 'complete', '', array('type' => 'xmlmenu', 'xmlfile' => $dynaformShow, 'parentFormId' => $G_FORM->id)), SYS_LANG, PATH_XMLFORM, $G_FORM)), $G_FORM->fields); } //Needed to make ajax calls //The action in the form tag. if (defined('ENABLE_ENCRYPT') && ENABLE_ENCRYPT == 'yes') { $G_FORM->action = urlencode(G::encrypt($Part['Target'], URL_KEY)); } else { $G_FORM->action = $Part['Target']; } if (!(isset($Part['ajaxServer']) && $Part['ajaxServer'] !== '')) { if ($this->publishType == 'dynaform') { $Part['ajaxServer'] = '../gulliver/defaultAjaxDynaform'; } else { $Part['ajaxServer'] = '../gulliver/defaultAjax'; } } if (defined('ENABLE_ENCRYPT') && ENABLE_ENCRYPT == 'yes') { $G_FORM->ajaxServer = urlencode(G::encrypt($Part['ajaxServer'], URL_KEY)); } else { $G_FORM->ajaxServer = $Part['ajaxServer']; } $G_FORM->setValues($Part['Data']); $G_FORM->setValues(array('G_FORM_ID' => $G_FORM->id)); //Asegurese de que no entre cuando $Part['Template']=="grid" //de hecho soo deberia usarse cuando $Part['Template']=="xmlform" if ($this->publishType == 'dynaform' && $Part['Template'] == "xmlform" || $Part['Template'] == "xmlform") { $G_FORM->values = G::array_merges(array('__DYNAFORM_OPTIONS' => isset($Part['Data']['__DYNAFORM_OPTIONS']) ? $Part['Data']['__DYNAFORM_OPTIONS'] : ''), $G_FORM->values); if (isset($G_FORM->nextstepsave)) { switch ($G_FORM->nextstepsave) { // this condition validates if the next step link is configured to Save and Go the next step or show a prompt case 'save': // Save and Next only if there are no required fields can submit the form. $G_FORM->values['__DYNAFORM_OPTIONS']['NEXT_ACTION'] = 'if (document.getElementById("' . $G_FORM->id . '")&&validateForm(document.getElementById(\'DynaformRequiredFields\').value)) {document.getElementById("' . $G_FORM->id . '").submit();}return false;'; break; case 'prompt': // Show Prompt only if there are no required fields can submit the form. $G_FORM->values['__DYNAFORM_OPTIONS']['NEXT_ACTION'] = 'if (document.getElementById("' . $G_FORM->id . '")&&validateForm(document.getElementById(\'DynaformRequiredFields\').value)) {if(dynaFormChanged(document.getElementsByTagName(\'form\').item(0))) {new leimnud.module.app.confirm().make({label:"@G::LoadTranslation(ID_DYNAFORM_SAVE_CHANGES)", action:function(){document.getElementById("' . $G_FORM->id . '").submit();}.extend(this), cancel:function(){window.location = getField("DYN_FORWARD").href;}.extend(this)});return false;} else {window.location = getField("DYN_FORWARD").href;return false;}}return false;'; break; } } } if (isset($_SESSION)) { $_SESSION[$G_FORM->id] = $G_FORM->values; } // by default load the core template if ($Part['Template'] == 'xmlform_preview') { $Part['Template'] = 'xmlform'; } $template = PATH_CORE . 'templates/' . $Part['Template'] . '.html'; //erik: new feature, now templates such as xmlform.html can be personalized via skins if (defined('SYS_SKIN') && strtolower(SYS_SKIN) != 'classic') { // First, verify if the template exists on Custom skins path if (is_file(PATH_CUSTOM_SKINS . SYS_SKIN . PATH_SEP . $Part['Template'] . '.html')) { $template = PATH_CUSTOM_SKINS . SYS_SKIN . PATH_SEP . $Part['Template'] . '.html'; //Second, verify if the template exists on base skins path } elseif (is_file(G::ExpandPath("skinEngine") . SYS_SKIN . PATH_SEP . $Part['Template'] . '.html')) { $template = G::ExpandPath("skinEngine") . SYS_SKIN . PATH_SEP . $Part['Template'] . '.html'; } } //end new feature if ($Part['Template'] == 'grid') { print '<form class="formDefault">'; } $scriptCode = ''; if ($this->localMode != '') { // @# las modification by erik in 09/06/2008 $G_FORM->mode = $this->localMode; } print $G_FORM->render($template, $scriptCode); if ($Part['Template'] == 'grid') { print '</form>'; } $oHeadPublisher =& headPublisher::getSingleton(); $oHeadPublisher->addScriptFile($G_FORM->scriptURL); $oHeadPublisher->addScriptCode($scriptCode); /** * We've implemented the conditional show hide fields.. * * @author Erik A. Ortiz <*****@*****.**> * @date Fri Feb 19, 2009 */ if ($this->publishType == 'dynaform') { if (isset($_SESSION['CURRENT_DYN_UID']) || isset($_SESSION['CONDITION_DYN_UID'])) { require_once "classes/model/FieldCondition.php"; $oFieldCondition = new FieldCondition(); //This dynaform has show/hide field conditions if (isset($_SESSION['CURRENT_DYN_UID']) && $_SESSION['CURRENT_DYN_UID'] != '') { $ConditionalShowHideRoutines = $oFieldCondition->getConditionScript($_SESSION["CURRENT_DYN_UID"]); //lsl } else { if (isset($_SESSION['CONDITION_DYN_UID']) && $_SESSION['CONDITION_DYN_UID'] != '') { $ConditionalShowHideRoutines = $oFieldCondition->getConditionScript($_SESSION["CONDITION_DYN_UID"]); //lsl } } } } if (isset($ConditionalShowHideRoutines) && $ConditionalShowHideRoutines) { G::evalJScript($ConditionalShowHideRoutines); } break; case 'pagedtable': global $G_FORM; //if the xmlform file doesn't exists, then try with the plugins folders $sPath = PATH_XMLFORM; if (!is_file($sPath . $Part['File'])) { $aux = explode(PATH_SEP, $Part['File']); if (count($aux) == 2) { $oPluginRegistry =& PMPluginRegistry::getSingleton(); if ($oPluginRegistry->isRegisteredFolder($aux[0])) { $sPath = PATH_PLUGINS; // . $aux[0] . PATH_SEP ; } } } $G_FORM = new Form($Part['File'], $sPath, SYS_LANG, true); if (defined('ENABLE_ENCRYPT') && ENABLE_ENCRYPT == 'yes') { $G_FORM->ajaxServer = urlencode(G::encrypt($Part['ajaxServer'], URL_KEY)); } else { $G_FORM->ajaxServer = $Part['ajaxServer']; } $G_FORM->setValues($Part['Data']); if (isset($_SESSION)) { $_SESSION[$G_FORM->id] = $G_FORM->values; } G::LoadSystem('pagedTable'); $oTable = new pagedTable(); $oTable->template = 'templates/' . $Part['Template'] . '.html'; $G_FORM->xmlform = ''; $G_FORM->xmlform->fileXml = $G_FORM->fileName; $G_FORM->xmlform->home = $G_FORM->home; $G_FORM->xmlform->tree->attribute = $G_FORM->tree->attributes; $G_FORM->values = array_merge($G_FORM->values, $Part['Data']); $oTable->setupFromXmlform($G_FORM); if (isset($Part['ajaxServer']) && $Part['ajaxServer'] !== '') { $oTable->ajaxServer = $Part['ajaxServer']; } /* Start Block: Load user configuration for the pagedTable */ G::LoadClass('configuration'); $objUID = $Part['File']; $conf = new Configurations(); $conf->loadConfig($oTable, 'pagedTable', $objUID, '', isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : '', ''); $oTable->__OBJ_UID = $objUID; /* End Block */ /* Start Block: PagedTable Right Click */ G::LoadClass('popupMenu'); $pm = new popupMenu('gulliver/pagedTable_PopupMenu'); $pm->name = $oTable->id; $fields = array_keys($oTable->fields); foreach ($fields as $f) { switch (strtolower($oTable->fields[$f]['Type'])) { case 'javascript': case 'button': case 'private': case 'hidden': case 'cellmark': break; default: $label = $oTable->fields[$f]['Label'] != '' ? $oTable->fields[$f]['Label'] : $f; $label = str_replace("\n", ' ', $label); $pm->fields[$f] = new XmlForm_Field_popupOption(new Xml_Node($f, 'complete', '', array('label' => $label, 'type' => 'popupOption', 'launch' => $oTable->id . '.showHideField("' . $f . '")'))); $pm->values[$f] = ''; } } $sc = ''; $pm->values['PAGED_TABLE_ID'] = $oTable->id; print $pm->render(PATH_CORE . 'templates/popupMenu.html', $sc); /* End Block */ $oTable->renderTable(); /* Start Block: Load PagedTable Right Click */ print '<script type="text/javascript">'; print $sc; print 'loadPopupMenu_' . $oTable->id . '();'; print '</script>'; /* End Block */ break; case 'propeltable': global $G_FORM; //if the xmlform file doesn't exists, then try with the plugins folders if ($Part['AbsolutePath']) { $sPath = ''; } else { $sPath = PATH_XMLFORM; } if (!is_file($sPath . $Part['File'])) { $aux = explode(PATH_SEP, $Part['File']); //search in PLUGINS folder, probably the file is in plugin if (count($aux) == 2) { $oPluginRegistry =& PMPluginRegistry::getSingleton(); if ($oPluginRegistry->isRegisteredFolder($aux[0])) { $sPath = PATH_PLUGINS; // . $aux[0] . PATH_SEP ; } } //search in PATH_DYNAFORM folder if (!is_file($sPath . PATH_SEP . $Part['File'] . '.xml')) { $sPath = PATH_DYNAFORM; } } //PATH_DATA_PUBLIC ??? if (!file_exists($sPath . PATH_SEP . $Part['File'] . '.xml') && defined('PATH_DATA_PUBLIC')) { $sPath = PATH_DATA_PUBLIC; } $G_FORM = new Form($Part['File'], $sPath, SYS_LANG, true); if (defined('ENABLE_ENCRYPT') && ENABLE_ENCRYPT == 'yes') { $G_FORM->ajaxServer = urlencode(G::encrypt($Part['ajaxServer'], URL_KEY)); } else { $G_FORM->ajaxServer = $Part['ajaxServer']; } if (isset($_SESSION)) { $_SESSION[$G_FORM->id] = $G_FORM->values; } G::LoadClass('propelTable'); $oTable = new propelTable(); $oTable->template = $Part['Template']; $oTable->criteria = $Part['Content']; if (isset($Part['ajaxServer']) && $Part['ajaxServer'] !== '') { $oTable->ajaxServer = $Part['ajaxServer']; } if (!isset($G_FORM->xmlform)) { $G_FORM->xmlform = new stdclass(); } $G_FORM->xmlform->fileXml = $G_FORM->fileName; $G_FORM->xmlform->home = $G_FORM->home; if (!isset($G_FORM->xmlform->tree)) { $G_FORM->xmlform->tree = new stdclass(); } $G_FORM->xmlform->tree->attribute = $G_FORM->tree->attributes; if (is_array($Part['Data'])) { $G_FORM->values = array_merge($G_FORM->values, $Part['Data']); } $oTable->setupFromXmlform($G_FORM); /* Start Block: Load user configuration for the pagedTable */ G::LoadClass('configuration'); $objUID = $Part['File']; $conf = new Configurations($oTable); $conf->loadConfig($oTable, 'pagedTable', $objUID, '', isset($_SESSION['USER_LOGGED']) ? $_SESSION['USER_LOGGED'] : '', ''); $oTable->__OBJ_UID = $objUID; //$oTable->__OBJ_UID = ''; /* End Block */ /* Start Block: PagedTable Right Click */ G::LoadClass('popupMenu'); $pm = new popupMenu('gulliver/pagedTable_PopupMenu'); $sc = $pm->renderPopup($oTable->id, $oTable->fields); /* End Block */ //krumo ( $Part ); if ($this->ROWS_PER_PAGE) { $oTable->rowsPerPage = $this->ROWS_PER_PAGE; } try { if (is_array($Part['Data'])) { $oTable->renderTable('', $Part['Data']); } else { $oTable->renderTable(); } print $sc; } catch (Exception $e) { $aMessage['MESSAGE'] = $e->getMessage(); $this->AddContent('xmlform', 'xmlform', 'login/showMessage', '', $aMessage); } break; case 'panel-init': global $mainPanelScript; global $panelName; global $tabCount; //G::LoadThirdParty( 'pear/json', 'class.json' ); //$json = new Services_JSON(); $tabCount = 0; $panelName = $Part['Template']; $data = $Part['File']; if (!is_array($data)) { $data = array(); } $data = G::array_merges(array('title' => '', 'style' => array(), 'left' => 'getAbsoluteLeft(mycontent)', 'top' => 'getAbsoluteTop(mycontent)', 'width' => 700, 'height' => 600, 'drag' => true, 'close' => true, 'modal' => true, 'roll' => false, 'resize' => false, 'tabWidth' => 120, 'tabStep' => 3, 'blinkToFront' => true, 'tabSpace' => 10), $data); $mainPanelScript = 'var ' . $panelName . '={},' . $panelName . 'Tabs=[];' . 'leimnud.event.add(window,"load",function(){' . $panelName . ' = new leimnud.module.panel();' . 'var mycontent=document.getElementById("' . $this->publisherId . '[' . $intPos . ']");' . $panelName . '.options={' . 'size:{w:' . $data['width'] . ',h:' . $data['height'] . '},' . 'position:{x:' . $data['left'] . ',y:' . $data['top'] . '},' . 'title:"' . addcslashes($data['title'], '\\"') . '",' . 'theme:"processmaker",' . 'statusBar:true,' . 'headerBar:true,' . 'control:{' . ' close:' . ($data['close'] ? 'true' : 'false') . ',' . ' roll:' . ($data['roll'] ? 'true' : 'false') . ',' . ' drag:' . ($data['drag'] ? 'true' : 'false') . ',' . ' resize:' . ($data['resize'] ? 'true' : 'false') . '},' . 'fx:{' . ' drag:' . ($data['drag'] ? 'true' : 'false') . ',' . ' modal:' . ($data['modal'] ? 'true' : 'false') . ',' . ' blinkToFront:' . ($data['blinkToFront'] ? 'true' : 'false') . '}' . '};' . $panelName . '.setStyle=' . Bootstrap::json_encode($data['style']) . ';' . $panelName . '.tab={' . 'width:' . ($data['tabWidth'] + $data['tabSpace']) . ',' . 'optWidth:' . $data['tabWidth'] . ',' . 'step :' . $data['tabStep'] . ',' . 'options:[]' . '};'; print ' '; break; case 'panel-tab': global $tabCount; global $mainPanelScript; global $panelName; $onChange = $Part['Content']; $beforeChange = $Part['Data']; if (SYS_LANG == 'es') { $mainPanelScript = str_replace("120", "150", $mainPanelScript); } else { $mainPanelScript = str_replace("150", "120", $mainPanelScript); } $mainPanelScript .= $panelName . 'Tabs[' . $tabCount . ']=' . 'document.getElementById("' . $Part['File'] . '");' . $panelName . '.tab.options[' . $panelName . '.tab.options.length]=' . '{' . 'title :"' . addcslashes($Part['Template'], '\\"') . '",' . 'noClear :true,' . 'content :function(){' . ($beforeChange != '' ? 'if (typeof(' . $beforeChange . ')!=="undefined") {' . $beforeChange . '();}' : '') . $panelName . 'Clear();' . $panelName . 'Tabs[' . $tabCount . '].style.display="";' . ($onChange != '' ? 'if (typeof(' . $onChange . ')!=="undefined") {' . $onChange . '();}' : '') . '}.extend(' . $panelName . '),' . 'selected:' . ($tabCount == 0 ? 'true' : 'false') . '};'; $tabCount++; break; case 'panel-close': global $mainPanelScript; global $panelName; global $tabCount; $mainPanelScript .= $panelName . '.make();'; $mainPanelScript .= 'for(var r=0;r<' . $tabCount . ';r++)' . 'if (' . $panelName . 'Tabs[r])' . $panelName . '.addContent(' . $panelName . 'Tabs[r]);'; $mainPanelScript .= '});'; $mainPanelScript .= 'function ' . $panelName . 'Clear(){'; $mainPanelScript .= 'for(var r=0;r<' . $tabCount . ';r++)' . 'if (' . $panelName . 'Tabs[r])' . $panelName . 'Tabs[r].style.display="none";}'; $oHeadPublisher =& headPublisher::getSingleton(); $oHeadPublisher->addScriptCode($mainPanelScript); break; case 'blank': print ' '; break; case 'varform': global $G_FORM; $G_FORM = new Form(); G::LoadSystem("varform"); $xml = new varForm(); //$xml->parseFile ( ); $xml->renderForm($G_FORM, $Part['File']); $G_FORM->Values = $Part['Data']; $G_FORM->SetUp($Part['Target']); $G_FORM->width = 500; break; case 'table': $G_TMP_TARGET = $Part['Target']; $G_TABLE = G::LoadRawTable($Part['File'], $this->dbc, $Part['Data']); break; case 'menu': $G_TMP_TARGET = $Part['Target']; $G_OP_MENU = new Menu(); $G_OP_MENU->Load($Part['File']); break; case 'smarty': //To do: Please check it 26/06/07 $template = new Smarty(); $template->compile_dir = PATH_SMARTY_C; $template->cache_dir = PATH_SMARTY_CACHE; $template->config_dir = PATH_THIRDPARTY . 'smarty/configs'; $template->caching = false; $dataArray = $Part['Data']; // verify if there are templates folders registered, template and method folders are the same $folderTemplate = explode('/', $Part['Template']); $oPluginRegistry =& PMPluginRegistry::getSingleton(); if ($oPluginRegistry->isRegisteredFolder($folderTemplate[0])) { $template->templateFile = PATH_PLUGINS . $Part['Template'] . '.html'; } else { $template->templateFile = PATH_TPL . $Part['Template'] . '.html'; } // last change to load the template, maybe absolute path was given if (!is_file($template->templateFile)) { $template->templateFile = strpos($Part['Template'], '.html') !== false ? $Part['Template'] : $Part['Template'] . '.html'; } //assign the variables and use the template $template $template->assign($dataArray); print $template->fetch($template->templateFile); break; case 'template': //To do: Please check it 26/06/07 if (gettype($Part['Data']) == 'array') { G::LoadSystem('template'); //template phpBB $template = new Template(); $template->set_filenames(array('body' => $Part['Template'] . '.html')); $dataArray = $Part['Data']; if (is_array($dataArray)) { foreach ($dataArray as $key => $val) { if (is_array($val)) { foreach ($val as $key_val => $val_array) { $template->assign_block_vars($key, $val_array); } } else { $template->assign_vars(array($key => $val)); } } } $template->pparse('body'); } if (gettype($Part['Data']) == 'object' && strtolower(get_class($Part['Data'])) == 'templatepower') { $Part['Data']->printToScreen(); } return; break; case 'view': case 'content': //check if G_PLUGIN_CLASS is defined, because publisher can be called without an environment $aux = explode(PATH_SEP, $Part['Template']); if (count($aux) == 2 && defined('G_PLUGIN_CLASS')) { //if the template doesn't exists, then try it with the plugins folders, after the normal Template $userTemplate = G::ExpandPath('templates') . $Part['Template']; $globalTemplate = PATH_TEMPLATE . $Part['Template']; if (!is_file($userTemplate) && !is_file($globalTemplate)) { $oPluginRegistry =& PMPluginRegistry::getSingleton(); if ($oPluginRegistry->isRegisteredFolder($aux[0])) { $pluginTemplate = PATH_PLUGINS . $Part['Template'] . '.php'; include $pluginTemplate; } } } break; case 'graphLayout': //Added by JHL to render GraphLayout component $G_OBJGRAPH = $Part['Data']; $G_TMP_TARGET = $Part['Target']; $G_TMP_FILE = $Part['File']; break; } //krumo( $Part['Template'] ); //check if this LoadTemplate is used, byOnti 12th Aug 2008 G::LoadTemplate($Part['Template']); $G_TABLE = null; }
/** * function run * @access public * @param object $testerObject * @param array $fields * @param int $count * @param int $start * @return array */ function run(&$testerObject, $fields = array(), $count = -1, $start = 0) { $results = array(); //$this->addToPlan( $count, $start ); $functions = get_class_methods(get_class($testerObject)); foreach ($functions as $id => $fn) { $functions[$id] = strtolower($fn); } foreach ($this->testCases as $index => $testCase) { if ($start == 0 && $count != 0) { if (isset($testCase['TODO'])) { $this->testLime->todo($testCase['TODO']); } else { if (isset($testCase['Function'])) { if (array_search(strtolower($testCase['Function']), $functions) !== FALSE) { $testCase['Input'] = G::array_merges($testCase['Input'], $fields); $result = eval('return $testerObject->' . $testCase['Function'] . '($testCase, $testCase["Input"]);'); $results[] = $result; /* Start Block: Test the $result */ if (isset($testCase['Output'])) { if (isset($testCase['Output']['Value'])) { //$this->testLime->is( $result, $testCase['Output']['Value'], $testCase['Title'] ); $this->testLime->todo($testCase['Output']['Type']); $this->testLime->diag("/processmaker/trunk/gulliver/system/class.ymlTestCases.php at line 204"); } elseif (isset($testCase['Output']['Type'])) { // $this->testLime->isa_ok( $result, $testCase['Output']['Type'], $testCase['Title'] ); $this->testLime->todo($testCase['Output']['Type']); $this->testLime->diag("/processmaker/trunk/gulliver/system/class.ymlTestCases.php at line 204"); } } /* End Block */ } else { $this->testLime->fail('Case #' . $index . ': Test function (Function) is not present in tester object.'); } } else { $this->testLime->fail('Case #' . $index . ' doesn\'t have a test function (Function) defined.'); } } } else { $start--; if ($count > 0) { $count--; } } } return $results; }
function replaceVariables($Fields, $ExternalVariables = array()) { //TODO: Verify dependencies between fields foreach ($Fields as $key => $field) { if (is_string($field)) { $mergedValues = G::array_merges($Fields, $ExternalVariables); $Fields[$key] = G::ReplaceDataField($field, $mergedValues); } } return $Fields; }
$aFields['FILE1'] = 'tracker_ShowOutputDocument?a=' . $aFields['APP_DOC_UID'] . '&ext=doc&random=' . rand(); $aFields['FILE2'] = 'tracker_ShowOutputDocument?a=' . $aFields['APP_DOC_UID'] . '&ext=pdf&random=' . rand(); //If plugin and trigger are defined for listing if ($oPluginRegistry->existsTrigger(PM_CASE_DOCUMENT_LIST_ARR)) { $oPluginRegistry =& PMPluginRegistry::getSingleton(); $filesPluginArray = $oPluginRegistry->executeTriggers(PM_CASE_DOCUMENT_LIST_ARR, $aFields['APP_UID']); //Now search for the file, if exists the change the download URL foreach ($filesPluginArray as $file) { if ($file->filename == $_POST['APP_DOC_UID']) { $aFields['FILE2'] = $file->downloadScript; // The PDF is the only one uploaded to KT } } } $G_PUBLISH = new Publisher(); $G_PUBLISH->AddContent('xmlform', 'xmlform', 'tracker/tracker_ViewAnyOutputDocument', '', G::array_merges($aOD, $aFields), ''); G::RenderPage('publish', 'raw'); break; case 'load': $oConnection = Propel::getConnection('workflow'); $oStatement = $oConnection->prepareStatement("CREATE TABLE IF NOT EXISTS `STAGE` (\r\n `STG_UID` VARCHAR( 32 ) NOT NULL ,\r\n `PRO_UID` VARCHAR( 32 ) NOT NULL ,\r\n `STG_POSX` INT( 11 ) NOT NULL DEFAULT '0',\r\n `STG_POSY` INT( 11 ) NOT NULL DEFAULT '0',\r\n `STG_INDEX` INT( 11 ) NOT NULL DEFAULT '0',\r\n PRIMARY KEY ( `STG_UID` )\r\n );"); $oStatement->executeQuery(); /** * ************************************************************************************************************ */ require_once 'classes/model/Stage.php'; require_once 'classes/model/Process.php'; require_once 'classes/model/Task.php'; require_once 'classes/model/AppDelegation.php'; //$oJSON = new Services_JSON(); $oData = Bootstrap::json_decode(stripslashes($_POST['data']));
function reload($fieldName, $fieldParent, $valueRecived, $appid, $filename) { global $HTTP_SESSION_VARS; $G_FORM = new Form(); G::LoadSystem("xmlform"); G::LoadClass("dynaform"); $fieldNew[$fieldParent] = $valueRecived; $Connection = new DBConnection(DB_HOST, DB_RBAC_USER, DB_RBAC_PASS, DB_RBAC_NAME); $ses = new DBSession($Connection); $xml = new Xmlform(); $vars = explode('][', $fieldName); if (is_array($vars)) { $cant = count($vars); $fieldName = $vars[$cant - 1]; if ($cant > 1) { $filename = $vars[0]; } } $vars2 = explode('][', $fieldParent); if (is_array($vars2)) { $cant2 = count($vars2); $fieldParent = $vars2[$cant2 - 1]; } $v = $filename; $xml->home = PATH_XMLFORM; $fieldXmlform = $xml->parseXmlformToArray($v); $fieldNew[$fieldParent] = $fieldXmlform[$fieldName][defaultvalue]; if ($valueRecived != '') { $fieldNew[$fieldParent] = $valueRecived; } $qry = stripslashes($fieldXmlform[$fieldName][Sql]); $fieldNew[$fieldParent] = $fieldXmlform[$fieldName][defaultvalue]; if ($valueRecived != '') { $fieldNew[$fieldParent] = $valueRecived; } if ($qry != '') { $conexion = $fieldXmlform[$fieldName][sqlconnection]; G::LoadClass('dynaform'); $myDyna = new Dynaform($Connection); $fieldsBase = array(); if ($HTTP_SESSION_VARS['CURRENT_APPLICATION'] != "0") { $fieldsBase = $myDyna->getFieldsDefaultDynaform($appid, 0); } if ($appid != "") { $Fields = G::array_merges($fieldsBase, $fieldNew); $qry = $myDyna->replaceTextWithFields($qry, $Fields); } else { $qry = "Select '1', 'dynamically filled' "; } eval('$Result = "$qry "; '); $options = LoadOptions($Result, $Connection); } return $options; }
/** * prepareInformation * * @param array $arrayData Data * @param string $taskUid Unique id of Task * * @return array Return array */ public function prepareInformation(array $arrayData, $taskUid = "") { try { if (!class_exists("Cases")) { G::LoadClass("case"); } $this->case = new Cases(); $task = new Task(); $arrayApplicationData = $this->case->loadCase($arrayData["APP_UID"]); $arrayNextTask = array(); $arrayNextTaskDefault = array(); $i = 0; //SELECT * //FROM APP_DELEGATION AS A //LEFT JOIN TASK AS T ON(T.TAS_UID = A.TAS_UID) //LEFT JOIN ROUTE AS R ON(R.TAS_UID = A.TAS_UID) //WHERE //APP_UID = '$arrayData["APP_UID"]' //AND DEL_INDEX = '$arrayData["DEL_INDEX"]' $criteria = new Criteria("workflow"); $criteria->addSelectColumn(RoutePeer::TAS_UID); $criteria->addSelectColumn(RoutePeer::ROU_NEXT_TASK); $criteria->addSelectColumn(RoutePeer::ROU_TYPE); $criteria->addSelectColumn(RoutePeer::ROU_DEFAULT); $criteria->addSelectColumn(RoutePeer::ROU_CONDITION); if ($taskUid != "") { $criteria->add(RoutePeer::TAS_UID, $taskUid, Criteria::EQUAL); $criteria->addAscendingOrderByColumn(RoutePeer::ROU_CASE); $rsCriteria = RoutePeer::doSelectRS($criteria); } else { $criteria->addJoin(AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN); $criteria->addJoin(AppDelegationPeer::TAS_UID, RoutePeer::TAS_UID, Criteria::LEFT_JOIN); $criteria->add(AppDelegationPeer::APP_UID, $arrayData["APP_UID"], Criteria::EQUAL); $criteria->add(AppDelegationPeer::DEL_INDEX, $arrayData["DEL_INDEX"], Criteria::EQUAL); $criteria->addAscendingOrderByColumn(RoutePeer::ROU_CASE); $rsCriteria = AppDelegationPeer::doSelectRS($criteria); } $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); $flagDefault = false; $aSecJoin = array(); $count = 0; while ($rsCriteria->next()) { $arrayRouteData = G::array_merges($rsCriteria->getRow(), $arrayData); if ((int) $arrayRouteData["ROU_DEFAULT"] == 1) { $arrayNextTaskDefault = $arrayRouteData; $flagDefault = true; continue; } $flagAddDelegation = true; //Evaluate the condition if there are conditions defined if (trim($arrayRouteData["ROU_CONDITION"]) != "" && $arrayRouteData["ROU_TYPE"] != "SELECT") { G::LoadClass("pmScript"); $pmScript = new PMScript(); $pmScript->setFields($arrayApplicationData["APP_DATA"]); $pmScript->setScript($arrayRouteData["ROU_CONDITION"]); $flagAddDelegation = $pmScript->evaluate(); } if (trim($arrayRouteData["ROU_CONDITION"]) == "" && $arrayRouteData["ROU_NEXT_TASK"] != "-1") { $arrayTaskData = $task->load($arrayRouteData["ROU_NEXT_TASK"]); if ($arrayRouteData["ROU_TYPE"] != "SEC-JOIN" && $arrayTaskData["TAS_TYPE"] == "GATEWAYTOGATEWAY") { $flagAddDelegation = true; } if ($arrayRouteData["ROU_TYPE"] == "SEC-JOIN") { $aSecJoin[$count]["ROU_PREVIOUS_TASK"] = $arrayRouteData["ROU_NEXT_TASK"]; $aSecJoin[$count]["ROU_PREVIOUS_TYPE"] = "SEC-JOIN"; $count++; } } if ($arrayRouteData["ROU_TYPE"] == "EVALUATE" && !empty($arrayNextTask)) { $flagAddDelegation = false; } if ($flagAddDelegation && preg_match("/^(?:EVALUATE|PARALLEL-BY-EVALUATION)\$/", $arrayRouteData["ROU_TYPE"]) && trim($arrayRouteData["ROU_CONDITION"]) == "") { $flagAddDelegation = false; } if ($flagAddDelegation) { $arrayNextTask[++$i] = $this->prepareInformationTask($arrayRouteData); } } if (count($arrayNextTask) == 0 && count($arrayNextTaskDefault) > 0) { $arrayNextTask[++$i] = $this->prepareInformationTask($arrayNextTaskDefault); } //Check Task GATEWAYTOGATEWAY, END-MESSAGE-EVENT, END-EMAIL-EVENT $arrayNextTaskBackup = $arrayNextTask; $arrayNextTask = array(); $i = 0; foreach ($arrayNextTaskBackup as $value) { $arrayNextTaskData = $value; $regexpTaskTypeToInclude = "GATEWAYTOGATEWAY|END-MESSAGE-EVENT|END-EMAIL-EVENT"; if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] != "-1" && preg_match("/^(?:" . $regexpTaskTypeToInclude . ")\$/", $arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"])) { $arrayAux = $this->prepareInformation($arrayData, $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]); foreach ($arrayAux as $value2) { $arrayNextTask[++$i] = $value2; foreach ($aSecJoin as $rsj) { $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TASK"] = $rsj["ROU_PREVIOUS_TASK"]; $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TYPE"] = "SEC-JOIN"; } } } else { $regexpTaskTypeToInclude = "END-MESSAGE-EVENT|END-EMAIL-EVENT"; if ($arrayNextTaskData["NEXT_TASK"]["TAS_UID"] == "-1" && preg_match("/^(?:" . $regexpTaskTypeToInclude . ")\$/", $arrayNextTaskData["TAS_TYPE"])) { $arrayNextTaskData["NEXT_TASK"]["TAS_UID"] = $arrayNextTaskData["TAS_UID"] . "/" . $arrayNextTaskData["NEXT_TASK"]["TAS_UID"]; } $arrayNextTask[++$i] = $arrayNextTaskData; foreach ($aSecJoin as $rsj) { $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TASK"] = $rsj["ROU_PREVIOUS_TASK"]; $arrayNextTask[$i]["NEXT_TASK"]["ROU_PREVIOUS_TYPE"] = "SEC-JOIN"; } //Start-Timer with Script-task $criteriaE = new Criteria("workflow"); $criteriaE->addSelectColumn(ElementTaskRelationPeer::ELEMENT_UID); $criteriaE->addJoin(BpmnEventPeer::EVN_UID, ElementTaskRelationPeer::ELEMENT_UID, Criteria::LEFT_JOIN); $criteriaE->add(ElementTaskRelationPeer::TAS_UID, $arrayNextTaskData["TAS_UID"], Criteria::EQUAL); $criteriaE->add(BpmnEventPeer::EVN_TYPE, 'START', Criteria::EQUAL); $criteriaE->add(BpmnEventPeer::EVN_MARKER, 'TIMER', Criteria::EQUAL); $rsCriteriaE = AppDelegationPeer::doSelectRS($criteriaE); $rsCriteriaE->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteriaE->next()) { if ($arrayNextTaskData["NEXT_TASK"]["TAS_TYPE"] == "SCRIPT-TASK") { if (isset($arrayNextTaskData["NEXT_TASK"]["USER_ASSIGNED"]["USR_UID"]) && $arrayNextTaskData["NEXT_TASK"]["USER_ASSIGNED"]["USR_UID"] == "") { $useruid = "00000000000000000000000000000001"; $userFields = $this->getUsersFullNameFromArray($useruid); $arrayNextTask[$i]["NEXT_TASK"]["USER_ASSIGNED"] = $userFields; } } } } } //1. There is no rule if (empty($arrayNextTask)) { $oProcess = new Process(); $oProcessFieds = $oProcess->Load($_SESSION['PROCESS']); if (isset($oProcessFieds['PRO_BPMN']) && $oProcessFieds['PRO_BPMN'] == 1) { throw new Exception(G::LoadTranslation("ID_NO_DERIVATION_BPMN_RULE")); } else { throw new Exception(G::LoadTranslation("ID_NO_DERIVATION_RULE")); } } //Return return $arrayNextTask; } catch (Exception $e) { throw $e; } }