Search moodle.org's
Developer Documentation

See Release Notes
Long Term Support Release

  • Bug fixes for general core bugs in 4.1.x will end 13 November 2023 (12 months).
  • Bug fixes for security issues in 4.1.x will end 10 November 2025 (36 months).
  • PHP version: minimum PHP 7.4.0 Note: minimum PHP version has increased since Moodle 4.0. PHP 8.0.x is supported too.
<?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 = [];

> /** @var array delete of course index. */ public function is_installed() { > protected $deletes = []; 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; } }