SchTimeNextRun === null) $this->SchTimeNextRun = time(); return $this->SchTimeNextRun; } public function setSchTimeNextRun($value) { $this->SchTimeNextRun = $value; } public function getSchLastRunTime(){ if($this->SchTimeNextRun === null) $this->SchTimeNextRun = time(); return $this->SchLastRunTime; } public function setSchLastRunTime($value){ $this->SchLastRunTime = $value; } */ public function load($SchUid) { try { $oRow = CaseSchedulerPeer::retrieveByPK ( $SchUid ); if (! is_null ( $oRow )) { $aFields = $oRow->toArray ( BasePeer::TYPE_FIELDNAME ); $this->fromArray ( $aFields, BasePeer::TYPE_FIELDNAME ); $this->setNew ( false ); return $aFields; } else { throw (new Exception ( "The row '" . $SchUid . "' in table CASE_SCHEDULER doesn't exist!" )); } } catch ( Exception $oError ) { throw ($oError); } } function create($aData) { $con = Propel::getConnection ( CaseSchedulerPeer::DATABASE_NAME ); try { $this->fromArray ( $aData, BasePeer::TYPE_FIELDNAME ); if ($this->validate ()) { $result = $this->save (); } else { $e = new Exception ( "Failed Validation in class " . get_class ( $this ) . "." ); $e->aValidationFailures = $this->getValidationFailures (); throw ($e); } $con->commit (); return $result; } catch ( Exception $e ) { $con->rollback (); throw ($e); } } public function update($fields) { $con = Propel::getConnection ( CaseSchedulerPeer::DATABASE_NAME ); try { $con->begin (); $this->load ( $fields ['SCH_UID'] ); $this->fromArray ( $fields, BasePeer::TYPE_FIELDNAME ); if ($this->validate ()) { $result = $this->save (); $con->commit (); return $result; } else { $con->rollback (); throw (new Exception ( "Failed Validation in class " . get_class ( $this ) . "." )); } } catch ( Exception $e ) { $con->rollback (); throw ($e); } } function remove($SchUid) { $con = Propel::getConnection ( CaseSchedulerPeer::DATABASE_NAME ); try { $oCaseScheduler = CaseSchedulerPeer::retrieveByPK($SchUid); if(!is_null($oCaseScheduler)) { $iResult = $oCaseScheduler->delete(); $con->commit(); return $iResult; } else { throw(new Exception('This row doesn\'t exist!')); } /* $con->begin(); $this->setSchUid ( $SchUid ); $result = $this->delete(); $con->commit(); return $result; */ } catch ( Exception $e ) { $con->rollback(); throw($e); } } /* * change Status of any Process * @param string $sSchedulerUid * @return boolean */ function changeStatus($sSchedulerUid = '') { $Fields = $this->Load ( $sSchedulerUid ); $Fields ['SCH_LAST_STATE'] = $Fields ['SCH_STATE']; if ($Fields ['SCH_STATE'] == 'ACTIVE') { $Fields ['SCH_STATE'] = 'INACTIVE'; } else { $Fields ['SCH_STATE'] = 'ACTIVE'; } $this->Update ( $Fields ); } // SELECT A.SCH_UID, A.SCH_NAME, A.PRO_UID, B.CON_VALUE AS PROCESS, // A.TAS_UID, B.CON_VALUE AS TASK, A.SCH_TIME_NEXT_RUN, A.SCH_LAST_RUN_TIME, A.SCH_STATE, A.SCH_LAST_STATE, // A.USR_UID, A.SCH_OPTION // SCH_START_TIME, SCH_START_DATE, SCH_DAYS_PERFORM_TASK, SCH_EVERY_DAYS, SCH_WEEK_DAYS // SCH_START_DAY, SCH_MONTHS, SCH_END_DATE, SCH_REPEAT_EVERY, SCH_REPEAT_UNTIL, SCH_REPEAT_STOP_IF_RUNNING // FROM CASE_SCHEDULER A LEFT JOIN CONTENT B ON A.PRO_UID= B.CON_ID AND B.CON_CATEGORY='PRO_TITLE' AND B.CON_LANG='en' // LEFT JOIN CONTENT C ON A.TAS_UID= C.CON_ID AND C.CON_CATEGORY='TAS_TITLE' AND C.CON_LANG='en' // function getAllCriteria() { $c = new Criteria ( 'workflow' ); $c->clearSelectColumns (); $c->addSelectColumn ( CaseSchedulerPeer::SCH_UID ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_NAME ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_DEL_USER_NAME ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_DEL_USER_PASS ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_DEL_USER_UID ); $c->addSelectColumn ( CaseSchedulerPeer::PRO_UID ); $c->addSelectColumn ( CaseSchedulerPeer::TAS_UID ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_TIME_NEXT_RUN ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_LAST_RUN_TIME ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_STATE ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_LAST_STATE ); $c->addSelectColumn ( CaseSchedulerPeer::USR_UID ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_OPTION ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_START_TIME ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_START_DATE ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_DAYS_PERFORM_TASK ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_EVERY_DAYS ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_WEEK_DAYS ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_START_DAY ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_MONTHS ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_END_DATE ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_REPEAT_EVERY ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_REPEAT_UNTIL ); $c->addSelectColumn ( CaseSchedulerPeer::SCH_REPEAT_STOP_IF_RUNNING ); $c->addSelectColumn ( CaseSchedulerPeer::CASE_SH_PLUGIN_UID ); return $c; } function getAll() { $oCriteria = $this->getAllCriteria (); $oDataset = CaseSchedulerPeer::doSelectRS ( $oCriteria ); $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); $oDataset->next (); $aRows = Array (); while ( $aRow = $oDataset->getRow () ) { $aRows [] = $aRow; $oDataset->next (); } foreach ( $aRows as $k => $aRow ) { $oProcess = new Process (); $aProcessRow = $oProcess->load ( $aRow ['PRO_UID'] ); $oTask = new Task (); $aTaskRow = $oTask->load ( $aRow ['TAS_UID'] ); $aRows [$k] = array_merge ( $aRow, $aProcessRow, $aTaskRow ); } return $aRows; } /** * function getAllByProcess * @author gustavo cruz * @desc Get All Scheduled Tasks for some process. * @param $pro_uid process uid * @return $aRows a result set array */ function getAllByProcess($pro_uid) { $oCriteria = $this->getAllCriteria (); $oCriteria->add ( CaseSchedulerPeer::PRO_UID, $pro_uid ); $oDataset = CaseSchedulerPeer::doSelectRS ( $oCriteria ); $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); $oDataset->next (); $aRows = Array (); while ( $aRow = $oDataset->getRow () ) { $aRows [] = $aRow; $oDataset->next (); } foreach ( $aRows as $k => $aRow ) { $oProcess = new Process (); $aProcessRow = $oProcess->load ( $aRow ['PRO_UID'] ); $oTask = new Task (); $aTaskRow = $oTask->load ( $aRow ['TAS_UID'] ); $aRows [$k] = array_merge ( $aRow, $aProcessRow, $aTaskRow ); } return $aRows; } function getProcessDescription() { $c = new Criteria ( 'workflow' ); $c->clearSelectColumns (); $c->addSelectColumn ( ProcessPeer::PRO_UID ); $oDataset = ProcessPeer::doSelectRS ( $c ); $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); $oDataset->next (); $aRows = Array (); while ( $aRow = $oDataset->getRow () ) { $aRows [] = $aRow; $oDataset->next (); } foreach ( $aRows as $k => $aRow ) { $oProcess = new Process (); $aProcessRow = $oProcess->load ( $aRow ['PRO_UID'] ); $aRows [$k] = array_merge ( $aRow, array ( 'PRO_TITLE' => $aProcessRow ['PRO_TITLE'] ) ); } return $aRows; } function getTaskDescription() { $c = new Criteria ( 'workflow' ); $c->clearSelectColumns (); $c->addSelectColumn ( TaskPeer::TAS_UID ); $oDataset = TaskPeer::doSelectRS ( $c ); $oDataset->setFetchmode ( ResultSet::FETCHMODE_ASSOC ); $oDataset->next (); $aRows = Array (); while ( $aRow = $oDataset->getRow () ) { $aRows [] = $aRow; $oDataset->next (); } foreach ( $aRows as $k => $aRow ) { $oTask = new Task (); $aTaskRow = $oTask->load ( $aRow ['TAS_UID'] ); $aRows [$k] = array_merge ( $aRow, array ( 'TAS_TITLE' => $aTaskRow ['TAS_TITLE'] ), array ( 'PRO_UID' => $aTaskRow ['PRO_UID'] ) ); } // g::pr($aRows); die; return $aRows; } function caseSchedulerCron($date) { 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 ( CaseSchedulerPeer::SCH_TIME_NEXT_RUN, $dCurrentDate, Criteria::GREATER_EQUAL ); $oCriteria->addAnd ( CaseSchedulerPeer::SCH_TIME_NEXT_RUN, $dNextDay, Criteria::LESS_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 ); $oDataset->next (); $sValue = ''; $sActualTime = ''; $sDaysPerformTask = ''; $sWeeks = ''; $sStartDay = ''; $sMonths = ''; while ( $aRow = $oDataset->getRow () ) { $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; } $sActualTime = $aRow ['SCH_TIME_NEXT_RUN']; $sActualDataHour = date ( 'H', strtotime ( $aRow ['SCH_TIME_NEXT_RUN'] ) ); $sActualDataMinutes = date ( 'i', strtotime ( $aRow ['SCH_TIME_NEXT_RUN'] ) ); $dActualSysHour = date ( 'H', $nTime ); $dActualSysMinutes = date ( 'i', $nTime ); $sActualDataTime = strtotime ( $aRow ['SCH_TIME_NEXT_RUN'] ); $sActualSysTime = strtotime ( $nTime ); // note added consider the posibility to encapsulate some in functionality in a class method or some funtions if ($sActualDataHour < $dActualSysHour) { $_PORT = (SERVER_PORT != '80') ? ':' . SERVER_PORT : ''; $defaultEndpoint = 'http://' . SERVER_NAME . $_PORT . '/sys' . SYS_SYS . '/en/green/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' => 'md5:' . $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' => '' ); $sw_transfer_control_plugin=false;//This SW will be true only if a plugin is allowed to continue the action //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])){ $sw_transfer_control_plugin=true; $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............."); $result = $client->__SoapCall ( 'NewCase', array ( $params ) ); if ($result->status_code == 0) { eprintln("OK+ CASE #{$result->caseNumber} was created!", 'green'); $caseId = $result->caseId; $caseNumber = $result->caseNumber; $paramsLog ['WS_CREATE_CASE_STATUS'] = "Case " . $caseNumber . " " . strip_tags ( $result->message ); $paramsLogResult = 'SUCCESS'; $params = array ( 'sessionId' => $sessionId, 'caseId' => $caseId, 'delIndex' => "1" ); eprint(" - 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]; 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'; } } else { $paramsLog ['WS_CREATE_CASE_STATUS'] = strip_tags ( $result->message ); $paramsLogResult = 'FAILED'; } } } else { eprintln($result->message, 'red'); // invalid user or bad password } if ($paramsLogResult == 'SUCCESS' && $paramsRouteLogResult == 'SUCCESS') { $paramsLog ['RESULT'] = 'SUCCESS'; } else { $paramsLog ['RESULT'] = 'FAILED'; } $newCaseLog->saveLogParameters ( $paramsLog ); $newCaseLog->save (); if ($sOption != '4') { $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 ); } else { $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 if ($sActualDataHour == $dActualSysHour && $sActualDataMinutes <= $dActualSysMinutes) { $_PORT = (isset($_SERVER ['SERVER_PORT']) && $_SERVER ['SERVER_PORT'] != '80') ? ':' . $_SERVER ['SERVER_PORT'] : ''; //$defaultEndpoint = 'http://' . $_SERVER ['SERVER_NAME'] . ':' . $_PORT . '/sys' . SYS_SYS . '/en/green/services/wsdl2'; $defaultEndpoint = 'http://' . SERVER_NAME . $_PORT . '/sys' . SYS_SYS . '/en/green/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' => 'md5:' . $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' => '' ); $result = $client->__SoapCall ( 'NewCase', array ( $params ) ); eprint(" - Creating the new case............."); if ($result->status_code == 0) { eprintln("OK+ CASE #{$result->caseNumber} was created!", 'green'); $caseId = $result->caseId; $caseNumber = $result->caseNumber; $paramsLog ['WS_CREATE_CASE_STATUS'] = "Case " . $caseNumber . " " . strip_tags ( $result->message ); $paramsLogResult = 'SUCCESS'; $params = array ( 'sessionId' => $sessionId, 'caseId' => $caseId, 'delIndex' => "1" ); $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 { eprintln("FAILED-> {$paramsLog ['WS_ROUTE_CASE_STATUS']}", 'red'); $paramsLog ['WS_ROUTE_CASE_STATUS'] = strip_tags ( $result->message ); $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') { $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 ); } else { $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 ); } } $oDataset->next (); } } function updateDate($sSchedulerUid = '', $sSchTimeNextRun = '', $sSchLastRunTime = '') { $Fields = $this->Load ( $sSchedulerUid ); $Fields ['SCH_TIME_NEXT_RUN'] = strtotime ( $sSchTimeNextRun ); $Fields ['SCH_LAST_RUN_TIME'] = strtotime ( $sSchLastRunTime ); $this->Update ( $Fields ); } function updateNextRun($sOption, $sValue = '', $sActualTime = '', $sDaysPerformTask = '', $sWeeks = '', $sStartDay = '', $sMonths = '', $currentDate = '') { $nActualDate = $currentDate . " " . $sActualTime; // date("Y-m-d H:i:s", $sActualTime); // date("Y-m-d H:i:s", $sActualTime); $dEstimatedDate = ''; switch ($sOption) { case '1' : switch ($sValue) { case '1' : $dEstimatedDate = date ( 'Y-m-d H:i:s', strtotime ( "$nActualDate +1 day" ) ); break; case '2' : $nDayOfTheWeek = date ( 'w', strtotime ( $sActualTime ) ); $nDayOfTheWeek = ($nDayOfTheWeek == 0) ? 7 : $nDayOfTheWeek; if ($nDayOfTheWeek >= 5) $dEstimatedDate = date ( 'Y-m-d H:i:s', strtotime ( "$nActualDate +3 day" ) ); else $dEstimatedDate = date ( 'Y-m-d H:i:s', strtotime ( "$nActualDate +1 day" ) ); break; case '3' : $dEstimatedDate = date ( 'Y-m-d H:i:s', strtotime ( "$nActualDate + " . $sDaysPerformTask . " day" ) ); break; } break; case '2' : if (strlen ( $sWeeks ) > 0) { //die($sActualTime); $nDayOfTheWeek = date ( 'w', strtotime ( $sActualTime ) ); // $nDayOfTheWeek = 1; // echo "*".$nDayOfTheWeek."*"; $aWeeks = explode ( '|', $sWeeks ); $nFirstDay = $aWeeks [0]; $aDaysWeek = array ( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ); $nFirstDay = $nFirstDay - 1; // echo "¨¨".$nFirstDay."¨¨"; $nDayOfTheWeek = ($nDayOfTheWeek == 0) ? 7 : $nDayOfTheWeek; // echo $nDayOfTheWeek; $nSW = 0; $nNextDay = 0; foreach ( $aWeeks as $value ) { if ($value > $nDayOfTheWeek) { $nNextDay = $value - 1; $nSW = 1; break; } } //die; if ($nSW == 1) { $dEstimatedDate = date ( 'Y-m-d', strtotime ( "$nActualDate next " . $aDaysWeek [$nNextDay] ) ) . ' ' . date ( 'H:i:s', strtotime ( $sActualTime ) ); //print_r($dEstimatedDate); // die("03"); } else { $nEveryDays = $sDaysPerformTask; // $nEveryDays = '1'; if ($nFirstDay >= $nDayOfTheWeek || $nEveryDays == 1) $sTypeOperation = "next"; else $sTypeOperation = "last"; if ($nEveryDays == 1) { // echo "**** $nActualDate *" . $sTypeOperation . "* *" . $aDaysWeek[$nFirstDay] . '*****' . date('H:i:s', strtotime($sActualTime)). "**"; $dEstimatedDate = date ( 'Y-m-d', strtotime ( "$nActualDate " . $sTypeOperation . " " . $aDaysWeek [$nFirstDay] ) ) . ' ' . date ( 'H:i:s', strtotime ( $sActualTime ) ); // echo "(date)*".$dEstimatedDate."*"; // die("01"); } else { $nEveryDays = 1; // $nActualDate = date('Y-m-d').' '.$sActualTime; $nDataTmp = date ( 'Y-m-d', strtotime ( "$nActualDate + " . $nEveryDays . " Week" ) ); // echo "$nActualDate + " . $nEveryDays . " Week "; // echo "++"; // echo strtotime( "+".$nEveryDays . " week"), "\n"; // echo strtotime("$nActualDate +" . $nEveryDays . " Week "); // echo "++"; // echo $nDataTmp; // echo "--"; // echo $sTypeOperation; // echo $nFirstDay; // print_r ($aDaysWeek); // $sTypeOperation = "next"; $dEstimatedDate = date ( 'Y-m-d', strtotime ( "$nDataTmp " . $sTypeOperation . " " . $aDaysWeek [$nFirstDay] ) ) . ' ' . date ( 'H:i:s', strtotime ( $sActualTime ) ); // echo (strtotime ("$nDataTmp " . $sTypeOperation . " " . $aDaysWeek[$nFirstDay])); // echo "$nDataTmp " . $sTypeOperation . " " . $aDaysWeek[$nFirstDay]; // echo $dEstimatedDate; // echo "--"; // echo date('Y-m-d', strtotime ("$nDataTmp " . $sTypeOperation . " " . $aDaysWeek[$nFirstDay])) . ' ' . date('H:i:s', strtotime($sActualTime)); // die("02"); } // die("03"); } } break; case '3' : if (strlen ( $sMonths ) > 0) { // Must have at least one selected month // Calculamos para la siguiente ejecucion, acorde a lo seleccionado $aStartDay = explode ( '|', $sStartDay ); $nYear = date ( "Y", strtotime ( $sActualTime ) ); $nCurrentMonth = date ( "m", strtotime ( $sActualTime ) ); $nCurrentDay = date ( "d", strtotime ( $sActualTime ) ); $aMonths = explode ( '|', $sMonths ); $nSW = 0; $nNextMonth = 0; foreach ( $aMonths as $value ) { if ($value > $nCurrentMonth) { $nNextMonth = $value - 1; $nSW = 1; break; } } if ($nSW == 1) { // Mes encontrado $nExecNextMonth = $nNextMonth; } else { $nExecNextMonth = $aMonths [0] - 1; $nYear ++; } switch ($sValue) { case '1' : $nExecNextMonth ++; $nCurrentDay = $aStartDay [1]; $dEstimatedDate = date ( 'Y-m-d', strtotime ( "$nYear-$nExecNextMonth-$nCurrentDay" ) ) . ' ' . date ( 'H:i:s', strtotime ( $sActualTime ) ); break; case '2' : $aMontsShort = array ( 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ); $aWeeksShort = array ( 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ); $sNumDayWeek = $aStartDay [1]; $sDayWeek = ($aStartDay [2] == 7 ? 0 : $aStartDay [2]); switch ($sNumDayWeek) { case '1' : $sDaysWeekOpt = "+0"; break; case '2' : $sDaysWeekOpt = "+1"; break; case '3' : $sDaysWeekOpt = "+2"; break; case '4' : $sDaysWeekOpt = "+3"; break; case '5' : $sDaysWeekOpt = "-1"; $nExecNextMonth ++; if ($nExecNextMonth >= 12) { $nExecNextMonth = 0; $nYear ++; } break; } $dEstimatedDate = date ( 'Y-m-d', strtotime ( $sDaysWeekOpt . ' week ' . $aWeeksShort [$sDayWeek - 1] . ' ' . $aMontsShort [$nExecNextMonth] . ' ' . $nYear ) ) . ' ' . date ( 'H:i:s', strtotime ( $sActualTime ) ); // krumo($nExecNextMonth, $sDayWeek); // krumo($sDaysWeekOpt . ' week ' . $aWeeksShort[$sDayWeek-1] . ' ' . $aMontsShort[$nExecNextMonth] . ' ' . $nYear); break; } } break; } return $dEstimatedDate; } function Exists( $sUid ) { try { $oObj = CaseSchedulerPeer::retrieveByPk( $sUid ); return (is_object($oObj) && get_class($oObj) == 'CaseScheduler'); } catch (Exception $oError) { throw($oError); } } } // CaseScheduler