From 48cb5021c6bd7e65a13a0ff50a9e76f72da7d3a1 Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Mon, 1 Feb 2010 16:28:52 -0800 Subject: Add the scheduler component to the admin maintenance screen. --- modules/gallery/controllers/admin_maintenance.php | 2 ++ modules/gallery/views/admin_maintenance.html.php | 8 ++++++++ 2 files changed, 10 insertions(+) (limited to 'modules') diff --git a/modules/gallery/controllers/admin_maintenance.php b/modules/gallery/controllers/admin_maintenance.php index 3062ea09..d9363d30 100644 --- a/modules/gallery/controllers/admin_maintenance.php +++ b/modules/gallery/controllers/admin_maintenance.php @@ -44,6 +44,8 @@ class Admin_Maintenance_Controller extends Admin_Controller { $view->content->task_definitions = task::get_definitions(); $view->content->running_tasks = ORM::factory("task") ->where("done", "=", 0)->order_by("updated", "DESC")->find_all(); + $view->content->schedule_definitions = + module::is_active("scheduler") ? scheduler::get_definitions() : ""; $view->content->finished_tasks = ORM::factory("task") ->where("done", "=", 1)->order_by("updated", "DESC")->find_all(); print $view; diff --git a/modules/gallery/views/admin_maintenance.html.php b/modules/gallery/views/admin_maintenance.html.php index ac597715..15d04caa 100644 --- a/modules/gallery/views/admin_maintenance.html.php +++ b/modules/gallery/views/admin_maintenance.html.php @@ -33,12 +33,20 @@ class="g-dialog-link g-button ui-icon-left ui-state-default ui-corner-all"> + + callback?csrf=$csrf") ?>" + class="g-dialog-link g-button ui-icon-left ui-state-default ui-corner-all"> + + + + + count()): ?>

