MDL-31989 report_search: Adding the report
authorDavid Monllao <davidm@moodle.com>
Fri, 19 Feb 2016 06:36:16 +0000 (14:36 +0800)
committerDan Poltawski <dan@moodle.com>
Tue, 23 Feb 2016 10:47:57 +0000 (10:47 +0000)
report/search/classes/output/form.php [new file with mode: 0644]
report/search/classes/output/renderer.php [new file with mode: 0644]
report/search/index.php [new file with mode: 0644]
report/search/lang/en/report_search.php [new file with mode: 0644]
report/search/settings.php [new file with mode: 0644]
report/search/version.php [new file with mode: 0644]

diff --git a/report/search/classes/output/form.php b/report/search/classes/output/form.php
new file mode 100644 (file)
index 0000000..0d592cc
--- /dev/null
@@ -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'));
+    }
+}
diff --git a/report/search/classes/output/renderer.php b/report/search/classes/output/renderer.php
new file mode 100644 (file)
index 0000000..119292f
--- /dev/null
@@ -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;
+    }
+
+}
diff --git a/report/search/index.php b/report/search/index.php
new file mode 100644 (file)
index 0000000..5da3d20
--- /dev/null
@@ -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();
diff --git a/report/search/lang/en/report_search.php b/report/search/lang/en/report_search.php
new file mode 100644 (file)
index 0000000..5cfd6eb
--- /dev/null
@@ -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';
diff --git a/report/search/settings.php b/report/search/settings.php
new file mode 100644 (file)
index 0000000..7f5f887
--- /dev/null
@@ -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;
+}
diff --git a/report/search/version.php b/report/search/version.php
new file mode 100644 (file)
index 0000000..756e0c9
--- /dev/null
@@ -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).