From c3a95c28400437a521bbdb3f489ccab240775923 Mon Sep 17 00:00:00 2001 From: Dan Poltawski Date: Fri, 8 Apr 2016 16:23:12 +0100 Subject: [PATCH] MDL-53222 admin: rejig listing of search areas --- admin/searchareas.php | 149 +++++++++++++++++++++++++++++++++++ admin/settings/plugins.php | 10 +-- lang/en/admin.php | 2 +- lib/adminlib.php | 2 +- search/classes/area/base.php | 5 ++ 5 files changed, 158 insertions(+), 10 deletions(-) create mode 100644 admin/searchareas.php diff --git a/admin/searchareas.php b/admin/searchareas.php new file mode 100644 index 00000000000..1b156d8f567 --- /dev/null +++ b/admin/searchareas.php @@ -0,0 +1,149 @@ +. + +/** + * Manage global search areas. + * + * @package core_search + * @copyright 2016 Dan Poltawski + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +require_once('../config.php'); +require_once($CFG->libdir . '/adminlib.php'); + +admin_externalpage_setup('searchareas'); + +$areaid = optional_param('searcharea', null, PARAM_ALPHAEXT); +$action = optional_param('action', null, PARAM_ALPHA); + +if ($action) { + require_sesskey(); + + $area = \core_search\manager::get_search_area($areaid); + + if ($area === false) { + throw new moodle_exception('invalidrequest'); + } + // FIXME: lang strings. + switch ($action) { + case 'enable': + $area->set_enabled(true); + redirect($PAGE->url, 'Search area enabled', null, \core\output\notification::NOTIFY_SUCCESS); + break; + case 'disable': + $area->set_enabled(false); + redirect($PAGE->url, 'Search area disabled', null, \core\output\notification::NOTIFY_SUCCESS); + break; + case 'delete': + $search = \core_search\manager::instance(); + $search->delete_index($areaid); + redirect($PAGE->url, 'Index deleted', null, \core\output\notification::NOTIFY_SUCCESS); + break; + default: + throw new moodle_exception('invalidaction'); + break; + } +} + +$searchareas = \core_search\manager::get_search_areas_list(); +try { + $searchmanager = \core_search\manager::instance(); + $areasconfig = $searchmanager->get_areas_config($searchareas); +} catch (core_search\engine_exception $e) { + $areasconfig = false; +} + +$areasbycomponent = array(); +foreach ($searchareas as $area) { + $component = $area->get_component_name(); + if (isset($areasbycomponent[$component])) { + $areasbycomponent[$component][] = $area; + } else { + $areasbycomponent[$component] = array($area); + } +} + +echo $OUTPUT->header(); + +$table = new html_table(); +$table->id = 'core-search-areas'; +// FIXME: lang string moves. +$table->head = array(get_string('searcharea', 'search'), get_string('enable'), + get_string('newestdocindexed', 'report_search'), get_string('lastrun', 'report_search'), 'Index actions'); + +foreach ($areasbycomponent as $component => $areas) { + $header = new html_table_cell(get_string('pluginname', $component)); + $header->header = true; + $header->colspan = count($table->head); + $table->data[] = new html_table_row(array($header)); + + foreach ($areas as $area) { + $areaid = $area->get_area_id(); + $columns = array(new html_table_cell($area->get_visible_name())); + + if ($area->is_enabled()) { + $columns[] = $OUTPUT->action_icon(admin_searcharea_action_url($areaid, 'disable'), + new pix_icon('t/hide', get_string('disable'), 'moodle', array('title' => '', 'class' => 'iconsmall')), + null, array('title' => get_string('disable'))); + + if ($areasconfig) { + $columns[] = $areasconfig[$areaid]->lastindexrun; + + if ($areasconfig[$areaid]->indexingstart) { + $timediff = $areasconfig[$areaid]->indexingend - $areasconfig[$areaid]->indexingstart; + $laststatus = $timediff . ' , ' . + $areasconfig[$areaid]->docsprocessed . ' , ' . + $areasconfig[$areaid]->recordsprocessed . ' , ' . + $areasconfig[$areaid]->docsignored; + } else { + $laststatus = ''; + } + $columns[] = $laststatus; + $columns[] = html_writer::link(admin_searcharea_action_url($areaid, 'delete'), 'Delete index'); + + } else { + $blankrow = new html_table_cell('Global search is disabled'); // FIXME. + $blankrow->colspan = 3; + $columns[] = $blankrow; + } + + } else { + $columns[] = $OUTPUT->action_icon(admin_searcharea_action_url($areaid, 'enable'), + new pix_icon('t/show', get_string('enable'), 'moodle', array('title' => '', 'class' => 'iconsmall')), + null, array('title' => get_string('enable'))); + + $blankrow = new html_table_cell('Search area disabled'); // FIXME. + $blankrow->colspan = 3; + $columns[] = $blankrow; + } + $row = new html_table_row($columns); + $table->data[] = $row; + } +} + +echo html_writer::table($table); +echo $OUTPUT->footer(); + +/** + * Helper for generating url for management actions + * @param $searcharea + * @param $action + * @return moodle_url + */ +function admin_searcharea_action_url($searcharea, $action) { + return new moodle_url('/admin/searchareas.php', array('action' => $action, 'searcharea' => $searcharea, + 'sesskey' => sesskey())); +} \ No newline at end of file diff --git a/admin/settings/plugins.php b/admin/settings/plugins.php index 680bd3dc995..0711b2337df 100644 --- a/admin/settings/plugins.php +++ b/admin/settings/plugins.php @@ -528,15 +528,9 @@ if ($hassiteconfig) { $temp->add(new admin_setting_configselect('searchengine', new lang_string('selectsearchengine', 'admin'), '', 'solr', $engines)); - // Enable search areas. - $temp->add(new admin_setting_heading('searchareasheading', new lang_string('availablesearchareas', 'admin'), '')); - $searchareas = \core_search\manager::get_search_areas_list(); - foreach ($searchareas as $areaid => $searcharea) { - list($componentname, $varname) = $searcharea->get_config_var_name(); - $temp->add(new admin_setting_configcheckbox($componentname . '/' . $varname . '_enabled', $searcharea->get_visible_name(true), - '', 1, 1, 0)); - } $ADMIN->add('searchplugins', $temp); + $ADMIN->add('searchplugins', new admin_externalpage('searchareas', new lang_string('searchareas', 'admin'), + new moodle_url('/admin/searchareas.php'))); core_collator::asort_objects_by_property($pages, 'visiblename'); foreach ($pages as $page) { diff --git a/lang/en/admin.php b/lang/en/admin.php index e4398bedf14..2361d79cf16 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -65,7 +65,6 @@ $string['authpreventaccountcreation_help'] = 'When a user authenticates, an acco $string['authsettings'] = 'Manage authentication'; $string['autolang'] = 'Language autodetect'; $string['autologinguests'] = 'Auto-login guests'; -$string['availablesearchareas'] = 'Available areas for search'; $string['availableto'] = 'Available to'; $string['availablelicenses'] = 'Available licences'; $string['backgroundcolour'] = 'Transparent colour'; @@ -937,6 +936,7 @@ $string['rssglobaldisabled'] = 'Disabled at server level'; $string['save'] = 'Save'; $string['savechanges'] = 'Save changes'; $string['search'] = 'Search'; +$string['searchareas'] = 'Search areas'; $string['searchengine'] = 'Search engine'; $string['searchinsettings'] = 'Search in settings'; $string['searchresults'] = 'Search results'; diff --git a/lib/adminlib.php b/lib/adminlib.php index c8f24f6d708..f496762d810 100644 --- a/lib/adminlib.php +++ b/lib/adminlib.php @@ -9715,7 +9715,7 @@ class admin_setting_searchsetupinfo extends admin_setting { // Available areas. $row = array(); - $url = new moodle_url('/admin/settings.php?section=manageglobalsearch#admin-searchengine'); + $url = new moodle_url('/admin/searchareas.php'); $row[0] = '2. ' . html_writer::tag('a', get_string('enablesearchareas', 'admin'), array('href' => $url)); diff --git a/search/classes/area/base.php b/search/classes/area/base.php index e7caa34061d..345485772c0 100644 --- a/search/classes/area/base.php +++ b/search/classes/area/base.php @@ -193,6 +193,11 @@ abstract class base { return (bool)get_config($componentname, $varname . '_enabled'); } + public function set_enabled($isenabled) { + list($componentname, $varname) = $this->get_config_var_name(); + return set_config($varname . '_enabled', $isenabled, $componentname); + } + /** * Returns true if this area uses file indexing. *