-- cgit v1.2.3 From 5ded9e8ac5935e41c08d1766974ce31890efd7f0 Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Mon, 1 Feb 2010 16:31:24 -0800 Subject: Refactor starting a task into the task helper so we can call it multiple times. --- modules/gallery/controllers/admin_maintenance.php | 5 +---- modules/gallery/helpers/task.php | 9 +++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) (limited to 'modules') diff --git a/modules/gallery/controllers/admin_maintenance.php b/modules/gallery/controllers/admin_maintenance.php index d9363d30..487e77a6 100644 --- a/modules/gallery/controllers/admin_maintenance.php +++ b/modules/gallery/controllers/admin_maintenance.php @@ -58,13 +58,10 @@ class Admin_Maintenance_Controller extends Admin_Controller { public function start($task_callback) { access::verify_csrf(); - $tasks = task::get_definitions(); - $task = task::create($tasks[$task_callback], array()); + $task = task::start($task_callback); $view = new View("admin_maintenance_task.html"); $view->task = $task; - $task->log(t("Task %task_name started (task id %task_id)", - array("task_name" => $task->name, "task_id" => $task->id))); log::info("tasks", t("Task %task_name started (task id %task_id)", array("task_name" => $task->name, "task_id" => $task->id)), html::anchor("admin/maintenance", t("maintenance"))); diff --git a/modules/gallery/helpers/task.php b/modules/gallery/helpers/task.php index 645850d1..aa0eb94d 100644 --- a/modules/gallery/helpers/task.php +++ b/modules/gallery/helpers/task.php @@ -35,6 +35,15 @@ class task_Core { return $tasks; } + static function start($task_callback, $context=array()) { + $tasks = task::get_definitions(); + $task = task::create($tasks[$task_callback], array()); + + $task->log(t("Task %task_name started (task id %task_id)", + array("task_name" => $task->name, "task_id" => $task->id))); + return $task; + } + static function create($task_def, $context) { $task = ORM::factory("task"); $task->callback = $task_def->callback; -- cgit v1.2.3 From a10bdd8f0e436e8bb41430ca5d18fb2e1682773c Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Mon, 1 Feb 2010 17:13:29 -0800 Subject: Add a task scheduling module. In the admin maintenance, create an event from an existing task. When the task becomes due, it will run depending on traffic to the web site. It uses the gallery_shutdown event to time slice the task. --- modules/scheduler/controllers/admin_schedule.php | 105 ++++++++++++++++ modules/scheduler/helpers/scheduler.php | 133 +++++++++++++++++++++ modules/scheduler/helpers/scheduler_event.php | 64 ++++++++++ modules/scheduler/helpers/scheduler_installer.php | 42 +++++++ modules/scheduler/models/schedule.php | 33 +++++ modules/scheduler/module.info | 3 + modules/scheduler/views/admin_schedule.html.php | 11 ++ .../views/admin_schedule_confirm.html.php | 4 + .../scheduler/views/scheduler_definitions.html.php | 49 ++++++++ 9 files changed, 444 insertions(+) create mode 100644 modules/scheduler/controllers/admin_schedule.php create mode 100644 modules/scheduler/helpers/scheduler.php create mode 100644 modules/scheduler/helpers/scheduler_event.php create mode 100644 modules/scheduler/helpers/scheduler_installer.php create mode 100644 modules/scheduler/models/schedule.php create mode 100644 modules/scheduler/module.info create mode 100644 modules/scheduler/views/admin_schedule.html.php create mode 100644 modules/scheduler/views/admin_schedule_confirm.html.php create mode 100644 modules/scheduler/views/scheduler_definitions.html.php (limited to 'modules') diff --git a/modules/scheduler/controllers/admin_schedule.php b/modules/scheduler/controllers/admin_schedule.php new file mode 100644 index 00000000..6911cf86 --- /dev/null +++ b/modules/scheduler/controllers/admin_schedule.php @@ -0,0 +1,105 @@ +task_callback = $task_callback; + $schedule->next_run_datetime = time(); + $v = new View("admin_schedule.html"); + $v->form = scheduler::get_form("define", $schedule); + $v->method = "define"; + print $v; + } + + public function update_form($id) { + access::verify_csrf(); + + + $schedule = ORM::factory("schedule", $id); + $v = new View("admin_schedule.html"); + $v->form = scheduler::get_form("update", $schedule); + $v->method = "update"; + print $v; + } + + public function remove_form($id) { + access::verify_csrf(); + + $schedule = ORM::factory("schedule", $id); + + $v = new View("admin_schedule_confirm.html"); + $v->name = $schedule->name; + $v->form = new Forge("admin/schedule/remove/{$id}", "", "post", + array("id" => "g-remove-schedule")); + $group = $v->form->group("remove"); + $group->submit("")->value(t("Continue")); + print $v; + } + + public function remove($id) { + access::verify_csrf(); + $schedule = ORM::factory("schedule", $id); + $schedule->delete(); + + message::success(t("Removed scheduled task: %name", array("name" => $schedule->name))); + print json_encode(array("result" => "success", "reload" => 1)); + } + + public function define() { + $this->_handle_request("define"); + } + + public function update($id=null) { + $this->_handle_request("update", $id); + } + + private function _handle_request($method, $id=null) { + $schedule = ORM::factory("schedule", $id); + $form = scheduler::get_form($method, $schedule); + $valid = $form->validate(); + if ($valid) { + $schedule->name = $form->schedule_group->schedule_name->value; + $schedule->interval = $form->schedule_group->interval->value; + $schedule->next_run_datetime = + $this->_start_date($form->schedule_group->run_date->dow->selected, + $form->schedule_group->run_date->time->value); + $schedule->task_callback = $form->schedule_group->callback->value; + $schedule->save(); + if ($method == "define") { + message::success(t("Added scheduled task: %name", array("name" => $schedule->name))); + } else { + message::success(t("Updated scheduled task: %name", array("name" => $schedule->name))); + } + print json_encode(array("result" => "success", "reload" => 1)); + } else { + print json_encode(array("result" => "error", "form" => (string) $form)); + } + } + + private function _start_date($dow, $time) { + list ($hour, $minutes) = explode(":", $time); + $local_time = localtime(); + $days = ($dow < $local_time[6] ? 7 : 0) + $dow - $local_time[6]; + return + mktime($hour, $minutes, 0, $local_time[4] + 1, $local_time[3] + $days, 1900 + $local_time[5]); + } +} diff --git a/modules/scheduler/helpers/scheduler.php b/modules/scheduler/helpers/scheduler.php new file mode 100644 index 00000000..987b1b32 --- /dev/null +++ b/modules/scheduler/helpers/scheduler.php @@ -0,0 +1,133 @@ + t("Hourly"), "86400" => t("Daily"), + "604800" => t("Weekly"), "2419200" => t("Monthly")); + } + return $intervals; + } + + static function get_form($method, $schedule) { + if ($method == "define") { + $title = t("Create a scheduled event"); + $button_text = t("Create"); + } else { + $title = t("Update a scheduled event"); + $button_text = t("Update"); + } + + $id = empty($schedule->id) ? "" : "/$schedule->id"; + $form = new Forge("admin/schedule/$method{$id}", "", "post", + array("id" => "g-{$method}-schedule")); + $group = $form->group("schedule_group")->label($title); + $group->input("schedule_name") + ->label(t("Description")) + ->id("g-schedule-name") + ->rules("required|length[0, 128]") + ->error_messages("required", t("You must provide a description")) + ->error_messages("length", t("Your description is too long")) + ->value(!empty($schedule->name) ? $schedule->name : ""); + + list ($dow, $display_time) = scheduler::format_time($schedule->next_run_datetime); + $next = $group->group("run_date")->label(t("Scheduled Date")); + $next->dropdown("dow") + ->label(t("Day")) + ->id("g-schedule-day") + ->rules("required") + ->options(array(t("Sunday"), t("Monday"), t("Tuesday"), t("Wednesday"), + t("Thursday"), t("Friday"), t("Saturday"))) + ->selected($dow); + + $next->input("time") + ->label(t("Hour")) + ->id("g-schedule-time") + ->rules("required") + ->error_messages("required", t("You must provide a time")) + ->error_messages("time_invalid", t("Invalid time")) + ->callback("scheduler::valid_time") + ->value($display_time); + + // need to set the top padding to zero on g-define-schedule li.g-error + $group->dropdown("interval")->label(t("How often"))->id("g-schedule-frequency") + ->options(scheduler::intervals()) + ->rules("required") + ->error_messages("required", t("You must provide an interval")) + ->selected(!empty($schedule->interval) ? $schedule->interval : "2419200"); + $group->hidden("callback")->value($schedule->task_callback); + $group->submit("")->value($button_text); + + return $form; + } + + static function format_time($time) { + $local_time = localtime($time); + $display_time = str_pad($local_time[2], 2, "0", STR_PAD_LEFT) . ":" . + str_pad($local_time[1], 2, "0", STR_PAD_LEFT); + return array($local_time[6], $display_time); + } + + static function valid_time($field) { + if (preg_match("/([0-9]{1,2}):([0-9]{2})/", $field->value, $matches)) { + $hour = (int)$matches[1]; + $minutes = (int)$matches[2]; + if (!(0 <= $hour && $hour<= 23 || 0 <= $minutes && $minutes <= 59)) { + $field->add_error("time_invalid", 1); + } + } else { + $field->add_error("time_invalid", 1); + } + } + + static function get_definitions() { + $v = ""; + $events = ORM::factory("schedule") + ->order_by("next_run_datetime", "asc") + ->find_all(); + if ($events->count()) { + $v = new View("scheduler_definitions.html"); + $v->schedule_definitions = array(); + foreach ($events as $schedule) { + $entry[] = $schedule->id; + $entry[] = $schedule->name; + $run_date = strftime("%A, %b %e, %Y %H:%M ", $schedule->next_run_datetime); + $intervals = scheduler::intervals(); + $interval = $intervals[$schedule->interval]; + if (!empty($schedule->task_id)) { + $status = t("Running"); + } else if ($schedule->next_run_datetime < time()) { + $status = t("Overdue"); + } else { + $status = t("Scheduled"); + } + + $v->schedule_definitions[] = (object)array("id" => $schedule->id, + "name" => $schedule->name, + "run_date" => $run_date, + "interval" => $interval, + "status" => $status); + } + } + return $v; + } +} \ No newline at end of file diff --git a/modules/scheduler/helpers/scheduler_event.php b/modules/scheduler/helpers/scheduler_event.php new file mode 100644 index 00000000..365b1df1 --- /dev/null +++ b/modules/scheduler/helpers/scheduler_event.php @@ -0,0 +1,64 @@ +where("next_run_datetime", "<=", time()) + ->where("busy", "!=", 1) + ->order_by("next_run_datetime") + ->find_all(1); + + if ($schedule->count()) { + $schedule = $schedule->current(); + $schedule->busy = true; + $schedule->save(); + + try { + if (empty($schedule->task_id)) { + $task = task::start($schedule->task_callback); + $schedule->task_id = $task->id; + } + + $task = task::run($schedule->task_id); + + if ($task->done) { + $schedule->next_run_datetime += $schedule->interval; + $schedule->task_id = null; + } + + $schedule->busy = false; + $schedule->save(); + } catch (Exception $e) { + $schedule->busy = false; + $schedule->save(); + throw $e; + } + } + } catch (Exception $e) { + Kohana_Log::add("error", (string)$e); + } + } +} diff --git a/modules/scheduler/helpers/scheduler_installer.php b/modules/scheduler/helpers/scheduler_installer.php new file mode 100644 index 00000000..46be4a81 --- /dev/null +++ b/modules/scheduler/helpers/scheduler_installer.php @@ -0,0 +1,42 @@ +query("CREATE TABLE {schedules} ( + `id` int(9) NOT NULL auto_increment, + `name` varchar(128) NOT NULL, + `task_callback` varchar(128) NOT NULL, + `task_id` int(9) NULL, + `next_run_datetime` int(9) NOT NULL, + `interval` int(9) NOT NULL, + `busy` bool NOT NULL DEFAULT 0, + PRIMARY KEY (`id`), + KEY `run_date` (`next_run_datetime`, `busy`), + UNIQUE KEY (`name`)) + DEFAULT CHARSET=utf8;"); + module::set_version("scheduler", $version = 1); + } + + static function uninstall() { + $db = Database::instance(); + $db->query("DROP TABLE IF EXISTS {schedules}"); + } +} diff --git a/modules/scheduler/models/schedule.php b/modules/scheduler/models/schedule.php new file mode 100644 index 00000000..b83b5738 --- /dev/null +++ b/modules/scheduler/models/schedule.php @@ -0,0 +1,33 @@ +join("schedules_tasks", "task.id", "schedules_tasks.task_id") + ->where("schedule_id", "=", $this->id) + ->find_all(); + } + + public function add_task($task) { + db::build() + ->insert("schedules_tasks", array("schedule_id" => $this->id,"task_id" => $task->id)) + ->execute(); + } +} diff --git a/modules/scheduler/module.info b/modules/scheduler/module.info new file mode 100644 index 00000000..15355dfb --- /dev/null +++ b/modules/scheduler/module.info @@ -0,0 +1,3 @@ +name = "Scheduler" +description = "Schedule tasks to run at specific times and intervals" +version = 1 diff --git a/modules/scheduler/views/admin_schedule.html.php b/modules/scheduler/views/admin_schedule.html.php new file mode 100644 index 00000000..3d45dc53 --- /dev/null +++ b/modules/scheduler/views/admin_schedule.html.php @@ -0,0 +1,11 @@ + + + diff --git a/modules/scheduler/views/admin_schedule_confirm.html.php b/modules/scheduler/views/admin_schedule_confirm.html.php new file mode 100644 index 00000000..5d09654d --- /dev/null +++ b/modules/scheduler/views/admin_schedule_confirm.html.php @@ -0,0 +1,4 @@ + +

+

$name)) ?>

