diff --git a/lib/classes/task/search_task.php b/lib/classes/task/search_task.php new file mode 100644 index 00000000000..f22224a84ff --- /dev/null +++ b/lib/classes/task/search_task.php @@ -0,0 +1,60 @@ +. + +/** + * A scheduled task for global search. + * + * @package core + * @copyright 2015 David Monllao {@link http://www.davidmonllao.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace core\task; + +/** + * Runs global search indexing. + * + * @package core + * @copyright 2015 David Monllao {@link http://www.davidmonllao.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class search_task extends scheduled_task { + + /** + * Get a descriptive name for this task (shown to admins). + * + * @return string + */ + public function get_name() { + return get_string('taskglobalsearch', 'admin'); + } + + /** + * Do the job. + * Throw exceptions on errors (the job will be retried). + */ + public function execute() { + if (!\core_search\manager::is_global_search_enabled()) { + return; + } + $globalsearch = \core_search\manager::instance(); + + // Indexing database records for modules + rich documents of forum. + $globalsearch->index(); + + // Optimize index at last. + $globalsearch->optimize_index(); + } +} diff --git a/lib/db/tasks.php b/lib/db/tasks.php index 41991f15071..8abc3f6d13b 100644 --- a/lib/db/tasks.php +++ b/lib/db/tasks.php @@ -284,6 +284,15 @@ $tasks = array( 'dayofweek' => '*', 'month' => '*' ), + array( + 'classname' => 'core\task\search_task', + 'blocking' => 0, + 'minute' => '*/30', + 'hour' => '*', + 'day' => '*', + 'dayofweek' => '*', + 'month' => '*' + ), array( 'classname' => 'core\task\stats_cron_task', 'blocking' => 0,