From 7c7757185abe162667b79e9adb10b5a0aeecd433 Mon Sep 17 00:00:00 2001 From: Dan Poltawski Date: Thu, 3 Mar 2016 12:28:52 +0800 Subject: [PATCH 1/3] MDL-53247 search: allow search to be configured before enabled The seach manager no longer checks if search is enabled before providing an instance. It's up to the callers to do the access control. --- report/search/index.php | 2 -- search/classes/manager.php | 8 -------- search/engine/solr/setup_schema.php | 8 -------- 3 files changed, 18 deletions(-) diff --git a/report/search/index.php b/report/search/index.php index 5da3d20314d..64b435c1cf9 100644 --- a/report/search/index.php +++ b/report/search/index.php @@ -37,8 +37,6 @@ echo $OUTPUT->heading($pagetitle); if (\core_search\manager::is_global_search_enabled() === false) { $renderer = $PAGE->get_renderer('core_search'); echo $renderer->render_search_disabled(); - echo $OUTPUT->footer(); - exit; } $renderer = $PAGE->get_renderer('report_search'); diff --git a/search/classes/manager.php b/search/classes/manager.php index 3f8f7da5786..da68eb1fb8d 100644 --- a/search/classes/manager.php +++ b/search/classes/manager.php @@ -99,10 +99,6 @@ class manager { /** * Returns an initialised \core_search instance. * - * It requires global search to be enabled. Use \core_search\manager::is_global_search_enabled - * to verify it is enabled. - * - * @throws \moodle_exception * @throws \core_search\engine_exception * @return \core_search\manager */ @@ -114,10 +110,6 @@ class manager { return static::$instance; } - if (!static::is_global_search_enabled()) { - throw new \moodle_exception('globalsearchdisabled', 'search'); - } - if (!$engine = static::search_engine_instance()) { throw new \core_search\engine_exception('enginenotfound', 'search', '', $CFG->searchengine); } diff --git a/search/engine/solr/setup_schema.php b/search/engine/solr/setup_schema.php index 5ed2872f627..4ea17e218e3 100644 --- a/search/engine/solr/setup_schema.php +++ b/search/engine/solr/setup_schema.php @@ -34,14 +34,6 @@ require_once($CFG->libdir.'/adminlib.php'); require_login(null, false); require_capability('moodle/site:config', context_system::instance()); -if (!\core_search\manager::is_global_search_enabled()) { - throw new moodle_exception('globalsearchdisabled', 'search'); -} - -if ($CFG->searchengine !== 'solr') { - throw new moodle_exception('solrnotselected', 'search_solr'); -} - $schema = new \search_solr\schema(); $schema->setup(); From f05f9e08cfae4024ba6bc2ec6023f20298e33f55 Mon Sep 17 00:00:00 2001 From: Dan Poltawski Date: Thu, 3 Mar 2016 15:32:27 +0800 Subject: [PATCH 2/3] MDL-53247 search: add cli indexer script --- search/cli/indexer.php | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 search/cli/indexer.php diff --git a/search/cli/indexer.php b/search/cli/indexer.php new file mode 100644 index 00000000000..b40a20b7a0d --- /dev/null +++ b/search/cli/indexer.php @@ -0,0 +1,72 @@ +. + +/** + * CLI search indexer + * + * @package search + * @copyright 2016 Dan Poltawski + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +define('CLI_SCRIPT', true); + +require(__DIR__.'/../../config.php'); +require_once($CFG->libdir.'/clilib.php'); // cli only functions + +list($options, $unrecognized) = cli_get_params(array('help' => false, 'force' => false, 'reindex' => false), + array('h' => 'help', 'f' => 'force', 'r' => 'reindex')); + +if ($unrecognized) { + $unrecognized = implode("\n ", $unrecognized); + cli_error(get_string('cliunknowoption', 'admin', $unrecognized)); +} + +if ($options['help']) { + $help = +"Index search data + +Options: +-h, --help Print out this help +-r, --reindex Reindex data +-f, --force Allow indexer to run, even if global search is disabled. + +Example: +\$ sudo -u www-data /usr/bin/php search/cli/indexer.php --reindex +"; + + echo $help; + die; +} + +if (!\core_search\manager::is_global_search_enabled() && empty($options['force'])) { + cli_error('Global search is disabled. Use --force if you want to force an index while disabled'); +} + +$globalsearch = \core_search\manager::instance(); + +if (empty($options['reindex'])) { + echo "Running full index of site\n"; + echo "==========================\n"; + $globalsearch->index(); +} else { + echo "Running full reindex of site\n"; + echo "============================\n"; + $globalsearch->index(true); +} + +// Optimize index at last. +$globalsearch->optimize_index(); From 2f1f2d0222a23f9a6bde10a326f71552540761d9 Mon Sep 17 00:00:00 2001 From: Dan Poltawski Date: Thu, 3 Mar 2016 16:30:37 +0800 Subject: [PATCH 3/3] MDL-53247 adminlib: change ordering of global search setup helper Now put 'enable global search' as last step, thanks to David for the idea. --- lib/adminlib.php | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/adminlib.php b/lib/adminlib.php index eedbcea2a00..9ffb787cc67 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -9358,22 +9358,10 @@ class admin_setting_searchsetupinfo extends admin_setting { $return .= $brtag . get_string('searchsetupdescription', 'search') . $brtag . $brtag; - // Enable global search. - $row = array(); - $url = new moodle_url("/admin/search.php?query=enableglobalsearch"); - $row[0] = '1. ' . html_writer::tag('a', get_string('enableglobalsearch', 'admin'), - array('href' => $url)); - $status = html_writer::tag('span', get_string('no'), array('class' => 'statuscritical')); - if (\core_search\manager::is_global_search_enabled()) { - $status = html_writer::tag('span', get_string('yes'), array('class' => 'statusok')); - } - $row[1] = $status; - $table->data[] = $row; - // Select a search engine. $row = array(); $url = new moodle_url('/admin/settings.php?section=manageglobalsearch#admin-searchengine'); - $row[0] = '2. ' . html_writer::tag('a', get_string('selectsearchengine', 'admin'), + $row[0] = '1. ' . html_writer::tag('a', get_string('selectsearchengine', 'admin'), array('href' => $url)); $status = html_writer::tag('span', get_string('no'), array('class' => 'statuscritical')); @@ -9388,7 +9376,7 @@ class admin_setting_searchsetupinfo extends admin_setting { // Available areas. $row = array(); $url = new moodle_url('/admin/settings.php?section=manageglobalsearch#admin-searchengine'); - $row[0] = '3. ' . html_writer::tag('a', get_string('enablesearchareas', 'admin'), + $row[0] = '2. ' . html_writer::tag('a', get_string('enablesearchareas', 'admin'), array('href' => $url)); $status = html_writer::tag('span', get_string('no'), array('class' => 'statuscritical')); @@ -9402,11 +9390,11 @@ class admin_setting_searchsetupinfo extends admin_setting { // Setup search engine. $row = array(); if (empty($CFG->searchengine)) { - $row[0] = '4. ' . get_string('setupsearchengine', 'admin'); + $row[0] = '3. ' . get_string('setupsearchengine', 'admin'); $row[1] = html_writer::tag('span', get_string('no'), array('class' => 'statuscritical')); } else { $url = new moodle_url('/admin/settings.php?section=search' . $CFG->searchengine); - $row[0] = '4. ' . html_writer::tag('a', get_string('setupsearchengine', 'admin'), + $row[0] = '3. ' . html_writer::tag('a', get_string('setupsearchengine', 'admin'), array('href' => $url)); // Check the engine status. $searchengine = \core_search\manager::search_engine_instance(); @@ -9423,7 +9411,7 @@ class admin_setting_searchsetupinfo extends admin_setting { // Indexed data. $row = array(); $url = new moodle_url('/report/search/index.php#searchindexform'); - $row[0] = '5. ' . html_writer::tag('a', get_string('indexdata', 'admin'), array('href' => $url)); + $row[0] = '4. ' . html_writer::tag('a', get_string('indexdata', 'admin'), array('href' => $url)); if ($anyindexed) { $status = html_writer::tag('span', get_string('yes'), array('class' => 'statusok')); } else { @@ -9432,6 +9420,18 @@ class admin_setting_searchsetupinfo extends admin_setting { $row[1] = $status; $table->data[] = $row; + // Enable global search. + $row = array(); + $url = new moodle_url("/admin/search.php?query=enableglobalsearch"); + $row[0] = '5. ' . html_writer::tag('a', get_string('enableglobalsearch', 'admin'), + array('href' => $url)); + $status = html_writer::tag('span', get_string('no'), array('class' => 'statuscritical')); + if (\core_search\manager::is_global_search_enabled()) { + $status = html_writer::tag('span', get_string('yes'), array('class' => 'statusok')); + } + $row[1] = $status; + $table->data[] = $row; + $return .= html_writer::table($table); return highlight($query, $return);