4e921569d0
Increase the scope of the files that are detected and indexed by Moodle's Global Search. This includes intro and content areas of search areas. The use case here is in a description for an activity there is a file added that contains more information about the activity. It would an advantage to be able to search this content as well. It would also allow search engine plugins to be able to index non text files such as images.
98 lines
3.4 KiB
PHP
98 lines
3.4 KiB
PHP
<?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 area for mod_page activities.
|
|
*
|
|
* @package mod_page
|
|
* @copyright 2015 David Monllao {@link http://www.davidmonllao.com}
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
|
|
namespace mod_page\search;
|
|
|
|
defined('MOODLE_INTERNAL') || die();
|
|
|
|
/**
|
|
* Search area for mod_page activities.
|
|
*
|
|
* @package mod_page
|
|
* @copyright 2015 David Monllao {@link http://www.davidmonllao.com}
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
class activity extends \core_search\base_activity {
|
|
|
|
/**
|
|
* Returns the document associated with this activity.
|
|
*
|
|
* Overwriting base_activity method as page contents field is required,
|
|
* description field is not.
|
|
*
|
|
* @param stdClass $record
|
|
* @param array $options
|
|
* @return \core_search\document
|
|
*/
|
|
public function get_document($record, $options = array()) {
|
|
|
|
try {
|
|
$cm = $this->get_cm($this->get_module_name(), $record->id, $record->course);
|
|
$context = \context_module::instance($cm->id);
|
|
} catch (\dml_missing_record_exception $ex) {
|
|
// Notify it as we run here as admin, we should see everything.
|
|
debugging('Error retrieving ' . $this->areaid . ' ' . $record->id . ' document, not all required data is available: ' .
|
|
$ex->getMessage(), DEBUG_DEVELOPER);
|
|
return false;
|
|
} catch (\dml_exception $ex) {
|
|
// Notify it as we run here as admin, we should see everything.
|
|
debugging('Error retrieving ' . $this->areaid . ' ' . $record->id . ' document: ' . $ex->getMessage(), DEBUG_DEVELOPER);
|
|
return false;
|
|
}
|
|
|
|
// Prepare associative array with data from DB.
|
|
$doc = \core_search\document_factory::instance($record->id, $this->componentname, $this->areaname);
|
|
$doc->set('title', content_to_text($record->name, false));
|
|
$doc->set('content', content_to_text($record->content, $record->contentformat));
|
|
$doc->set('contextid', $context->id);
|
|
$doc->set('courseid', $record->course);
|
|
$doc->set('owneruserid', \core_search\manager::NO_OWNER_ID);
|
|
$doc->set('modified', $record->timemodified);
|
|
$doc->set('description1', content_to_text($record->intro, $record->introformat));
|
|
|
|
return $doc;
|
|
}
|
|
|
|
/**
|
|
* Returns true if this area uses file indexing.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function uses_file_indexing() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Return the context info required to index files for
|
|
* this search area.
|
|
*
|
|
* @return array
|
|
*/
|
|
public function get_search_fileareas() {
|
|
$fileareas = array('intro', 'content'); // Fileareas.
|
|
|
|
return $fileareas;
|
|
}
|
|
}
|