public function caseSchedulerCron ($date, &$log = array(), $cron = 0) { try { require_once("classes" . PATH_SEP . "model" . PATH_SEP . "LogCasesScheduler.php"); //Set variables $port = ""; if (isset($_SERVER["SERVER_PORT"])) { $port = ($_SERVER["SERVER_PORT"] . "" != "80")? ":" . $_SERVER["SERVER_PORT"] : ""; } else { if (defined("SERVER_PORT")) { $port = (SERVER_PORT . "" != "80")? ":" . SERVER_PORT : ""; } } $wsdl = "http://" . SERVER_NAME . $port . "/sys" . SYS_SYS . "/" . SYS_LANG . "/classic/services/wsdl2"; $timeDate = strtotime($date); $dateHour = date("H", $timeDate); $dateMinutes = date("i", $timeDate); $dateCurrentIni = date("Y-m-d", $timeDate) . " 00:00:00"; $dateCurrentEnd = date("Y-m-d", $timeDate) . " 23:59:59"; //Query $criteria = $this->getAllCriteria(); $criteria->add( $criteria->getNewCriterion(CaseSchedulerPeer::SCH_STATE, "INACTIVE", Criteria::NOT_EQUAL)->addAnd( $criteria->getNewCriterion(CaseSchedulerPeer::SCH_STATE, "PROCESSED", Criteria::NOT_EQUAL)) ); $criteria->add( $criteria->getNewCriterion(CaseSchedulerPeer::SCH_TIME_NEXT_RUN, $dateCurrentIni, Criteria::GREATER_EQUAL)->addAnd( $criteria->getNewCriterion(CaseSchedulerPeer::SCH_TIME_NEXT_RUN, $dateCurrentEnd, Criteria::LESS_EQUAL))->addOr( //$criteria->getNewCriterion(CaseSchedulerPeer::SCH_OPTION, 5, Criteria::GREATER_EQUAL))->addOr( $criteria->getNewCriterion(CaseSchedulerPeer::SCH_TIME_NEXT_RUN, $dateCurrentIni, Criteria::LESS_THAN)) ); $criteria->add( $criteria->getNewCriterion(CaseSchedulerPeer::SCH_END_DATE, null, Criteria::EQUAL)->addOr( $criteria->getNewCriterion(CaseSchedulerPeer::SCH_END_DATE, $dateCurrentIni, Criteria::GREATER_EQUAL)) ); $rsCriteria = CaseSchedulerPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); if ($cron == 1) { $arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron"))); $arrayCron["processcTimeStart"] = time(); @file_put_contents(PATH_DATA . "cron", serialize($arrayCron)); } $caseSchedulerUid = $row["SCH_UID"]; $caseSchedulerOption = (int)($row["SCH_OPTION"]); $caseSchedulerTimeNextRun = $row["SCH_TIME_NEXT_RUN"]; //Create the new case $flagNewCase = false; $caseSchedulerTimeNextRunNew = ""; if (strtotime($caseSchedulerTimeNextRun) < strtotime($dateCurrentIni)) { //Generate new date for old SCH_TIME_NEXT_RUN $flagNewCase = true; //Create the old case $caseSchedulerTimeNextRunNew = $this->getTimeNextRunByDate($row, $date, false); } else { $caseSchedulerTimeNextRunHour = date("H", strtotime($row["SCH_TIME_NEXT_RUN"])); $caseSchedulerTimeNextRunMinutes = date("i", strtotime($row["SCH_TIME_NEXT_RUN"])); if ((int)($dateHour . $dateMinutes) <= (int)($caseSchedulerTimeNextRunHour . $caseSchedulerTimeNextRunMinutes)) { $flagNewCase = $caseSchedulerTimeNextRunHour == $dateHour && $caseSchedulerTimeNextRunMinutes == $dateMinutes; } else { $flagNewCase = true; //Create the old case } } if ($flagNewCase) { println(" CASE SCHEDULER: " . $row["SCH_NAME"]); println(" - Connecting webservice: $wsdl"); $user = $row["SCH_DEL_USER_NAME"]; $pass = $row["SCH_DEL_USER_PASS"]; $processId = $row["PRO_UID"]; $taskId = $row["TAS_UID"]; $client = new SoapClient($wsdl); $result = $client->__SoapCall("login", array( array("userid" => $user, "password" => Bootstrap::getPasswordHashType() . ":" . $pass) ) ); eprintln(" - Logging as user \"$user\"..."); $paramsLog = array( "PRO_UID" => $processId, "TAS_UID" => $taskId, "SCH_UID" => $caseSchedulerUid, "USR_NAME" => $user, "RESULT" => "", "EXEC_DATE" => date("Y-m-d"), "EXEC_HOUR" => date("H:i:s"), "WS_CREATE_CASE_STATUS" => "", "WS_ROUTE_CASE_STATUS" => "" ); $paramsLogResult = "FAILED"; $paramsRouteLogResult = "FAILED"; if ($result->status_code == 0) { eprintln(" OK", "green"); $sessionId = $result->message; $params = array("sessionId" => $sessionId, "processId" => $processId, "taskId" => $taskId, "variables" => array()); //If this Job was was registered to be performed by a plugin if (isset($row["CASE_SH_PLUGIN_UID"]) && $row["CASE_SH_PLUGIN_UID"] != "") { //Check if the plugin is active $pluginParts = explode("--", $row["CASE_SH_PLUGIN_UID"]); if (count($pluginParts) == 2) { //Plugins G::LoadClass("plugin"); //Here we are loading all plugins registered //The singleton has a list of enabled plugins $sSerializedFile = PATH_DATA_SITE . "plugin.singleton"; $oPluginRegistry = &PMPluginRegistry::getSingleton(); if (file_exists($sSerializedFile)) { $oPluginRegistry->unSerializeInstance(file_get_contents($sSerializedFile)); } $oPluginRegistry = &PMPluginRegistry::getSingleton(); $activePluginsForCaseScheduler = $oPluginRegistry->getCaseSchedulerPlugins(); foreach ($activePluginsForCaseScheduler as $key => $caseSchedulerPlugin) { if (isset($caseSchedulerPlugin->sNamespace) && $caseSchedulerPlugin->sNamespace == $pluginParts[0] && isset($caseSchedulerPlugin->sActionId) && $caseSchedulerPlugin->sActionId == $pluginParts[1]) { $caseSchedulerSelected = $caseSchedulerPlugin; } } } } //If there is a trigger that is registered to do this then transfer control if (isset($caseSchedulerSelected) && is_object($caseSchedulerSelected)) { eprintln(" - Transfering control to a Plugin: " . $caseSchedulerSelected->sNamespace . "/" . $caseSchedulerSelected->sActionId, "green"); $oData = array(); $oData["OBJ_SOAP"] = $client; $oData["SCH_UID"] = $row["SCH_UID"]; $oData["params"] = $params; $oData["sessionId"] = $sessionId; $oData["userId"] = $user; $paramsLogResultFromPlugin = $oPluginRegistry->executeMethod($caseSchedulerSelected->sNamespace, $caseSchedulerSelected->sActionExecute, $oData); $paramsLog["WS_CREATE_CASE_STATUS"] = $paramsLogResultFromPlugin["WS_CREATE_CASE_STATUS"]; $paramsLog["WS_ROUTE_CASE_STATUS"] = $paramsLogResultFromPlugin["WS_ROUTE_CASE_STATUS"]; $paramsLogResult = $paramsLogResultFromPlugin["paramsLogResult"]; $paramsRouteLogResult = $paramsLogResultFromPlugin["paramsRouteLogResult"]; } else { eprintln(" - Creating the new case..."); $paramsAux = $params; $paramsAux["executeTriggers"] = 1; $oPluginRegistry = &PMPluginRegistry::getSingleton(); if ($oPluginRegistry->existsTrigger(PM_SCHEDULER_CREATE_CASE_BEFORE)) { $oPluginRegistry->executeTriggers(PM_SCHEDULER_CREATE_CASE_BEFORE, $paramsAux); } $result = $client->__SoapCall("NewCase", array($paramsAux)); if ($oPluginRegistry->existsTrigger (PM_SCHEDULER_CREATE_CASE_AFTER)) { $oPluginRegistry->executeTriggers(PM_SCHEDULER_CREATE_CASE_AFTER, $result); } if ($result->status_code == 0) { eprintln(" OK case #" . $result->caseNumber . " was created!", "green"); $caseId = $result->caseId; $caseNumber = $result->caseNumber; $log[] = $caseNumber . " was created!, ProcessID: " . $row["PRO_UID"]; $paramsLog["WS_CREATE_CASE_STATUS"] = "Case " . $caseNumber . " " . strip_tags($result->message); $paramsLogResult = "SUCCESS"; $params = array("sessionId" => $sessionId, "caseId" => $caseId, "delIndex" => "1"); try { eprintln(" - Routing the case #$caseNumber..."); $result = $client->__SoapCall("RouteCase", array($params)); if ($result->status_code == 0) { $paramsLog["WS_ROUTE_CASE_STATUS"] = strip_tags($result->message); $retMsg = explode("Debug", $paramsLog["WS_ROUTE_CASE_STATUS"]); $retMsg = $retMsg[0]; $paramsRouteLogResult = "SUCCESS"; eprintln(" OK $retMsg", "green"); } else { $paramsLog["WS_ROUTE_CASE_STATUS"] = strip_tags($result->message); $paramsRouteLogResult = "FAILED"; eprintln(" Failed: " . $paramsLog["WS_ROUTE_CASE_STATUS"], "red"); } } catch (Exception $e) { //setExecutionResultMessage("WITH ERRORS", "error"); $paramsLog["WS_ROUTE_CASE_STATUS"] = strip_tags($e->getMessage()); $paramsRouteLogResult = "FAILED"; eprintln(" Failed: " . strip_tags($e->getMessage()), "red"); } } else { $paramsLog["WS_CREATE_CASE_STATUS"] = strip_tags($result->message); $paramsLogResult = "FAILED"; eprintln(" Failed: " . $paramsLog["WS_CREATE_CASE_STATUS"], "red"); } } } else { //Invalid user or bad password eprintln(" " . $result->message, "red"); } if ($paramsLogResult == "SUCCESS" && $paramsRouteLogResult == "SUCCESS") { $paramsLog["RESULT"] = "SUCCESS"; } else { $paramsLog["RESULT"] = "FAILED"; } $newCaseLog = new LogCasesScheduler(); $newCaseLog->saveLogParameters($paramsLog); $newCaseLog->save(); //Update the SCH_TIME_NEXT_RUN field switch ($caseSchedulerOption) { case 1: case 2: case 3: //Daily //Weekly //Monthly if ($caseSchedulerTimeNextRunNew == "") { list($value, $daysPerformTask, $weeks, $startDay, $months) = $this->getVariablesFromRecord($row); $caseSchedulerTimeNextRunNew = $this->updateNextRun($caseSchedulerOption, $value, $caseSchedulerTimeNextRun, $daysPerformTask, $weeks, $startDay, $months); } if ($row["SCH_END_DATE"] . "" != "" && strtotime($row["SCH_END_DATE"]) < strtotime($caseSchedulerTimeNextRunNew)) { $result = $this->update(array( "SCH_UID" => $caseSchedulerUid, "SCH_LAST_STATE" => $row["SCH_STATE"], "SCH_LAST_RUN_TIME" => $caseSchedulerTimeNextRun, "SCH_STATE" => "PROCESSED" )); } else { $this->updateDate($caseSchedulerUid, $caseSchedulerTimeNextRunNew, $caseSchedulerTimeNextRun); } break; case 4: //One time only $result = $this->update(array( "SCH_UID" => $caseSchedulerUid, "SCH_LAST_STATE" => $row["SCH_STATE"], "SCH_LAST_RUN_TIME" => $caseSchedulerTimeNextRun, "SCH_STATE" => "PROCESSED" )); break; case 5: //Every if ($caseSchedulerTimeNextRunNew == "") { $caseSchedulerTimeNextRunNew = date("Y-m-d H:i:s", $timeDate + round(floatval($row["SCH_REPEAT_EVERY"]) * 60 * 60)); } $this->updateDate($caseSchedulerUid, $caseSchedulerTimeNextRunNew, $caseSchedulerTimeNextRun); break; } } } } catch (Exception $e) { throw $e; } }
public function hashPassword($pass, $hashType = '', $includeHashType = false) { if ($hashType == '') { $hashType = Bootstrap::getPasswordHashType(); } G::LoadSystem('inputfilter'); $filter = new InputFilter(); $hashType = $filter->validateInput($hashType); $pass = $filter->validateInput($pass); eval("\$var = hash('" . $hashType . "', '" . $pass . "');"); if ($includeHashType) { $var = $hashType . ':' . $var; } return $var; }
/** * Set value in WE_DATA * * @param string $webEntryUid Unique id of Web Entry * * return void */ public function setWeData($webEntryUid) { try { //Verify data $this->throwExceptionIfNotExistsWebEntry($webEntryUid, $this->arrayFieldNameForException["webEntryUid"]); //Set variables $arrayWebEntryData = $this->getWebEntry($webEntryUid, true); $processUid = $arrayWebEntryData["PRO_UID"]; $taskUid = $arrayWebEntryData["TAS_UID"]; $dynaFormUid = $arrayWebEntryData["DYN_UID"]; $webEntryMethod = $arrayWebEntryData["WE_METHOD"]; $webEntryInputDocumentAccess = $arrayWebEntryData["WE_INPUT_DOCUMENT_ACCESS"]; $webEntryData = ""; $wsRoundRobin = 0; //0, 1 //0 - Cyclical Assignment $pathDataPublicProcess = PATH_DATA_PUBLIC . $processUid; //Delete previous files if (trim($arrayWebEntryData["WE_DATA"]) != "") { $fileName = str_replace(".php", "", trim($arrayWebEntryData["WE_DATA"])); $file = $pathDataPublicProcess . PATH_SEP . $fileName . ".php"; if (is_file($file) && file_exists($file)) { unlink($file); unlink($pathDataPublicProcess . PATH_SEP . $fileName . "Post.php"); } } //Create files \G::mk_dir($pathDataPublicProcess, 0777); $http = \G::is_https() ? "https://" : "http://"; switch ($webEntryMethod) { case "WS": require_once PATH_RBAC . "model" . PATH_SEP . "RbacUsers.php"; $user = new \RbacUsers(); $arrayUserData = $user->load($arrayWebEntryData["USR_UID"]); $usrUsername = $arrayUserData["USR_USERNAME"]; $usrPassword = $arrayUserData["USR_PASSWORD"]; $dynaForm = new \Dynaform(); $arrayDynaFormData = $dynaForm->Load($arrayWebEntryData["DYN_UID"]); //Creating sys.info; $sitePublicPath = ""; if (file_exists($sitePublicPath . "")) { } //Creating the first file $weTitle = $this->sanitizeFilename($arrayWebEntryData["WE_TITLE"]); $fileName = $weTitle; $fileContent = "<?php\n"; $fileContent .= "global \$_DBArray;\n"; $fileContent .= "if (!isset(\$_DBArray)) {\n"; $fileContent .= " \$_DBArray = array();\n"; $fileContent .= "}\n"; $fileContent .= "\$_SESSION[\"PROCESS\"] = \"" . $processUid . "\";\n"; $fileContent .= "\$_SESSION[\"CURRENT_DYN_UID\"] = \"" . $dynaFormUid . "\";\n"; $fileContent .= "\$G_PUBLISH = new Publisher();\n"; $fileContent .= "G::LoadClass(\"pmDynaform\");\n"; $fileContent .= "\$a = new pmDynaform(array(\"CURRENT_DYNAFORM\" => \"" . $arrayWebEntryData["DYN_UID"] . "\"));\n"; $fileContent .= "if (\$a->isResponsive()) {"; $fileContent .= " \$a->printWebEntry(\"" . $fileName . "Post.php\");"; $fileContent .= "} else {"; $fileContent .= " \$G_PUBLISH->AddContent(\"dynaform\", \"xmlform\", \"" . $processUid . PATH_SEP . $dynaFormUid . "\", \"\", array(), \"" . $fileName . "Post.php\");\n"; $fileContent .= " G::RenderPage(\"publish\", \"blank\");"; $fileContent .= "}"; file_put_contents($pathDataPublicProcess . PATH_SEP . $fileName . ".php", $fileContent); //Creating the second file, the post file who receive the post form. $pluginTpl = PATH_TPL . "processes" . PATH_SEP . "webentryPost.tpl"; $template = new \TemplatePower($pluginTpl); $template->prepare(); $template->assign("wsdlUrl", $http . $_SERVER["HTTP_HOST"] . "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/services/wsdl2"); $template->assign("wsUploadUrl", $http . $_SERVER["HTTP_HOST"] . "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/services/upload"); $template->assign("processUid", $processUid); $template->assign("dynaformUid", $dynaFormUid); $template->assign("taskUid", $taskUid); $template->assign("wsUser", $usrUsername); $template->assign("wsPass", \Bootstrap::getPasswordHashType() . ':' . $usrPassword); $template->assign("wsRoundRobin", $wsRoundRobin); if ($webEntryInputDocumentAccess == 0) { //Restricted to process permissions $template->assign("USR_VAR", "\$cInfo = ws_getCaseInfo(\$caseId);\n\t \$USR_UID = \$cInfo->currentUsers->userId;"); } else { //No Restriction $template->assign("USR_VAR", "\$USR_UID = -1;"); } $template->assign("dynaform", $arrayDynaFormData["DYN_TITLE"]); $template->assign("timestamp", date("l jS \\of F Y h:i:s A")); $template->assign("ws", SYS_SYS); $template->assign("version", \System::getVersion()); $fileName = $pathDataPublicProcess . PATH_SEP . $weTitle . "Post.php"; file_put_contents($fileName, $template->getOutputContent()); //Creating the third file, only if this wsClient.php file doesn't exist. $fileName = $pathDataPublicProcess . PATH_SEP . "wsClient.php"; $pluginTpl = PATH_CORE . "templates" . PATH_SEP . "processes" . PATH_SEP . "wsClient.php"; if (file_exists($fileName)) { if (filesize($fileName) != filesize($pluginTpl)) { copy($fileName, $pathDataPublicProcess . PATH_SEP . "wsClient.php.bak"); unlink($fileName); $template = new \TemplatePower($pluginTpl); $template->prepare(); file_put_contents($fileName, $template->getOutputContent()); } } else { $template = new \TemplatePower($pluginTpl); $template->prepare(); file_put_contents($fileName, $template->getOutputContent()); } //Event $task = new \Task(); $arrayTaskData = $task->load($arrayWebEntryData["TAS_UID"]); $weEventUid = $task->getStartingEvent(); if ($weEventUid != "") { $event = new \Event(); $arrayEventData = array(); $arrayEventData["EVN_UID"] = $weEventUid; $arrayEventData["EVN_RELATED_TO"] = "MULTIPLE"; $arrayEventData["EVN_ACTION"] = $dynaFormUid; $arrayEventData["EVN_CONDITIONS"] = $usrUsername; $result = $event->update($arrayEventData); } //WE_DATA $webEntryData = $weTitle . ".php"; break; case "HTML": global $G_FORM; if (!class_exists("Smarty")) { $loader = \Maveriks\Util\ClassLoader::getInstance(); $loader->addClass("Smarty", PATH_THIRDPARTY . "smarty" . PATH_SEP . "libs" . PATH_SEP . "Smarty.class.php"); } $G_FORM = new \Form($processUid . "/" . $dynaFormUid, PATH_DYNAFORM, SYS_LANG, false); $G_FORM->action = $http . $_SERVER["HTTP_HOST"] . "/sys" . SYS_SYS . "/" . SYS_LANG . "/" . SYS_SKIN . "/services/cases_StartExternal.php"; $scriptCode = ""; $scriptCode = $G_FORM->render(PATH_TPL . "xmlform" . ".html", $scriptCode); $scriptCode = str_replace("/controls/", $http . $_SERVER["HTTP_HOST"] . "/controls/", $scriptCode); $scriptCode = str_replace("/js/maborak/core/images/", $http . $_SERVER["HTTP_HOST"] . "/js/maborak/core/images/", $scriptCode); //Render the template $pluginTpl = PATH_TPL . "processes" . PATH_SEP . "webentry.tpl"; $template = new \TemplatePower($pluginTpl); $template->prepare(); $step = new \Step(); $sUidGrids = $step->lookingforUidGrids($processUid, $dynaFormUid); $template->assign("URL_MABORAK_JS", \G::browserCacheFilesUrl("/js/maborak/core/maborak.js")); $template->assign("URL_TRANSLATION_ENV_JS", \G::browserCacheFilesUrl("/jscore/labels/" . SYS_LANG . ".js")); $template->assign("siteUrl", $http . $_SERVER["HTTP_HOST"]); $template->assign("sysSys", SYS_SYS); $template->assign("sysLang", SYS_LANG); $template->assign("sysSkin", SYS_SKIN); $template->assign("processUid", $processUid); $template->assign("dynaformUid", $dynaFormUid); $template->assign("taskUid", $taskUid); $template->assign("dynFileName", $processUid . "/" . $dynaFormUid); $template->assign("formId", $G_FORM->id); $template->assign("scriptCode", $scriptCode); if (sizeof($sUidGrids) > 0) { foreach ($sUidGrids as $k => $v) { $template->newBlock("grid_uids"); $template->assign("siteUrl", $http . $_SERVER["HTTP_HOST"]); $template->assign("gridFileName", $processUid . "/" . $v); } } //WE_DATA $html = str_replace("</body>", "</form></body>", str_replace("</form>", "", $template->getOutputContent())); $webEntryData = $html; break; } //Update //Update where $criteriaWhere = new \Criteria("workflow"); $criteriaWhere->add(\WebEntryPeer::WE_UID, $webEntryUid); //Update set $criteriaSet = new \Criteria("workflow"); $criteriaSet->add(\WebEntryPeer::WE_DATA, $webEntryData); \BasePeer::doUpdate($criteriaWhere, $criteriaSet, \Propel::getConnection("workflow")); } catch (\Exception $e) { throw $e; } }
public function caseSchedulerCron ($date, &$log = array(), $cron = 0) { G::LoadClass( 'dates' ); require_once ('classes/model/LogCasesScheduler.php'); $oDates = new dates(); $nTime = strtotime( $date ); $dCurrentDate = date( 'Y-m-d', $nTime ) . ' 00:00:00'; $dNextDay = date( 'Y-m-d', strtotime( "$dCurrentDate" ) ) . ' 23:59:59'; $oCriteria = $this->getAllCriteria(); $oCriteria->addAnd( CaseSchedulerPeer::SCH_STATE, 'INACTIVE', Criteria::NOT_EQUAL ); $oCriteria->addAnd( CaseSchedulerPeer::SCH_STATE, 'PROCESSED', Criteria::NOT_EQUAL ); $oCriteria->add( $oCriteria->getNewCriterion(CaseSchedulerPeer::SCH_TIME_NEXT_RUN, $dCurrentDate, Criteria::GREATER_EQUAL )-> addAnd( $oCriteria->getNewCriterion( CaseSchedulerPeer::SCH_TIME_NEXT_RUN, $dNextDay, Criteria::LESS_EQUAL ) )-> addOr( $oCriteria->getNewCriterion( CaseSchedulerPeer::SCH_OPTION, '5', Criteria::GREATER_EQUAL ) ) ); $oCriteria->add( CaseSchedulerPeer::SCH_END_DATE, null, Criteria::EQUAL ); $oCriteria->addOr( CaseSchedulerPeer::SCH_END_DATE, $dCurrentDate, Criteria::GREATER_EQUAL ); $oDataset = CaseSchedulerPeer::doSelectRS( $oCriteria ); $oDataset->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $sValue = ''; $sActualTime = ''; $sDaysPerformTask = ''; $sWeeks = ''; $sStartDay = ''; $sMonths = ''; while ($oDataset->next()) { $aRow = $oDataset->getRow(); if ($cron == 1) { $arrayCron = unserialize( trim( @file_get_contents( PATH_DATA . "cron" ) ) ); $arrayCron["processcTimeStart"] = time(); @file_put_contents( PATH_DATA . "cron", serialize( $arrayCron ) ); } $sSchedulerUid = $aRow['SCH_UID']; $sOption = $aRow['SCH_OPTION']; switch ($sOption) { case '1': $sDaysPerformTask = $aRow['SCH_DAYS_PERFORM_TASK']; $aDaysPerformTask = explode( '|', $sDaysPerformTask ); $sValue = $aDaysPerformTask[0]; if ($sValue != 1) { $sDaysPerformTask = $aDaysPerformTask[1]; } break; case '2': $sDaysPerformTask = $aRow['SCH_EVERY_DAYS']; $sWeeks = $aRow['SCH_WEEK_DAYS']; break; case '3': $sStartDay = $aRow['SCH_START_DAY']; $sMonths = $aRow['SCH_MONTHS']; $aStartDay = explode( '|', $sStartDay ); $sValue = $aStartDay[0]; break; case '4': $aRow['SCH_STATE'] = 'PROCESSED'; break; case '5': break; } $sActualTime = $aRow['SCH_TIME_NEXT_RUN']; $sActualDataHour = (int)(date("H", strtotime($aRow["SCH_TIME_NEXT_RUN"]))); $sActualDataMinutes = (int)(date("i", strtotime($aRow["SCH_TIME_NEXT_RUN"]))); $dActualSysHour = (int)(date("H", $nTime)); $dActualSysMinutes = (int)(date("i", $nTime)); $sActualDataTime = strtotime( $aRow['SCH_TIME_NEXT_RUN'] ); $sActualSysTime = strtotime( $nTime ); if ($sActualDataHour == $dActualSysHour && $sActualDataMinutes <= $dActualSysMinutes) { //if ($sActualDataHour == $dActualSysHour && $sActualDataMinutes == $dActualSysMinutes) { $port = ""; if (isset($_SERVER["SERVER_PORT"])) { $port = ($_SERVER["SERVER_PORT"] . "" != "80")? ":" . $_SERVER["SERVER_PORT"] : ""; } else { if (defined("SERVER_PORT")) { $port = (SERVER_PORT . "" != "80")? ":" . SERVER_PORT : ""; } } $defaultEndpoint = "http://" . SERVER_NAME . $port . "/sys" . SYS_SYS . "/" . SYS_LANG . "/classic/services/wsdl2"; println( " - Connecting webservice: $defaultEndpoint" ); $user = $aRow["SCH_DEL_USER_NAME"]; $pass = $aRow["SCH_DEL_USER_PASS"]; $processId = $aRow["PRO_UID"]; $taskId = $aRow["TAS_UID"]; $client = new SoapClient( $defaultEndpoint ); $params = array ('userid' => $user,'password' => Bootstrap::getPasswordHashType() . ':' . $pass); $result = $client->__SoapCall( 'login', array ($params) ); eprint( " - Logging as user $user............." ); if ($result->status_code == 0) { eprintln( "OK+", 'green' ); $sessionId = $result->message; $newCaseLog = new LogCasesScheduler(); $newRouteLog = new LogCasesScheduler(); $variables = Array (); $params = array ('sessionId' => $sessionId,'processId' => $processId,'taskId' => $taskId,'variables' => $variables ); $paramsLog = array ('PRO_UID' => $processId,'TAS_UID' => $taskId,'SCH_UID' => $sSchedulerUid,'USR_NAME' => $user,'RESULT' => '','EXEC_DATE' => date( 'Y-m-d' ),'EXEC_HOUR' => date( 'H:i:s' ),'WS_CREATE_CASE_STATUS' => '','WS_ROUTE_CASE_STATUS' => '' ); //If this Job was was registered to be performed by a plugin if ((isset( $aRow['CASE_SH_PLUGIN_UID'] )) && ($aRow['CASE_SH_PLUGIN_UID'] != "")) { //Check if the plugin is active $pluginParts = explode( "--", $aRow['CASE_SH_PLUGIN_UID'] ); if (count( $pluginParts ) == 2) { //***************** Plugins ************************** G::LoadClass( 'plugin' ); //here we are loading all plugins registered //the singleton has a list of enabled plugins $sSerializedFile = PATH_DATA_SITE . 'plugin.singleton'; $oPluginRegistry = & PMPluginRegistry::getSingleton(); if (file_exists( $sSerializedFile )) { $oPluginRegistry->unSerializeInstance( file_get_contents( $sSerializedFile ) ); } $oPluginRegistry = & PMPluginRegistry::getSingleton(); $activePluginsForCaseScheduler = $oPluginRegistry->getCaseSchedulerPlugins(); foreach ($activePluginsForCaseScheduler as $key => $caseSchedulerPlugin) { if ((isset( $caseSchedulerPlugin->sNamespace )) && ($caseSchedulerPlugin->sNamespace == $pluginParts[0]) && (isset( $caseSchedulerPlugin->sActionId )) && ($caseSchedulerPlugin->sActionId == $pluginParts[1])) { $caseSchedulerSelected = $caseSchedulerPlugin; } } } } //If there is a trigger that is registered to do this then transfer control if ((isset( $caseSchedulerSelected )) && (is_object( $caseSchedulerSelected ))) { eprintln( " - Transfering control to a Plugin: " . $caseSchedulerSelected->sNamespace . "/" . $caseSchedulerSelected->sActionId, 'green' ); $oData['OBJ_SOAP'] = $client; $oData['SCH_UID'] = $aRow['SCH_UID']; $oData['params'] = $params; $oData['sessionId'] = $sessionId; $oData['userId'] = $user; $paramsLogResultFromPlugin = $oPluginRegistry->executeMethod( $caseSchedulerSelected->sNamespace, $caseSchedulerSelected->sActionExecute, $oData ); $paramsLog['WS_CREATE_CASE_STATUS'] = $paramsLogResultFromPlugin['WS_CREATE_CASE_STATUS']; $paramsLog['WS_ROUTE_CASE_STATUS'] = $paramsLogResultFromPlugin['WS_ROUTE_CASE_STATUS']; $paramsLogResult = $paramsLogResultFromPlugin['paramsLogResult']; $paramsRouteLogResult = $paramsLogResultFromPlugin['paramsRouteLogResult']; } else { eprint( " - Creating the new case............." ); $paramsAux = $params; $paramsAux["executeTriggers"] = 1; $oPluginRegistry = &PMPluginRegistry::getSingleton(); if ($oPluginRegistry->existsTrigger ( PM_SCHEDULER_CREATE_CASE_BEFORE )) { $oPluginRegistry->executeTriggers(PM_SCHEDULER_CREATE_CASE_BEFORE, $paramsAux); } $result = $client->__SoapCall("NewCase", array($paramsAux)); if ($oPluginRegistry->existsTrigger ( PM_SCHEDULER_CREATE_CASE_AFTER )) { $oPluginRegistry->executeTriggers(PM_SCHEDULER_CREATE_CASE_AFTER, $result); } if ($result->status_code == 0) { eprintln( "OK+ CASE #{$result->caseNumber} was created!", 'green' ); $caseId = $result->caseId; $caseNumber = $result->caseNumber; $log[] = $caseNumber . ' was created!, ProcessID: ' . $aRow['PRO_UID']; $paramsLog['WS_CREATE_CASE_STATUS'] = "Case " . $caseNumber . " " . strip_tags( $result->message ); $paramsLogResult = 'SUCCESS'; $params = array ('sessionId' => $sessionId,'caseId' => $caseId,'delIndex' => "1"); try { $result = $client->__SoapCall( 'RouteCase', array ($params) ); eprint(" - Routing the case #$caseNumber.............."); if ($result->status_code == 0) { $paramsLog['WS_ROUTE_CASE_STATUS'] = strip_tags( $result->message ); $retMsg = explode( "Debug", $paramsLog['WS_ROUTE_CASE_STATUS'] ); $retMsg = $retMsg[0]; eprintln( "OK+ $retMsg", 'green' ); $paramsRouteLogResult = 'SUCCESS'; } else { $paramsLog['WS_ROUTE_CASE_STATUS'] = strip_tags( $result->message ); eprintln( "FAILED-> {$paramsLog ['WS_ROUTE_CASE_STATUS']}", 'red' ); $paramsRouteLogResult = 'FAILED'; } } catch (Exception $oError) { setExecutionResultMessage(' WITH ERRORS', 'error'); $paramsLog['WS_ROUTE_CASE_STATUS'] = strip_tags( $oError->getMessage()); eprintln(" '-".strip_tags($oError->getMessage()), 'red'); $paramsRouteLogResult = 'FAILED'; } } else { $paramsLog['WS_CREATE_CASE_STATUS'] = strip_tags( $result->message ); eprintln( "FAILED->{$paramsLog ['WS_CREATE_CASE_STATUS']}", 'red' ); $paramsLogResult = 'FAILED'; } } } else { //Invalid user or bad password eprintln( $result->message, 'red' ); } if ($paramsLogResult == 'SUCCESS' && $paramsRouteLogResult == 'SUCCESS') { $paramsLog['RESULT'] = 'SUCCESS'; } else { $paramsLog['RESULT'] = 'FAILED'; } $newCaseLog->saveLogParameters( $paramsLog ); $newCaseLog->save(); if ($sOption != '4' && $sOption != '5') { $nSchLastRunTime = $sActualTime; $dEstimatedDate = $this->updateNextRun( $sOption, $sValue, $sActualTime, $sDaysPerformTask, $sWeeks, $sStartDay, $sMonths ); if ($aRow['SCH_END_DATE'] != '') { if (date( "Y-m-d", strtotime( $dEstimatedDate ) ) > date( "Y-m-d", strtotime( $aRow['SCH_END_DATE'] ) )) { $Fields = $this->Load( $sSchedulerUid ); $Fields['SCH_LAST_STATE'] = $aRow['SCH_STATE']; $Fields['SCH_STATE'] = 'PROCESSED'; $this->Update( $Fields ); } } $nSchTimeNextRun = $dEstimatedDate; $this->updateDate( $sSchedulerUid, $nSchTimeNextRun, $nSchLastRunTime ); } elseif ($sOption != '5') { $Fields = $this->Load( $sSchedulerUid ); $Fields['SCH_LAST_STATE'] = $aRow['SCH_STATE']; $Fields['SCH_LAST_RUN_TIME'] = $Fields['SCH_TIME_NEXT_RUN']; $Fields['SCH_STATE'] = 'PROCESSED'; $this->Update( $Fields ); } else { $nSchLastRunTime = $sActualTime; $Fields = $this->Load( $sSchedulerUid ); $Fields['SCH_LAST_RUN_TIME'] = $Fields['SCH_TIME_NEXT_RUN']; //$nSchTimeNextRun = strtotime( $Fields['SCH_TIME_NEXT_RUN'] ); $nSchTimeNextRun = $nTime; $nextRun = $Fields['SCH_REPEAT_EVERY'] * 60 * 60; $nSchTimeNextRun += $nextRun; $nSchTimeNextRun = date( "Y-m-d H:i", $nSchTimeNextRun ); $this->updateDate( $sSchedulerUid, $nSchTimeNextRun, $nSchLastRunTime ); } } } }