callback("search_task::update_index") ->name(t("Update Search Index")) ->description($remaining ? t("Search index is %percent% up-to-date", array("percent" => $percent)) : t("Search index is up to date")) ->severity($remaining ? log::WARNING : log::SUCCESS)); } static function update_index($task) { $completed = $task->get("completed", 0); foreach (ORM::factory("search_record")->where("dirty", 1)->limit(2)->find_all() as $record) { search::update_record($record); $completed++; } $task->set("completed", $completed); list ($remaining, $total, $percent) = self::_get_stats(); $task->percent_complete = round(100 * $completed / ($remaining + $completed)); $task->status = t("%done records records updated, index is %percent% up-to-date", array("done" => $completed, "percent" => $percent)); if ($remaining == 0) { $task->done = true; $task->state = "success"; site_status::clear("search_index_out_of_date"); } } private static function _get_stats() { $remaining = ORM::factory("search_record")->where("dirty", 1)->count_all(); $total = ORM::factory("search_record")->count_all(); $percent = round(100 * ($total - $remaining) / $total); return array($remaining, $total, $percent); } }