예제 #1
0
    /**

     * 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;

        }

    }
예제 #2
0
                     }
                     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');
예제 #4
0
 /**
  * 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;
 }
예제 #5
0
    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);

        }

    }
예제 #6
0
 /**
  * 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;
 }
예제 #7
0
 /**
  * @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');
 }
예제 #8
0
 /**
  * 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;
 }
예제 #9
0
 /**
  * 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;
 }
예제 #10
0
 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;
 }
예제 #11
0
     $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']));
예제 #12
0
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;
}
예제 #13
0
 /**
  * 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;
     }
 }