+ diff --git a/modules/scheduler/views/scheduler_definitions.html.php b/modules/scheduler/views/scheduler_definitions.html.php new file mode 100644 index 00000000..0ab46f2b --- /dev/null +++ b/modules/scheduler/views/scheduler_definitions.html.php @@ -0,0 +1,49 @@ + + -- cgit v1.2.3 From 19fee6b5e4ceb8a5f90cafe4ad770856ece108ef Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Tue, 2 Feb 2010 14:34:50 -0800 Subject: Refactor the admin maintenance screen so that events are used to pupluate the action buttons and other content such as the list of scheduled tasks. --- modules/gallery/controllers/admin_maintenance.php | 11 +++++++++-- modules/gallery/views/admin_maintenance.html.php | 16 +++++++--------- 2 files changed, 16 insertions(+), 11 deletions(-) (limited to 'modules') diff --git a/modules/gallery/controllers/admin_maintenance.php b/modules/gallery/controllers/admin_maintenance.php index 487e77a6..8e4845a9 100644 --- a/modules/gallery/controllers/admin_maintenance.php +++ b/modules/gallery/controllers/admin_maintenance.php @@ -44,10 +44,17 @@ class Admin_Maintenance_Controller extends Admin_Controller { $view->content->task_definitions = task::get_definitions(); $view->content->running_tasks = ORM::factory("task") ->where("done", "=", 0)->order_by("updated", "DESC")->find_all(); - $view->content->schedule_definitions = - module::is_active("scheduler") ? scheduler::get_definitions() : ""; $view->content->finished_tasks = ORM::factory("task") ->where("done", "=", 1)->order_by("updated", "DESC")->find_all(); + $task_buttons = + new ArrayObject(array((object)array("text" => t("run"), + "url" =>url::site("admin/maintenance/start")))); + module::event("admin_maintenance_task_buttons", $task_buttons); + $view->content->task_buttons = $task_buttons; + + $maintenance_content = new ArrayObject(); + module::event("admin_maintenance_content", $maintenance_content); + $view->content->task_maintenance_content = $maintenance_content; print $view; } diff --git a/modules/gallery/views/admin_maintenance.html.php b/modules/gallery/views/admin_maintenance.html.php index 15d04caa..444bf1fe 100644 --- a/modules/gallery/views/admin_maintenance.html.php +++ b/modules/gallery/views/admin_maintenance.html.php @@ -29,23 +29,21 @@ description ?> - callback?csrf=$csrf") ?>" + + url}/$task->callback?csrf=$csrf" ?>" class="g-dialog-link g-button ui-icon-left ui-state-default ui-corner-all"> - + text) ?> - - callback?csrf=$csrf") ?>" - class="g-dialog-link g-button ui-icon-left ui-state-default ui-corner-all"> - - - +
- + + + count()): ?>
-- cgit v1.2.3 From d5a231225d3b4f1fe6a08f350b93b6410b2d1914 Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Tue, 2 Feb 2010 14:37:26 -0800 Subject: Move the scheduler module to the -contrib repository for this release. --- modules/scheduler/controllers/admin_schedule.php | 105 ---------------- modules/scheduler/helpers/scheduler.php | 133 --------------------- modules/scheduler/helpers/scheduler_event.php | 64 ---------- modules/scheduler/helpers/scheduler_installer.php | 42 ------- modules/scheduler/models/schedule.php | 33 ----- modules/scheduler/module.info | 3 - modules/scheduler/views/admin_schedule.html.php | 11 -- .../views/admin_schedule_confirm.html.php | 4 - .../scheduler/views/scheduler_definitions.html.php | 49 -------- 9 files changed, 444 deletions(-) delete mode 100644 modules/scheduler/controllers/admin_schedule.php delete mode 100644 modules/scheduler/helpers/scheduler.php delete mode 100644 modules/scheduler/helpers/scheduler_event.php delete mode 100644 modules/scheduler/helpers/scheduler_installer.php delete mode 100644 modules/scheduler/models/schedule.php delete mode 100644 modules/scheduler/module.info delete mode 100644 modules/scheduler/views/admin_schedule.html.php delete mode 100644 modules/scheduler/views/admin_schedule_confirm.html.php delete mode 100644 modules/scheduler/views/scheduler_definitions.html.php (limited to 'modules') diff --git a/modules/scheduler/controllers/admin_schedule.php b/modules/scheduler/controllers/admin_schedule.php deleted file mode 100644 index 6911cf86..00000000 --- a/modules/scheduler/controllers/admin_schedule.php +++ /dev/null @@ -1,105 +0,0 @@ -task_callback = $task_callback; - $schedule->next_run_datetime = time(); - $v = new View("admin_schedule.html"); - $v->form = scheduler::get_form("define", $schedule); - $v->method = "define"; - print $v; - } - - public function update_form($id) { - access::verify_csrf(); - - - $schedule = ORM::factory("schedule", $id); - $v = new View("admin_schedule.html"); - $v->form = scheduler::get_form("update", $schedule); - $v->method = "update"; - print $v; - } - - public function remove_form($id) { - access::verify_csrf(); - - $schedule = ORM::factory("schedule", $id); - - $v = new View("admin_schedule_confirm.html"); - $v->name = $schedule->name; - $v->form = new Forge("admin/schedule/remove/{$id}", "", "post", - array("id" => "g-remove-schedule")); - $group = $v->form->group("remove"); - $group->submit("")->value(t("Continue")); - print $v; - } - - public function remove($id) { - access::verify_csrf(); - $schedule = ORM::factory("schedule", $id); - $schedule->delete(); - - message::success(t("Removed scheduled task: %name", array("name" => $schedule->name))); - print json_encode(array("result" => "success", "reload" => 1)); - } - - public function define() { - $this->_handle_request("define"); - } - - public function update($id=null) { - $this->_handle_request("update", $id); - } - - private function _handle_request($method, $id=null) { - $schedule = ORM::factory("schedule", $id); - $form = scheduler::get_form($method, $schedule); - $valid = $form->validate(); - if ($valid) { - $schedule->name = $form->schedule_group->schedule_name->value; - $schedule->interval = $form->schedule_group->interval->value; - $schedule->next_run_datetime = - $this->_start_date($form->schedule_group->run_date->dow->selected, - $form->schedule_group->run_date->time->value); - $schedule->task_callback = $form->schedule_group->callback->value; - $schedule->save(); - if ($method == "define") { - message::success(t("Added scheduled task: %name", array("name" => $schedule->name))); - } else { - message::success(t("Updated scheduled task: %name", array("name" => $schedule->name))); - } - print json_encode(array("result" => "success", "reload" => 1)); - } else { - print json_encode(array("result" => "error", "form" => (string) $form)); - } - } - - private function _start_date($dow, $time) { - list ($hour, $minutes) = explode(":", $time); - $local_time = localtime(); - $days = ($dow < $local_time[6] ? 7 : 0) + $dow - $local_time[6]; - return - mktime($hour, $minutes, 0, $local_time[4] + 1, $local_time[3] + $days, 1900 + $local_time[5]); - } -} diff --git a/modules/scheduler/helpers/scheduler.php b/modules/scheduler/helpers/scheduler.php deleted file mode 100644 index 987b1b32..00000000 --- a/modules/scheduler/helpers/scheduler.php +++ /dev/null @@ -1,133 +0,0 @@ - t("Hourly"), "86400" => t("Daily"), - "604800" => t("Weekly"), "2419200" => t("Monthly")); - } - return $intervals; - } - - static function get_form($method, $schedule) { - if ($method == "define") { - $title = t("Create a scheduled event"); - $button_text = t("Create"); - } else { - $title = t("Update a scheduled event"); - $button_text = t("Update"); - } - - $id = empty($schedule->id) ? "" : "/$schedule->id"; - $form = new Forge("admin/schedule/$method{$id}", "", "post", - array("id" => "g-{$method}-schedule")); - $group = $form->group("schedule_group")->label($title); - $group->input("schedule_name") - ->label(t("Description")) - ->id("g-schedule-name") - ->rules("required|length[0, 128]") - ->error_messages("required", t("You must provide a description")) - ->error_messages("length", t("Your description is too long")) - ->value(!empty($schedule->name) ? $schedule->name : ""); - - list ($dow, $display_time) = scheduler::format_time($schedule->next_run_datetime); - $next = $group->group("run_date")->label(t("Scheduled Date")); - $next->dropdown("dow") - ->label(t("Day")) - ->id("g-schedule-day") - ->rules("required") - ->options(array(t("Sunday"), t("Monday"), t("Tuesday"), t("Wednesday"), - t("Thursday"), t("Friday"), t("Saturday"))) - ->selected($dow); - - $next->input("time") - ->label(t("Hour")) - ->id("g-schedule-time") - ->rules("required") - ->error_messages("required", t("You must provide a time")) - ->error_messages("time_invalid", t("Invalid time")) - ->callback("scheduler::valid_time") - ->value($display_time); - - // need to set the top padding to zero on g-define-schedule li.g-error - $group->dropdown("interval")->label(t("How often"))->id("g-schedule-frequency") - ->options(scheduler::intervals()) - ->rules("required") - ->error_messages("required", t("You must provide an interval")) - ->selected(!empty($schedule->interval) ? $schedule->interval : "2419200"); - $group->hidden("callback")->value($schedule->task_callback); - $group->submit("")->value($button_text); - - return $form; - } - - static function format_time($time) { - $local_time = localtime($time); - $display_time = str_pad($local_time[2], 2, "0", STR_PAD_LEFT) . ":" . - str_pad($local_time[1], 2, "0", STR_PAD_LEFT); - return array($local_time[6], $display_time); - } - - static function valid_time($field) { - if (preg_match("/([0-9]{1,2}):([0-9]{2})/", $field->value, $matches)) { - $hour = (int)$matches[1]; - $minutes = (int)$matches[2]; - if (!(0 <= $hour && $hour<= 23 || 0 <= $minutes && $minutes <= 59)) { - $field->add_error("time_invalid", 1); - } - } else { - $field->add_error("time_invalid", 1); - } - } - - static function get_definitions() { - $v = ""; - $events = ORM::factory("schedule") - ->order_by("next_run_datetime", "asc") - ->find_all(); - if ($events->count()) { - $v = new View("scheduler_definitions.html"); - $v->schedule_definitions = array(); - foreach ($events as $schedule) { - $entry[] = $schedule->id; - $entry[] = $schedule->name; - $run_date = strftime("%A, %b %e, %Y %H:%M ", $schedule->next_run_datetime); - $intervals = scheduler::intervals(); - $interval = $intervals[$schedule->interval]; - if (!empty($schedule->task_id)) { - $status = t("Running"); - } else if ($schedule->next_run_datetime < time()) { - $status = t("Overdue"); - } else { - $status = t("Scheduled"); - } - - $v->schedule_definitions[] = (object)array("id" => $schedule->id, - "name" => $schedule->name, - "run_date" => $run_date, - "interval" => $interval, - "status" => $status); - } - } - return $v; - } -} \ No newline at end of file diff --git a/modules/scheduler/helpers/scheduler_event.php b/modules/scheduler/helpers/scheduler_event.php deleted file mode 100644 index 365b1df1..00000000 --- a/modules/scheduler/helpers/scheduler_event.php +++ /dev/null @@ -1,64 +0,0 @@ -where("next_run_datetime", "<=", time()) - ->where("busy", "!=", 1) - ->order_by("next_run_datetime") - ->find_all(1); - - if ($schedule->count()) { - $schedule = $schedule->current(); - $schedule->busy = true; - $schedule->save(); - - try { - if (empty($schedule->task_id)) { - $task = task::start($schedule->task_callback); - $schedule->task_id = $task->id; - } - - $task = task::run($schedule->task_id); - - if ($task->done) { - $schedule->next_run_datetime += $schedule->interval; - $schedule->task_id = null; - } - - $schedule->busy = false; - $schedule->save(); - } catch (Exception $e) { - $schedule->busy = false; - $schedule->save(); - throw $e; - } - } - } catch (Exception $e) { - Kohana_Log::add("error", (string)$e); - } - } -} diff --git a/modules/scheduler/helpers/scheduler_installer.php b/modules/scheduler/helpers/scheduler_installer.php deleted file mode 100644 index 46be4a81..00000000 --- a/modules/scheduler/helpers/scheduler_installer.php +++ /dev/null @@ -1,42 +0,0 @@ -query("CREATE TABLE {schedules} ( - `id` int(9) NOT NULL auto_increment, - `name` varchar(128) NOT NULL, - `task_callback` varchar(128) NOT NULL, - `task_id` int(9) NULL, - `next_run_datetime` int(9) NOT NULL, - `interval` int(9) NOT NULL, - `busy` bool NOT NULL DEFAULT 0, - PRIMARY KEY (`id`), - KEY `run_date` (`next_run_datetime`, `busy`), - UNIQUE KEY (`name`)) - DEFAULT CHARSET=utf8;"); - module::set_version("scheduler", $version = 1); - } - - static function uninstall() { - $db = Database::instance(); - $db->query("DROP TABLE IF EXISTS {schedules}"); - } -} diff --git a/modules/scheduler/models/schedule.php b/modules/scheduler/models/schedule.php deleted file mode 100644 index b83b5738..00000000 --- a/modules/scheduler/models/schedule.php +++ /dev/null @@ -1,33 +0,0 @@ -join("schedules_tasks", "task.id", "schedules_tasks.task_id") - ->where("schedule_id", "=", $this->id) - ->find_all(); - } - - public function add_task($task) { - db::build() - ->insert("schedules_tasks", array("schedule_id" => $this->id,"task_id" => $task->id)) - ->execute(); - } -} diff --git a/modules/scheduler/module.info b/modules/scheduler/module.info deleted file mode 100644 index 15355dfb..00000000 --- a/modules/scheduler/module.info +++ /dev/null @@ -1,3 +0,0 @@ -name = "Scheduler" -description = "Schedule tasks to run at specific times and intervals" -version = 1 diff --git a/modules/scheduler/views/admin_schedule.html.php b/modules/scheduler/views/admin_schedule.html.php deleted file mode 100644 index 3d45dc53..00000000 --- a/modules/scheduler/views/admin_schedule.html.php +++ /dev/null @@ -1,11 +0,0 @@ - - - diff --git a/modules/scheduler/views/admin_schedule_confirm.html.php b/modules/scheduler/views/admin_schedule_confirm.html.php deleted file mode 100644 index 5d09654d..00000000 --- a/modules/scheduler/views/admin_schedule_confirm.html.php +++ /dev/null @@ -1,4 +0,0 @@ - -

-

$name)) ?>

