$module_info) { $class_name = "{$module_name}_task"; if (method_exists($class_name, "available_tasks")) { foreach (call_user_func(array($class_name, "available_tasks")) as $task) { if (in_array($task->type, $type)) { $tasks[$task->callback] = $task; } } } } return $tasks; } static function create($task_callback) { $task_definitions = self::get_task_definitions(array("admin", "general", "both")); $task = ORM::factory("task"); $task->callback = $task_callback; $task->name = $task_definitions[$task_callback]->name; $task->percent_complete = 0; $task->status = ""; $task->state = "started"; $task->owner_id = user::active()->id; $task->context = serialize(array()); $task->save(); return $task; } static function cancel($task_id) { $task = ORM::factory("task", $task_id); if (!$task->loaded) { throw new Exception("@todo MISSING_TASK"); } $task->done = 1; $task->state = "cancelled"; $task->save(); return $task; } static function remove($task_id) { $task = ORM::factory("task", $task_id); if ($task->loaded) { $task->delete(); } } static function run($task_id) { $task = ORM::factory("task", $task_id); if (!$task->loaded) { throw new Exception("@todo MISSING_TASK"); } $task->state = "running"; call_user_func_array($task->callback, array(&$task)); $task->save(); return $task; } static function success($task, $location=null) { $result = array("result" => "success", "task" => $task->as_array()); if (!empty($location)) { $result["location"] = $location; } return json_encode($result); } static function in_progress($task) { return json_encode( array("result" => "in_progress", "task" => $task->as_array())); } }