Skip to content

Commit

Permalink
MDL-53222 search: Replace report_search by new searchareas admin page
Browse files Browse the repository at this point in the history
  • Loading branch information
David Monllao committed Jul 11, 2016
1 parent c3a95c2 commit 6a4c214
Show file tree
Hide file tree
Showing 15 changed files with 166 additions and 94 deletions.
175 changes: 103 additions & 72 deletions admin/searchareas.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,36 +21,65 @@
* @copyright 2016 Dan Poltawski <dan@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once('../config.php');
require_once(__DIR__ . '/../config.php');
require_once($CFG->libdir . '/adminlib.php');

admin_externalpage_setup('searchareas');

$areaid = optional_param('searcharea', null, PARAM_ALPHAEXT);
$areaid = optional_param('areaid', null, PARAM_ALPHAEXT);
$action = optional_param('action', null, PARAM_ALPHA);

try {
$searchmanager = \core_search\manager::instance();
} catch (core_search\engine_exception $searchmanagererror) {
// Continue, we return an error later depending on the requested action.
}

echo $OUTPUT->header();

if ($action) {
require_sesskey();

$area = \core_search\manager::get_search_area($areaid);
if ($areaid) {
// We need to check that the area exists.
$area = \core_search\manager::get_search_area($areaid);
if ($area === false) {
throw new moodle_exception('invalidrequest');
}
}

if ($area === false) {
throw new moodle_exception('invalidrequest');
// All actions but enable/disable need the search engine to be ready.
if ($action !== 'enable' && $action !== 'disable') {
if (!empty($searchmanagererror)) {
throw $searchmanagererror;
}
}
// FIXME: lang strings.

switch ($action) {
case 'enable':
$area->set_enabled(true);
redirect($PAGE->url, 'Search area enabled', null, \core\output\notification::NOTIFY_SUCCESS);
echo $OUTPUT->notification(get_string('searchareaenabled', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
case 'disable':
$area->set_enabled(false);
redirect($PAGE->url, 'Search area disabled', null, \core\output\notification::NOTIFY_SUCCESS);
echo $OUTPUT->notification(get_string('searchareadisabled', 'admin'), \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);
echo $OUTPUT->notification(get_string('searchindexdeleted', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
case 'indexall':
$searchmanager->index();
echo $OUTPUT->notification(get_string('searchindexupdated', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
case 'reindexall':
$searchmanager->index(true);
echo $OUTPUT->notification(get_string('searchreindexed', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
case 'deleteall':
$searchmanager->delete_index();
echo $OUTPUT->notification(get_string('searchalldeleted', 'admin'), \core\output\notification::NOTIFY_SUCCESS);
break;
default:
throw new moodle_exception('invalidaction');
Expand All @@ -59,91 +88,93 @@
}

$searchareas = \core_search\manager::get_search_areas_list();
try {
$searchmanager = \core_search\manager::instance();
if (empty($searchmanagererror)) {
$areasconfig = $searchmanager->get_areas_config($searchareas);
} catch (core_search\engine_exception $e) {
} else {
$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);
}
if (!empty($searchmanagererror)) {
$errorstr = get_string($searchmanagererror->errorcode, $searchmanagererror->module);
echo $OUTPUT->notification($errorstr, \core\output\notification::NOTIFY_ERROR);
} else {
echo $OUTPUT->notification(get_string('indexinginfo', 'admin'), \core\output\notification::NOTIFY_INFO);
}

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');

$table->head = array(get_string('searcharea', 'search'), get_string('enable'), get_string('newestdocindexed', 'admin'),
get_string('searchlastrun', 'admin'), get_string('searchindexactions', 'admin'));

foreach ($searchareas 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('disable', $areaid),
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 {
$blankrow = new html_table_cell('Global search is disabled'); // FIXME.
$blankrow->colspan = 3;
$columns[] = $blankrow;
$laststatus = '';
}
$columns[] = $laststatus;
$columns[] = html_writer::link(admin_searcharea_action_url('delete', $areaid), 'Delete index');

} 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 = new html_table_cell(get_string('searchnotavailable', 'admin'));
$blankrow->colspan = 3;
$columns[] = $blankrow;
}
$row = new html_table_row($columns);
$table->data[] = $row;

} else {
$columns[] = $OUTPUT->action_icon(admin_searcharea_action_url('enable', $areaid),
new pix_icon('t/show', get_string('enable'), 'moodle', array('title' => '', 'class' => 'iconsmall')),
null, array('title' => get_string('enable')));

$blankrow = new html_table_cell(get_string('searchareadisabled', 'admin'));
$blankrow->colspan = 3;
$columns[] = $blankrow;
}
$row = new html_table_row($columns);
$table->data[] = $row;
}

// Cross-search area tasks.
$options = array();
if (!empty($searchmanagererror)) {
$options['disabled'] = true;
}
echo $OUTPUT->box_start('search-areas-actions');
echo $OUTPUT->single_button(admin_searcharea_action_url('indexall'), get_string('searchupdateindex', 'admin'), 'get', $options);
echo $OUTPUT->single_button(admin_searcharea_action_url('reindexall'), get_string('searchreindexindex', 'admin'), 'get', $options);
echo $OUTPUT->single_button(admin_searcharea_action_url('deleteall'), get_string('searchdeleteindex', 'admin'), 'get', $options);
echo $OUTPUT->box_end();

echo html_writer::table($table);
echo $OUTPUT->footer();

/**
* Helper for generating url for management actions
* @param $searcharea
* @param $action
* Helper for generating url for management actions.
*
* @param string $action
* @param string $areaid
* @return moodle_url
*/
function admin_searcharea_action_url($searcharea, $action) {
return new moodle_url('/admin/searchareas.php', array('action' => $action, 'searcharea' => $searcharea,
'sesskey' => sesskey()));
}
function admin_searcharea_action_url($action, $areaid = false) {
$params = array('action' => $action, 'sesskey' => sesskey());
if ($areaid) {
$params['areaid'] = $areaid;
}
return new moodle_url('/admin/searchareas.php', $params);
}
16 changes: 15 additions & 1 deletion lang/en/admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
$string['authsettings'] = 'Manage authentication';
$string['autolang'] = 'Language autodetect';
$string['autologinguests'] = 'Auto-login guests';
$string['searchareas'] = 'Search areas';
$string['availableto'] = 'Available to';
$string['availablelicenses'] = 'Available licences';
$string['backgroundcolour'] = 'Transparent colour';
Expand Down Expand Up @@ -585,6 +586,7 @@
$string['includemoduleuserdata'] = 'Include module user data';
$string['incompatibleblocks'] = 'Incompatible blocks';
$string['indexdata'] = 'Index data';
$string['indexinginfo'] = 'The recommended way to index your site\'s contents is using "Global search indexing" scheduled task which runs automatically by Cron.';
$string['installhijacked'] = 'Installation must be finished from the original IP address, sorry.';
$string['installsessionerror'] = 'Can not initialise PHP session, please verify that your browser accepts cookies.';
$string['intlrecommended'] = 'Intl extension is used to improve internationalization support, such as locale aware sorting.';
Expand Down Expand Up @@ -749,6 +751,7 @@
$string['navsortmycoursessort'] = 'Sort my courses';
$string['navsortmycoursessort_help'] = 'This determines whether courses are listed under My courses according to the sort order (i.e. the order set in Site administration > Courses > Manage courses and categories) or alphabetically by course setting.';
$string['neverdeleteruns'] = 'Never delete runs';
$string['newestdocindexed'] = 'Newest document indexed';
$string['nobookmarksforuser'] = 'You do not have any bookmarks.';
$string['nodatabase'] = 'No database';
$string['nohttpsformobilewarning'] = 'It is recommended to enable HTTPS with a valid certificate. The Moodle app will always try to use a secured connection first.';
Expand Down Expand Up @@ -936,11 +939,22 @@
$string['save'] = 'Save';
$string['savechanges'] = 'Save changes';
$string['search'] = 'Search';
$string['searchareas'] = 'Search areas';
$string['searchalldeleted'] = 'All indexed contents have been deleted';
$string['searchareaenabled'] = 'Search area enabled';
$string['searchareadisabled'] = 'Search area disabled';
$string['searchdeleteindex'] = 'Delete all indexed contents';
$string['searchengine'] = 'Search engine';
$string['searchindexactions'] = 'Index actions';
$string['searchindexdeleted'] = 'Index deleted';
$string['searchindexupdated'] = 'Search engine contents have been updated';
$string['searchinsettings'] = 'Search in settings';
$string['searchlastrun'] = 'Last run (time, # docs, # records, # ignores)';
$string['searchnotavailable'] = 'Search is not available';
$string['searchreindexed'] = 'All site\'s contents have been reindexed';
$string['searchreindexindex'] = 'Reindex all site contents';
$string['searchresults'] = 'Search results';
$string['searchsetupinfo'] = 'Search setup';
$string['searchupdateindex'] = 'Update indexed contents';
$string['sectionerror'] = 'Section error!';
$string['secureforms'] = 'Use additional form security';
$string['security'] = 'Security';
Expand Down
2 changes: 1 addition & 1 deletion lib/adminlib.php
Original file line number Diff line number Diff line change
Expand Up @@ -9750,7 +9750,7 @@ public function output_html($data, $query='') {

// Indexed data.
$row = array();
$url = new moodle_url('/report/search/index.php#searchindexform');
$url = new moodle_url('/admin/searchareas.php');
$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'));
Expand Down
1 change: 1 addition & 0 deletions lib/classes/plugin_manager.php
Original file line number Diff line number Diff line change
Expand Up @@ -1660,6 +1660,7 @@ public static function is_deleted_standard_plugin($type, $name) {
$plugins = array(
'qformat' => array('blackboard', 'learnwise'),
'enrol' => array('authorize'),
'report' => array('search'),
'tinymce' => array('dragmath'),
'tool' => array('bloglevelupgrade', 'qeupgradehelper', 'timezoneimport'),
'theme' => array('mymobile', 'afterburner', 'anomaly', 'arialist', 'binarius', 'boxxie', 'brick', 'formal_white',
Expand Down
11 changes: 11 additions & 0 deletions lib/db/upgrade.php
Original file line number Diff line number Diff line change
Expand Up @@ -2072,5 +2072,16 @@ function xmldb_main_upgrade($oldversion) {
// Moodle v3.1.0 release upgrade line.
// Put any upgrade step following this.

if ($oldversion < 2016070700.01) {

// If someone is emotionally attached to it let's leave the config (basically the version) there.
if (!file_exists($CFG->dirroot . '/report/search/classes/output/form.php')) {
unset_all_config_for_plugin('report_search');
}

// Savepoint reached.
upgrade_main_savepoint(true, 2016070700.01);
}

return true;
}
4 changes: 2 additions & 2 deletions mod/book/tests/search_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ public function test_search_enabled() {
// Enabled by default once global search is enabled.
$this->assertTrue($searcharea->is_enabled());

set_config($varname . '_enabled', false, $componentname);
set_config($varname . '_enabled', 0, $componentname);
$this->assertFalse($searcharea->is_enabled());

set_config($varname . '_enabled', true, $componentname);
set_config($varname . '_enabled', 1, $componentname);
$this->assertTrue($searcharea->is_enabled());
}

Expand Down
4 changes: 2 additions & 2 deletions mod/forum/tests/search_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ public function test_search_enabled() {
// Enabled by default once global search is enabled.
$this->assertTrue($searcharea->is_enabled());

set_config($varname . '_enabled', false, $componentname);
set_config($varname . '_enabled', 0, $componentname);
$this->assertFalse($searcharea->is_enabled());

set_config($varname . '_enabled', true, $componentname);
set_config($varname . '_enabled', 1, $componentname);
$this->assertTrue($searcharea->is_enabled());
}

Expand Down
4 changes: 2 additions & 2 deletions mod/glossary/tests/search_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,10 @@ public function test_search_enabled() {
// Enabled by default once global search is enabled.
$this->assertTrue($searcharea->is_enabled());

set_config($varname . '_enabled', false, $componentname);
set_config($varname . '_enabled', 0, $componentname);
$this->assertFalse($searcharea->is_enabled());

set_config($varname . '_enabled', true, $componentname);
set_config($varname . '_enabled', 1, $componentname);
$this->assertTrue($searcharea->is_enabled());
}

Expand Down
4 changes: 2 additions & 2 deletions mod/wiki/tests/search_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ public function test_search_enabled() {
// Enabled by default once global search is enabled.
$this->assertTrue($searcharea->is_enabled());

set_config($varname . '_enabled', false, $componentname);
set_config($varname . '_enabled', 0, $componentname);
$this->assertFalse($searcharea->is_enabled());

set_config($varname . '_enabled', true, $componentname);
set_config($varname . '_enabled', 1, $componentname);
$this->assertTrue($searcharea->is_enabled());
}

Expand Down
Loading

0 comments on commit 6a4c214

Please sign in to comment.