summaryrefslogtreecommitdiff
path: root/core/controllers/admin_maintenance.php
diff options
context:
space:
mode:
Diffstat (limited to 'core/controllers/admin_maintenance.php')
-rw-r--r--core/controllers/admin_maintenance.php76
1 files changed, 16 insertions, 60 deletions
diff --git a/core/controllers/admin_maintenance.php b/core/controllers/admin_maintenance.php
index beb6cef7..e24cc50b 100644
--- a/core/controllers/admin_maintenance.php
+++ b/core/controllers/admin_maintenance.php
@@ -19,24 +19,6 @@
*/
class Admin_Maintenance_Controller extends Admin_Controller {
/**
- * Get all available tasks
- * @todo move task definition out into the modules
- */
- private function _get_task_definitions() {
- $tasks = array();
- foreach (module::installed() as $module_name => $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) {
- $tasks[$task->callback] = $task;
- }
- }
- }
-
- return $tasks;
- }
-
- /**
* Show a list of all available, running and finished tasks.
*/
public function index() {
@@ -58,11 +40,15 @@ class Admin_Maintenance_Controller extends Admin_Controller {
$view = new Admin_View("admin.html");
$view->content = new View("admin_maintenance.html");
- $view->content->task_definitions = $this->_get_task_definitions();
- $view->content->running_tasks =
- ORM::factory("task")->where("done", 0)->orderby("updated", "DESC")->find_all();
- $view->content->finished_tasks =
- ORM::factory("task")->where("done", 1)->orderby("updated", "DESC")->find_all();
+ $view->content->task_definitions = task::get_task_definitions();
+ $view->content->running_tasks = ORM::factory("task")
+ ->select("tasks.*", "users.name as user_name")
+ ->join("users", "tasks.owner_id", "users.id")
+ ->where("done", 0)->orderby("updated", "DESC")->find_all();
+ $view->content->finished_tasks = ORM::factory("task")
+ ->select("tasks.*", "users.name as user_name")
+ ->join("users", "tasks.owner_id", "users.id")
+ ->where("done", 1)->orderby("updated", "DESC")->find_all();
$view->content->csrf = access::csrf_token();
print $view;
}
@@ -74,16 +60,7 @@ class Admin_Maintenance_Controller extends Admin_Controller {
public function start($task_callback) {
access::verify_csrf();
- $task_definitions = $this->_get_task_definitions();
-
- $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->context = serialize(array());
- $task->save();
+ $task = task::create($task_callback);
$view = new View("admin_maintenance_task.html");
$view->csrf = access::csrf_token();
@@ -123,13 +100,7 @@ class Admin_Maintenance_Controller extends Admin_Controller {
public function cancel($task_id) {
access::verify_csrf();
- $task = ORM::factory("task", $task_id);
- if (!$task->loaded) {
- throw new Exception("@todo MISSING_TASK");
- }
- $task->done = 1;
- $task->state = "cancelled";
- $task->save();
+ task::cancel($task_id);
message::success(t("Task cancelled"));
url::redirect("admin/maintenance");
@@ -142,11 +113,8 @@ class Admin_Maintenance_Controller extends Admin_Controller {
public function remove($task_id) {
access::verify_csrf();
- $task = ORM::factory("task", $task_id);
- if (!$task->loaded) {
- throw new Exception("@todo MISSING_TASK");
- }
- $task->delete();
+ task::remove($task_id);
+
message::success(t("Task removed"));
url::redirect("admin/maintenance");
}
@@ -159,14 +127,7 @@ class Admin_Maintenance_Controller extends Admin_Controller {
public function run($task_id) {
access::verify_csrf();
- $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();
+ $task = task::run($task_id);
if ($task->done) {
switch ($task->state) {
@@ -184,14 +145,9 @@ class Admin_Maintenance_Controller extends Admin_Controller {
message::success(t("Task failed"));
break;
}
- print json_encode(
- array("result" => "success",
- "task" => $task->as_array(),
- "location" => url::site("admin/maintenance")));
+ print task::success($task, url::site("admin/maintenance"));
} else {
- print json_encode(
- array("result" => "in_progress",
- "task" => $task->as_array()));
+ print task::in_progress($task);
}
}
}