mirror of
https://github.com/moodle/moodle.git
synced 2025-03-13 04:01:40 +01:00
Adds new API support within search engines for optional methods to delete data for courses and contexts, and implements this for the two core search plugins (simpledb and solr). The new API is automatically called when courses or contexts are deleted. When a whole course is deleted, it only sends the course delete rather than sending 1,000 separate context deletions as each activity/block is deleted.
154 lines
4.3 KiB
PHP
154 lines
4.3 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/>.
|
|
|
|
namespace mock_search;
|
|
|
|
/**
|
|
* Search engine for testing purposes.
|
|
*
|
|
* @package core_search
|
|
* @category phpunit
|
|
* @copyright David Monllao {@link http://www.davidmonllao.com}
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
|
|
use core_search\manager;
|
|
|
|
defined('MOODLE_INTERNAL') || die;
|
|
|
|
class engine extends \core_search\engine {
|
|
|
|
/** @var float If set, waits when adding each document (seconds) */
|
|
protected $adddelay = 0;
|
|
|
|
/** @var \core_search\document[] Documents added */
|
|
protected $added = [];
|
|
|
|
/** @var array Schema updates applied */
|
|
protected $schemaupdates = [];
|
|
|
|
public function is_installed() {
|
|
return true;
|
|
}
|
|
|
|
public function is_server_ready() {
|
|
return true;
|
|
}
|
|
|
|
public function add_document($document, $fileindexing = false) {
|
|
if ($this->adddelay) {
|
|
\testable_core_search::fake_current_time(manager::get_current_time() + $this->adddelay);
|
|
}
|
|
$this->added[] = $document;
|
|
return true;
|
|
}
|
|
|
|
public function execute_query($data, $usercontexts, $limit = 0) {
|
|
// No need to implement.
|
|
}
|
|
|
|
public function delete($areaid = null) {
|
|
return null;
|
|
}
|
|
|
|
public function to_document(\core_search\base $searcharea, $docdata) {
|
|
return parent::to_document($searcharea, $docdata);
|
|
}
|
|
|
|
public function get_course($courseid) {
|
|
return parent::get_course($courseid);
|
|
}
|
|
|
|
public function get_search_area($areaid) {
|
|
return parent::get_search_area($areaid);
|
|
}
|
|
|
|
public function get_query_total_count() {
|
|
return 0;
|
|
}
|
|
|
|
/**
|
|
* Sets an add delay to simulate time taken indexing.
|
|
*
|
|
* @param float $seconds Delay in seconds for each document
|
|
*/
|
|
public function set_add_delay($seconds) {
|
|
$this->adddelay = $seconds;
|
|
}
|
|
|
|
/**
|
|
* Gets the list of indexed (added) documents since last time this function
|
|
* was called.
|
|
*
|
|
* @return \core_search\document[] List of documents, in order added.
|
|
*/
|
|
public function get_and_clear_added_documents() {
|
|
$added = $this->added;
|
|
$this->added = [];
|
|
return $added;
|
|
}
|
|
|
|
public function update_schema($oldversion, $newversion) {
|
|
$this->schemaupdates[] = [$oldversion, $newversion];
|
|
}
|
|
|
|
/**
|
|
* Gets all schema updates applied, as an array. Each entry has an array with two values,
|
|
* old and new version.
|
|
*
|
|
* @return array List of schema updates for comparison
|
|
*/
|
|
public function get_and_clear_schema_updates() {
|
|
$result = $this->schemaupdates;
|
|
$this->schemaupdates = [];
|
|
return $result;
|
|
}
|
|
|
|
/**
|
|
* Records delete of course index so it can be checked later.
|
|
*
|
|
* @param int $oldcourseid Course id
|
|
* @return bool True to indicate action taken
|
|
*/
|
|
public function delete_index_for_course(int $oldcourseid) {
|
|
$this->deletes[] = ['course', $oldcourseid];
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Records delete of context index so it can be checked later.
|
|
*
|
|
* @param int $oldcontextid Context id
|
|
* @return bool True to indicate action taken
|
|
*/
|
|
public function delete_index_for_context(int $oldcontextid) {
|
|
$this->deletes[] = ['context', $oldcontextid];
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Gets all course/context deletes applied, as an array. Each entry is an array with two
|
|
* values, the first is either 'course' or 'context' and the second is the id deleted.
|
|
*
|
|
* @return array List of deletes for comparison
|
|
*/
|
|
public function get_and_clear_deletes() {
|
|
$deletes = $this->deletes;
|
|
$this->deletes = [];
|
|
return $deletes;
|
|
}
|
|
}
|