- diff --git a/modules/scheduler/views/scheduler_definitions.html.php b/modules/scheduler/views/scheduler_definitions.html.php deleted file mode 100644 index 0ab46f2b..00000000 --- a/modules/scheduler/views/scheduler_definitions.html.php +++ /dev/null @@ -1,49 +0,0 @@ - - -- cgit v1.2.3 From f69493d1384108bf65fc2b92d25fc3b854dee929 Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Tue, 2 Feb 2010 14:51:06 -0800 Subject: Update the xss golden file to reflect the changes to the admin screen. --- modules/gallery/tests/xss_data.txt | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) (limited to 'modules') diff --git a/modules/gallery/tests/xss_data.txt b/modules/gallery/tests/xss_data.txt index 65b45a08..8d7236fa 100644 --- a/modules/gallery/tests/xss_data.txt +++ b/modules/gallery/tests/xss_data.txt @@ -81,18 +81,20 @@ modules/gallery/views/admin_maintenance.html.php 24 DIRTY_ATTR log: modules/gallery/views/admin_maintenance.html.php 25 DIRTY_ATTR log::severity_class($task->severity) modules/gallery/views/admin_maintenance.html.php 26 DIRTY $task->name modules/gallery/views/admin_maintenance.html.php 29 DIRTY $task->description -modules/gallery/views/admin_maintenance.html.php 70 DIRTY_ATTR text::alternate("g-odd","g-even") -modules/gallery/views/admin_maintenance.html.php 70 DIRTY_ATTR $task->state=="stalled"?"g-warning":"" -modules/gallery/views/admin_maintenance.html.php 71 DIRTY_ATTR $task->state=="stalled"?"g-warning":"" -modules/gallery/views/admin_maintenance.html.php 72 DIRTY gallery::date_time($task->updated) -modules/gallery/views/admin_maintenance.html.php 75 DIRTY $task->name -modules/gallery/views/admin_maintenance.html.php 90 DIRTY $task->status -modules/gallery/views/admin_maintenance.html.php 141 DIRTY_ATTR text::alternate("g-odd","g-even") -modules/gallery/views/admin_maintenance.html.php 141 DIRTY_ATTR $task->state=="success"?"g-success":"g-error" -modules/gallery/views/admin_maintenance.html.php 142 DIRTY_ATTR $task->state=="success"?"g-success":"g-error" -modules/gallery/views/admin_maintenance.html.php 143 DIRTY gallery::date_time($task->updated) -modules/gallery/views/admin_maintenance.html.php 146 DIRTY $task->name -modules/gallery/views/admin_maintenance.html.php 158 DIRTY $task->status +modules/gallery/views/admin_maintenance.html.php 33 DIRTY_JS "{$button->url}/$task->callback?csrf=$csrf" +modules/gallery/views/admin_maintenance.html.php 45 DIRTY $content +modules/gallery/views/admin_maintenance.html.php 76 DIRTY_ATTR text::alternate("g-odd","g-even") +modules/gallery/views/admin_maintenance.html.php 76 DIRTY_ATTR $task->state=="stalled"?"g-warning":"" +modules/gallery/views/admin_maintenance.html.php 77 DIRTY_ATTR $task->state=="stalled"?"g-warning":"" +modules/gallery/views/admin_maintenance.html.php 78 DIRTY gallery::date_time($task->updated) +modules/gallery/views/admin_maintenance.html.php 81 DIRTY $task->name +modules/gallery/views/admin_maintenance.html.php 96 DIRTY $task->status +modules/gallery/views/admin_maintenance.html.php 147 DIRTY_ATTR text::alternate("g-odd","g-even") +modules/gallery/views/admin_maintenance.html.php 147 DIRTY_ATTR $task->state=="success"?"g-success":"g-error" +modules/gallery/views/admin_maintenance.html.php 148 DIRTY_ATTR $task->state=="success"?"g-success":"g-error" +modules/gallery/views/admin_maintenance.html.php 149 DIRTY gallery::date_time($task->updated) +modules/gallery/views/admin_maintenance.html.php 152 DIRTY $task->name +modules/gallery/views/admin_maintenance.html.php 164 DIRTY $task->status modules/gallery/views/admin_maintenance_show_log.html.php 8 DIRTY_JS url::site("admin/maintenance/save_log/$task->id?csrf=$csrf") modules/gallery/views/admin_maintenance_show_log.html.php 13 DIRTY $task->name modules/gallery/views/admin_maintenance_task.html.php 55 DIRTY $task->name -- cgit v1.2.3 From 1c0e5eaa0d9b65863c9fd04aff940c1a2b7e682d Mon Sep 17 00:00:00 2001 From: Tim Almdal Date: Tue, 2 Feb 2010 15:00:05 -0800 Subject: use html::purify to cleans the additional content on the admin maintence page. --- modules/gallery/tests/xss_data.txt | 1 - modules/gallery/views/admin_maintenance.html.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'modules') diff --git a/modules/gallery/tests/xss_data.txt b/modules/gallery/tests/xss_data.txt index 8d7236fa..e53502ee 100644 --- a/modules/gallery/tests/xss_data.txt +++ b/modules/gallery/tests/xss_data.txt @@ -82,7 +82,6 @@ modules/gallery/views/admin_maintenance.html.php 25 DIRTY_ATTR log: modules/gallery/views/admin_maintenance.html.php 26 DIRTY $task->name modules/gallery/views/admin_maintenance.html.php 29 DIRTY $task->description modules/gallery/views/admin_maintenance.html.php 33 DIRTY_JS "{$button->url}/$task->callback?csrf=$csrf" -modules/gallery/views/admin_maintenance.html.php 45 DIRTY $content modules/gallery/views/admin_maintenance.html.php 76 DIRTY_ATTR text::alternate("g-odd","g-even") modules/gallery/views/admin_maintenance.html.php 76 DIRTY_ATTR $task->state=="stalled"?"g-warning":"" modules/gallery/views/admin_maintenance.html.php 77 DIRTY_ATTR $task->state=="stalled"?"g-warning":"" diff --git a/modules/gallery/views/admin_maintenance.html.php b/modules/gallery/views/admin_maintenance.html.php index 444bf1fe..19375670 100644 --- a/modules/gallery/views/admin_maintenance.html.php +++ b/modules/gallery/views/admin_maintenance.html.php @@ -42,7 +42,7 @@
- + count()): ?> -- cgit v1.2.3