MDL-59834 Global Search: Indexing user messages
[moodle.git] / message / classes / search / base_message.php
CommitLineData
26c0d75f
DG
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/>.
16
17/**
18 * Search area base class for messages.
19 *
20 * @package core_message
21 * @copyright 2016 Devang Gaur
22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23 */
24
25namespace core_message\search;
26
27defined('MOODLE_INTERNAL') || die();
28
29require_once($CFG->dirroot . '/message/lib.php');
30
31/**
32 * Search area base class for messages.
33 *
34 * @package core_message
35 * @copyright 2016 Devang Gaur
36 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
37 */
38abstract class base_message extends \core_search\base {
39
40 /**
41 * The context levels the search area is working on.
42 * @var array
43 */
44 protected static $levels = [CONTEXT_USER];
45
26c0d75f
DG
46 /**
47 * Returns the document associated with this message record.
48 *
49 * @param stdClass $record
50 * @param array $options
51 * @return \core_search\document
52 */
53 public function get_document($record, $options = array()) {
bc60052d
MP
54
55 // Check if user still exists, before proceeding.
56 $user = \core_user::get_user($options['user1id'], 'deleted');
57 if ($user->deleted == 1) {
58 return false;
59 }
60
61 // Get user context.
26c0d75f
DG
62 try {
63 $usercontext = \context_user::instance($options['user1id']);
64 } catch (\moodle_exception $ex) {
65 // Notify it as we run here as admin, we should see everything.
66 debugging('Error retrieving ' . $this->areaid . ' ' . $record->id . ' document, not all required data is available: ' .
67 $ex->getMessage(), DEBUG_DEVELOPER);
68 return false;
69 }
70 // Prepare associative array with data from DB.
71 $doc = \core_search\document_factory::instance($record->id, $this->componentname, $this->areaname);
72 $doc->set('title', content_to_text($record->subject, false));
73 $doc->set('itemid', $record->id);
74 $doc->set('content', content_to_text($record->smallmessage, false));
75 $doc->set('contextid', $usercontext->id);
76 $doc->set('courseid', SITEID);
77 $doc->set('owneruserid', $options['user1id']);
78 $doc->set('userid', $options['user2id']);
79 $doc->set('modified', $record->timecreated);
80
81 // Check if this document should be considered new.
82 if (isset($options['lastindexedtime']) && $options['lastindexedtime'] < $record->timecreated) {
83 // If the document was created after the last index time, it must be new.
84 $doc->set_is_new(true);
85 }
86
87 return $doc;
88 }
89
90 /**
91 * Link to the message.
92 *
93 * @param \core_search\document $doc
94 * @return \moodle_url
95 */
96 public function get_doc_url(\core_search\document $doc) {
97 $users = $this->get_current_other_users($doc);
98 $position = 'm'.$doc->get('itemid');
99 return new \moodle_url('/message/index.php', array('history' => MESSAGE_HISTORY_ALL,
100 'user1' => $users['currentuserid'], 'user2' => $users['otheruserid']), $position);
101 }
102
103 /**
104 * Link to the conversation.
105 *
106 * @param \core_search\document $doc
107 * @return \moodle_url
108 */
109 public function get_context_url(\core_search\document $doc) {
110 $users = $this->get_current_other_users($doc);
111 return new \moodle_url('/message/index.php', array('user1' => $users['currentuserid'], 'user2' => $users['otheruserid']));
112 }
113
114 /**
115 * Sorting the current(user1) and other(user2) user in the conversation.
116 *
117 * @param \core_search\document $doc
118 * @return array()
119 */
120 protected function get_current_other_users($doc) {
121 global $USER;
122
123 $users = array();
124 if (($USER->id == $doc->get('owneruserid')) || (get_class($this) === 'message_sent')) {
125 $users['currentuserid'] = $doc->get('owneruserid');
126 $users['otheruserid'] = $doc->get('userid');
127 } else {
128 $users['currentuserid'] = $doc->get('userid');
129 $users['otheruserid'] = $doc->get('owneruserid');
130 }
131
132 return $users;
133 }
134
df762928 135}