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() { $schedule_definitions = array(); $events = ORM::factory("schedule") ->order_by("next_run_datetime", "asc") ->find_all(); if ($events->count()) { foreach ($events as $schedule) { $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"); } $schedule_definitions[] = (object)array("id" => $schedule->id, "name" => $schedule->name, "run_date" => $run_date, "interval" => $interval, "status" => $status); } } return $schedule_definitions; } }