/** * @brief does a single task * @return boolean * * This method executes one task. It saves the last state and continues * with the next step. This method should be used by webcron and ajax * services. */ public static function doNextStep() { $laststep = OC_Appconfig::getValue('core', 'backgroundjobs_step', 'regular_tasks'); if ($laststep == 'regular_tasks') { // get last app $lasttask = OC_Appconfig::getValue('core', 'backgroundjobs_task', ''); // What's the next step? $regular_tasks = OC_BackgroundJob_RegularTask::all(); ksort($regular_tasks); $done = false; // search for next background job foreach ($regular_tasks as $key => $value) { if (strcmp($key, $lasttask) > 0) { OC_Appconfig::setValue('core', 'backgroundjobs_task', $key); $done = true; call_user_func($value); break; } } if ($done == false) { // Next time load queued tasks OC_Appconfig::setValue('core', 'backgroundjobs_step', 'queued_tasks'); } } else { $tasks = OC_BackgroundJob_QueuedTask::all(); if (count($tasks)) { $task = $tasks[0]; // delete job before we execute it. This prevents endless loops // of failing jobs. OC_BackgroundJob_QueuedTask::delete($task['id']); // execute job call_user_func(array($task['klass'], $task['method']), $task['parameters']); } else { // Next time load queued tasks OC_Appconfig::setValue('core', 'backgroundjobs_step', 'regular_tasks'); OC_Appconfig::setValue('core', 'backgroundjobs_task', ''); } } return true; }
/** * @brief Gets all queued tasks * @return array with associative arrays */ public static function allQueuedTasks() { return \OC_BackgroundJob_QueuedTask::all(); }