MDL-58650 core_message: always use 'popup' processor for messages
[moodle.git] / message / output / popup / message_output_popup.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 2 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 /**
18  * Popup message processor
19  *
20  * @package   message_popup
21  * @copyright 2008 Luis Rodrigues
22  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v2 or later
23  */
25 require_once(__DIR__ . '/../../../config.php'); //included from messagelib (how to fix?)
26 require_once($CFG->dirroot.'/message/output/lib.php');
28 /**
29  * The popup message processor
30  *
31  * @package   message_popup
32  * @copyright 2008 Luis Rodrigues and Martin Dougiamas
33  * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
34  */
35 class message_output_popup extends message_output {
37     /**
38      * Do nothing on send_message.
39      *
40      * @param object $eventdata the event data submitted by the message sender plus $eventdata->savedmessageid
41      * @return true if ok, false if error
42      */
43     public function send_message($eventdata) {
44         global $DB;
46         //hold onto the popup processor id because /admin/cron.php sends a lot of messages at once
47         static $processorid = null;
49         //prevent users from getting popup notifications of messages to themselves (happens with forum notifications)
50         if ($eventdata->userfrom->id != $eventdata->userto->id) {
51             if (empty($processorid)) {
52                 $processor = $DB->get_record('message_processors', array('name'=>'popup'));
53                 $processorid = $processor->id;
54             }
55             $procmessage = new stdClass();
56             $procmessage->unreadmessageid = $eventdata->savedmessageid;
57             $procmessage->processorid     = $processorid;
59             //save this message for later delivery
60             $DB->insert_record('message_working', $procmessage);
62             if ($eventdata->notification) {
63                 if (!$DB->record_exists('message_popup', ['messageid' => $eventdata->savedmessageid, 'isread' => 0])) {
64                     $record = new StdClass();
65                     $record->messageid = $eventdata->savedmessageid;
66                     $record->isread = 0;
68                     $DB->insert_record('message_popup', $record);
69                 }
70             }
71         }
73         return true;
74     }
76     /**
77      * Creates necessary fields in the messaging config form.
78      *
79      * @param array $preferences An array of user preferences
80      */
81     function config_form($preferences) {
82         return null;
83     }
85     /**
86      * Parses the submitted form data and saves it into preferences array.
87      *
88      * @param stdClass $form preferences form class
89      * @param array $preferences preferences array
90      */
91     public function process_form($form, &$preferences) {
92         return true;
93     }
95     /**
96      * Loads the config data from database to put on the form during initial form display
97      *
98      * @param array $preferences preferences array
99      * @param int $userid the user id
100      */
101     public function load_data(&$preferences, $userid) {
102         global $USER;
103         return true;
104     }
106     /**
107      * Don't show this processor on the message preferences page. The user can't disable
108      * the notifications for user-to-user messaging.
109      *
110      * @return bool
111      */
112     public function has_message_preferences() {
113         return false;
114     }
116     /**
117      * Handles the message_viewed event to keep data in sync.
118      *
119      * @param \core\event\base $event The event data
120      */
121     public static function message_viewed(\core\event\base $event) {
122         global $DB;
124         if ($record = $DB->get_record('message_popup', ['messageid' => $event->other['messageid']])) {
125             // The id can change when the moving to the message_read table.
126             $record->messageid = $event->objectid;
127             $record->isread = 1;
128             $DB->update_record('message_popup', $record);
129         }
130     }
132     /**
133      * Determines if this processor should process a message regardless of user preferences or site settings.
134      *
135      * @return bool
136      */
137     public function force_process_messages() {
138         global $CFG;
140         return !empty($CFG->messaging);
141     }