array('param1' => 'value1') */ function createTask($sTask, $sScript, $aParams, $sOnCompletion, $sFreq, $iStartTime = NULL){ // Path to scripts $ktPath = '/var/tasks/'; $path = KT_DIR.$ktPath; if(!is_dir($path)){ mkdir($path, '0755'); } // Create script file $sName = str_replace(' ', '_', $sTask); $sName = str_replace('', "'", $sName); $sName = str_replace('', "&", $sName); $sFileName = $sName.'_'.mt_rand(1, 999).'.php'; while(file_exists($path.$sFileName)){ $sFileName = $sTask.'_'.mt_rand(1, 9999).'.php'; } $fp = fopen($path.$sFileName, 'w'); fwrite($fp, $sScript); fclose($fp); // Register task in the schedule schedulerUtil::registerTask($sTask, $ktPath.$sFileName, $sParams, $sOnCompletion, $sFreq, $iStartTime); } /** * Method to register a task in the schedule */ function registerTask($sTask, $sUrl, $aParams, $sOnCompletion, $sFreq, $iStartTime = NULL) { // Run task on next iteration if no start time given if(is_null($iStartTime) || empty($iStartTime)){ $iStartTime = time(); } // Calculate the next run time - get frequency $iNextTime = schedulerUtil::calculateRunTime($sFreq, $iStartTime); // Convert parameter array to a string => param=value|param2=value2|param3=value3 $sParams = schedulerUtil::convertParams($aParams); // Insert task into DB / task list $aTask = array(); $aTask['task'] = $sTask; $aTask['script_url'] = $sUrl; $aTask['script_params'] = $sParams; $aTask['on_completion'] = $sOnCompletion; $aTask['is_background'] = '0'; $aTask['is_complete'] = '0'; $aTask['frequency'] = $sFreq; $aTask['run_time'] = $iNextTime; $aTask['previous_run_time'] = $iStartTime; $aTask['run_duration'] = '0'; $oEntity = schedulerEntity::createFromArray($aTask); if (PEAR::isError($oEntity)){ return _kt('Scheduler object can\'t be created'); } return $iNextTime; } /** * Method to register a background task to be run immediately */ function registerBackgroundTask($sTask, $sUrl, $aParams, $sOnCompletion) { // Convert parameter array to a string => param=value|param2=value2|param3=value3 $sParams = schedulerUtil::convertParams($aParams); // Insert task into DB / task list $aTask = array(); $aTask['task'] = $sTask; $aTask['script_url'] = $sUrl; $aTask['script_params'] = $sParams; $aTask['on_completion'] = $sOnCompletion; $aTask['frequency'] = 'once'; $aTask['is_background'] = '1'; $aTask['is_complete'] = '0'; $aTask['run_time'] = time(); $aTask['run_duration'] = '0'; $oEntity = schedulerEntity::createFromArray($aTask); if (PEAR::isError($oEntity)){ return _kt('Scheduler object can\'t be created'); } return 'TRUE'; } /** * Convert parameter array to a string * For example: param=value|param2=value2|param3=value3 */ function convertParams($aParams) { if(is_array($aParams)){ $sParams = ''; foreach($aParams as $key => $value){ $sParams .= !empty($sParams) ? '|' : ''; $sParams .= $key.'='.$value; } }else{ $sParams = $aParams; } return $sParams; } /** * Calculate the next run time based on the frequency of iteration and the given time */ function calculateRunTime($sFreq, $iTime) { switch($sFreq){ case 'monthly': $iDays = date('t'); $iDiff = (60*60)*24*$iDays; break; case 'weekly': $iDiff = (60*60)*24*7; break; case 'daily': $iDiff = (60*60)*24; break; case 'hourly': $iDiff = (60*60); break; case 'half_hourly': $iDiff = (60*30); break; case 'quarter_hourly': $iDiff = (60*15); break; case '10mins': $iDiff = (60*10); break; case '5mins': $iDiff = (60*5); break; case 'once': $iDiff = 0; break; } $iNextTime = $iTime + $iDiff; return $iNextTime; } /** * Update the frequency of a task */ function updateTask($id, $sFreq) { $oScheduler = schedulerEntity::get($id); if (PEAR::isError($oScheduler)){ return _kt('Object can\'t be created'); } $oScheduler->setFrequency($sFreq); $oScheduler->update(); } /** * Get all completed tasks and delete */ function cleanUpTasks() { // Get list of completed from database $aList = schedulerEntity::getTaskList('1'); if (PEAR::isError($aList)){ return _kt('List of tasks can\'t be retrieved.'); } if(!empty($aList)){ // start the background process $bg = new background(); $bg->checkConnection(); $bg->keepConnectionAlive(); foreach($aList as $oScheduler){ $oScheduler->delete(); } } schedulerEntity::clearAllCaches(); } } ?>