Skip to content

Commit

Permalink
MDL-31989 report_search: Adding the report
Browse files Browse the repository at this point in the history
  • Loading branch information
David Monllao authored and danpoltawski committed Feb 23, 2016
1 parent 4040c8b commit 1767561
Show file tree
Hide file tree
Showing 6 changed files with 347 additions and 0 deletions.
75 changes: 75 additions & 0 deletions report/search/classes/output/form.php
@@ -0,0 +1,75 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Global Search admin form definition
*
* @package report_search
* @copyright Prateek Sachan {@link http://prateeksachan.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace report_search\output;

defined('MOODLE_INTERNAL') || die();

require_once("$CFG->libdir/formslib.php");

/**
* Search report form.
*
* @package report_search
* @copyright Prateek Sachan {@link http://prateeksachan.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class form extends \moodleform {

/**
* Form definition.
*
* @return void
*/
public function definition() {

$mform = $this->_form;

$checkboxarray = array();
$checkboxarray[] =& $mform->createElement('checkbox', 'reindex', '', get_string('indexsite', 'report_search'));
$mform->addGroup($checkboxarray, 'reindexcheckbox', '', array(''), false);
$mform->closeHeaderBefore('reindexcheckbox');

$checkboxarray = array();
$checkboxarray[] =& $mform->createElement('checkbox', 'delete', '', get_string('delete', 'report_search'));
$mform->addGroup($checkboxarray, 'deletecheckbox', '', array(''), false);
$mform->closeHeaderBefore('deletecheckbox');

// Only available if delete checked.
$areacheckboxarray = array();
$areacheckboxarray[] =& $mform->createElement('advcheckbox', 'all', '', get_string('entireindex', 'report_search'),
array('group' => 1));
$mform->setDefault('all', true);

foreach ($this->_customdata['searchareas'] as $key => $searcharea) {
$areacheckboxarray[] =& $mform->createElement('advcheckbox', $key, '',
$searcharea->get_visible_name(), array('group' => 2));
}
$mform->addGroup($areacheckboxarray, 'areasadvcheckbox', '', array(' '), false);
$mform->closeHeaderBefore('areasadvcheckbox');
$mform->disabledIf('areasadvcheckbox', 'delete', 'notchecked');

$this->add_action_buttons(false, get_string('execute', 'report_search'));
}
}
79 changes: 79 additions & 0 deletions report/search/classes/output/renderer.php
@@ -0,0 +1,79 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Search report renderer.
*
* @package report_search
* @copyright 2015 David Monllao {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace report_search\output;

defined('MOODLE_INTERNAL') || die();

/**
* Renderer for search report.
*
* @package report_search
* @copyright 2015 David Monllao {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class renderer extends \plugin_renderer_base {

/**
* Renders the global search admin interface.
*
* @param \report_search\output\form\admin $form
* @param \core_search\area\base[] $searchareas
* @param \stdClass[] $areasconfig
* @return string HTML
*/
public function render_report($form, $searchareas, $areasconfig) {

$table = new \html_table();
$table->head = array(get_string('searcharea', 'search'), get_string('newestdocindexed', 'report_search'),
get_string('lastrun', 'report_search'));

foreach ($searchareas as $areaid => $searcharea) {
$cname = new \html_table_cell($searcharea->get_visible_name());
$clastrun = new \html_table_cell($areasconfig[$areaid]->lastindexrun);
if ($areasconfig[$areaid]->indexingstart) {
$timediff = $areasconfig[$areaid]->indexingend - $areasconfig[$areaid]->indexingstart;
$ctimetaken = new \html_table_cell($timediff . ' , ' .
$areasconfig[$areaid]->docsprocessed . ' , ' .
$areasconfig[$areaid]->recordsprocessed . ' , ' .
$areasconfig[$areaid]->docsignored);
} else {
$ctimetaken = '';
}
$row = new \html_table_row(array($cname, $clastrun, $ctimetaken));
$table->data[] = $row;
}

// Display the table.
$content = \html_writer::table($table);

// Display the form.
$formcontents = $this->output->heading(get_string('indexform', 'report_search'), 3) .
$this->output->notification(get_string('indexinginfo', 'report_search'), 'notifymessage') . $form->render();
$content .= \html_writer::tag('div', $formcontents, array('id' => 'searchindexform'));

return $content;
}

}
94 changes: 94 additions & 0 deletions report/search/index.php
@@ -0,0 +1,94 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Global search report
*
* @package report_search
* @copyright Prateek Sachan {@link http://prateeksachan.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

require_once(__DIR__ . '/../../config.php');
require_once($CFG->libdir . '/adminlib.php');

admin_externalpage_setup('reportsearch');

$pagetitle = get_string('pluginname', 'report_search');
$PAGE->set_title($pagetitle);
$PAGE->set_heading($pagetitle);

echo $OUTPUT->header();
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');
$search = \core_search\manager::instance();

// All enabled components.
$searchareas = $search->get_search_areas_list(true);

$mform = new \report_search\output\form(null, array('searchareas' => $searchareas));
if ($data = $mform->get_data()) {

if (!empty($data->delete)) {
if (!empty($data->all)) {
$search->delete_index();
} else {
$anydelete = false;
// We check that the component exist and is enabled.
foreach ($searchareas as $areaid => $searcharea) {
if (!empty($data->{$areaid})) {
$anydelete = true;
$search->delete_index($areaid);
}
}
}

if (!empty($data->all) || $anydelete) {
echo $OUTPUT->notification(get_string('deleted', 'report_search'), 'notifysuccess');

// Purge the cache.
$cache = \cache::make('core', 'search_results');
$cache->purge();
}
}

if (!empty($data->reindex)) {
// Force full reindex. Quite heavy operation.
$search->index(true);
$search->optimize_index();
echo $OUTPUT->notification(get_string('indexed', 'report_search'), 'notifysuccess');
}
}

// After processing the form as config might change depending on the action.
$areasconfig = $search->get_areas_config($searchareas);

// Ensure that all search areas that we are going to display have config.
$missingareas = array_diff_key($searchareas, $areasconfig);
foreach ($missingareas as $searcharea) {
$search->reset_config($searcharea->get_area_id());
}

echo $renderer->render_report($mform, $searchareas, $areasconfig);
echo $OUTPUT->footer();
35 changes: 35 additions & 0 deletions report/search/lang/en/report_search.php
@@ -0,0 +1,35 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Strings for component 'report_search'
*
* @package report_search
* @copyright 2015 David Monllao {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

$string['delete'] = 'Delete';
$string['deleted'] = 'Selected indexes deleted';
$string['entireindex'] = 'Entire index';
$string['execute'] = 'Execute';
$string['indexed'] = 'Indexing finished';
$string['indexform'] = 'Indexing';
$string['indexinginfo'] = 'The recommended way to index your site\'s contents is using "Global search indexing" scheduled task which runs automatically by Cron.';
$string['indexsite'] = 'Index all site contents';
$string['lastrun'] = 'Last run (time, # docs, # records, # ignores)';
$string['newestdocindexed'] = 'Newest document indexed';
$string['pluginname'] = 'Global search info';
35 changes: 35 additions & 0 deletions report/search/settings.php
@@ -0,0 +1,35 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Adds the search report link to the admin tree.
*
* @package report_search
* @copyright 2015 David Monllao {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

defined('MOODLE_INTERNAL') || die();

if ($hassiteconfig) {

$searchurl = $CFG->wwwroot . '/report/search/index.php';
$ADMIN->add('reports', new admin_externalpage('reportsearch', new lang_string('pluginname', 'report_search'),
$searchurl));

// No report settings.
$settings = null;
}
29 changes: 29 additions & 0 deletions report/search/version.php
@@ -0,0 +1,29 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Version details.
*
* @package report_search
* @copyright 2015 David Monllao {@link http://www.davidmonllao.com}
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

defined('MOODLE_INTERNAL') || die();

$plugin->version = 2016012001; // The current plugin version (Date: YYYYMMDDXX).
$plugin->requires = 2015111000; // Requires this Moodle version.
$plugin->component = 'report_search'; // Full name of the plugin (used for diagnostics).

0 comments on commit 1767561

Please sign in to comment.