Merge branch 'MDL-55082-master' of git://github.com/merrill-oakland/moodle
[moodle.git] / search / tests / fixtures / mock_search_area.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 namespace core_mocksearch\search;
19 /**
20  * Component implementing search for testing purposes.
21  *
22  * @package   core_search
23  * @category  phpunit
24  * @copyright David Monllao {@link http://www.davidmonllao.com}
25  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
26  */
28 defined('MOODLE_INTERNAL') || die;
30 class mock_search_area extends \core_search\area\base {
32     /**
33      * Multiple context level so we can test get_areas_user_accesses.
34      * @var int[]
35      */
36     protected static $levels = [CONTEXT_SYSTEM, CONTEXT_USER];
38     /**
39      * To make things easier, base class required config stuff.
40      *
41      * @return bool
42      */
43     public function is_enabled() {
44         return true;
45     }
47     public function get_recordset_by_timestamp($modifiedfrom = 0) {
48         global $DB;
50         $sql = "SELECT * FROM {temp_mock_search_area} WHERE timemodified >= ? ORDER BY timemodified ASC";
51         return $DB->get_recordset_sql($sql, array($modifiedfrom));
52     }
54     public function get_document($record, $options = array()) {
55         global $USER;
57         $info = unserialize($record->info);
59         // Prepare associative array with data from DB.
60         $doc = \core_search\document_factory::instance($record->id, $this->componentname, $this->areaname);
61         $doc->set('title', $info->title);
62         $doc->set('content', $info->content);
63         $doc->set('contextid', $info->contextid);
64         $doc->set('courseid', $info->courseid);
65         $doc->set('userid', $info->userid);
66         $doc->set('owneruserid', $info->owneruserid);
67         $doc->set('modified', $record->timemodified);
69         return $doc;
70     }
72     public function attach_files($document) {
73         global $DB;
75         if (!$record = $DB->get_record('temp_mock_search_area', array('id' => $document->get('itemid')))) {
76             return;
77         }
79         $info = unserialize($record->info);
80         foreach ($info->attachfileids as $fileid) {
81             $document->add_stored_file($fileid);
82         }
83     }
85     public function uses_file_indexing() {
86         return true;
87     }
89     public function check_access($id) {
90         global $DB, $USER;
92         if ($record = $DB->get_record('temp_mock_search_area', array('id' => $id))) {
93             $info = unserialize($record->info);
95             if (in_array($USER->id, $info->denyuserids)) {
96                 return \core_search\manager::ACCESS_DENIED;
97             }
98             return \core_search\manager::ACCESS_GRANTED;
99         }
100         return \core_search\manager::ACCESS_DELETED;
101     }
103     public function get_doc_url(\core_search\document $doc) {
104         return new \moodle_url('/index.php');
105     }
107     public function get_context_url(\core_search\document $doc) {
108         return new \moodle_url('/index.php');
109     }