[ Index ] |
PHP Cross Reference of moodle-2.8 |
[Summary view] [Print] [Text view]
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 * A page displaying the user's contacts and messages 19 * 20 * @package core_message 21 * @copyright 2010 Andrew Davis 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 25 require_once('../config.php'); 26 require_once ('lib.php'); 27 require_once ('send_form.php'); 28 29 require_login(0, false); 30 31 if (isguestuser()) { 32 redirect($CFG->wwwroot); 33 } 34 35 if (empty($CFG->messaging)) { 36 print_error('disabled', 'message'); 37 } 38 39 //'viewing' is the preferred URL parameter but we'll still accept usergroup in case its referenced externally 40 $usergroup = optional_param('usergroup', MESSAGE_VIEW_UNREAD_MESSAGES, PARAM_ALPHANUMEXT); 41 $viewing = optional_param('viewing', $usergroup, PARAM_ALPHANUMEXT); 42 43 $history = optional_param('history', MESSAGE_HISTORY_SHORT, PARAM_INT); 44 $search = optional_param('search', '', PARAM_CLEAN); //TODO: use PARAM_RAW, but make sure we use s() and p() properly 45 46 //the same param as 1.9 and the param we have been logging. Use this parameter. 47 $user1id = optional_param('user1', $USER->id, PARAM_INT); 48 //2.0 shipped using this param. Retaining it only for compatibility. It should be removed. 49 $user1id = optional_param('user', $user1id, PARAM_INT); 50 51 //the same param as 1.9 and the param we have been logging. Use this parameter. 52 $user2id = optional_param('user2', 0, PARAM_INT); 53 //The class send_form supplies the receiving user id as 'id' 54 $user2id = optional_param('id', $user2id, PARAM_INT); 55 56 $addcontact = optional_param('addcontact', 0, PARAM_INT); // adding a contact 57 $removecontact = optional_param('removecontact', 0, PARAM_INT); // removing a contact 58 $blockcontact = optional_param('blockcontact', 0, PARAM_INT); // blocking a contact 59 $unblockcontact = optional_param('unblockcontact', 0, PARAM_INT); // unblocking a contact 60 61 //for search 62 $advancedsearch = optional_param('advanced', 0, PARAM_INT); 63 64 //if they have numerous contacts or are viewing course participants we might need to page through them 65 $page = optional_param('page', 0, PARAM_INT); 66 67 $url = new moodle_url('/message/index.php', array('user1' => $user1id)); 68 69 if ($user2id !== 0) { 70 $url->param('user2', $user2id); 71 72 //Switch view back to contacts if: 73 //1) theyve searched and selected a user 74 //2) they've viewed recent messages or notifications and clicked through to a user 75 if ($viewing == MESSAGE_VIEW_SEARCH || $viewing == MESSAGE_VIEW_RECENT_NOTIFICATIONS) { 76 $viewing = MESSAGE_VIEW_CONTACTS; 77 } 78 } 79 80 if ($viewing != MESSAGE_VIEW_UNREAD_MESSAGES) { 81 $url->param('viewing', $viewing); 82 } 83 84 $PAGE->set_url($url); 85 86 // Disable message notification popups while the user is viewing their messages 87 $PAGE->set_popup_notification_allowed(false); 88 89 $user1 = null; 90 $currentuser = true; 91 $showactionlinks = true; 92 if ($user1id != $USER->id) { 93 $user1 = $DB->get_record('user', array('id' => $user1id)); 94 if (!$user1) { 95 print_error('invaliduserid'); 96 } 97 $currentuser = false;//if we're looking at someone else's messages we need to lock/remove some UI elements 98 $showactionlinks = false; 99 } else { 100 $user1 = $USER; 101 } 102 unset($user1id); 103 104 $user2 = null; 105 if (!empty($user2id)) { 106 $user2 = core_user::get_user($user2id); 107 if (!$user2) { 108 print_error('invaliduserid'); 109 } 110 } 111 unset($user2id); 112 113 $user2realuser = !empty($user2) && core_user::is_real_user($user2->id); 114 $showactionlinks = $showactionlinks && $user2realuser; 115 $systemcontext = context_system::instance(); 116 117 // Is the user involved in the conversation? 118 // Do they have the ability to read other user's conversations? 119 if (!message_current_user_is_involved($user1, $user2) && !has_capability('moodle/site:readallmessages', $systemcontext)) { 120 print_error('accessdenied','admin'); 121 } 122 123 if (substr($viewing, 0, 7) == MESSAGE_VIEW_COURSE) { 124 $courseid = intval(substr($viewing, 7)); 125 require_login($courseid); 126 require_capability('moodle/course:viewparticipants', context_course::instance($courseid)); 127 $PAGE->set_pagelayout('incourse'); 128 } else { 129 $PAGE->set_pagelayout('standard'); 130 $PAGE->set_context(context_user::instance($user1->id)); 131 } 132 if (!empty($user1->id) && $user1->id != $USER->id) { 133 $PAGE->navigation->extend_for_user($user1); 134 } 135 if (!empty($user2->id) && $user2realuser && ($user2->id != $USER->id)) { 136 $PAGE->navigation->extend_for_user($user2); 137 } 138 139 /// Process any contact maintenance requests there may be 140 if ($addcontact and confirm_sesskey()) { 141 message_add_contact($addcontact); 142 redirect($CFG->wwwroot . '/message/index.php?viewing=contacts&id='.$addcontact); 143 } 144 if ($removecontact and confirm_sesskey()) { 145 message_remove_contact($removecontact); 146 } 147 if ($blockcontact and confirm_sesskey()) { 148 message_block_contact($blockcontact); 149 } 150 if ($unblockcontact and confirm_sesskey()) { 151 message_unblock_contact($unblockcontact); 152 } 153 154 //was a message sent? Do NOT allow someone looking at someone else's messages to send them. 155 $messageerror = null; 156 if ($currentuser && !empty($user2) && has_capability('moodle/site:sendmessage', $systemcontext)) { 157 // Check that the user is not blocking us!! 158 if ($contact = $DB->get_record('message_contacts', array('userid' => $user2->id, 'contactid' => $user1->id))) { 159 if ($contact->blocked and !has_capability('moodle/site:readallmessages', $systemcontext)) { 160 $messageerror = get_string('userisblockingyou', 'message'); 161 } 162 } 163 $userpreferences = get_user_preferences(NULL, NULL, $user2->id); 164 165 if (!empty($userpreferences['message_blocknoncontacts'])) { // User is blocking non-contacts 166 if (empty($contact)) { // We are not a contact! 167 $messageerror = get_string('userisblockingyounoncontact', 'message', fullname($user2)); 168 } 169 } 170 171 if (empty($messageerror)) { 172 $mform = new send_form(); 173 $defaultmessage = new stdClass; 174 $defaultmessage->id = $user2->id; 175 $defaultmessage->viewing = $viewing; 176 $defaultmessage->message = ''; 177 178 //Check if the current user has sent a message 179 $data = $mform->get_data(); 180 if (!empty($data) && !empty($data->message)) { 181 if (!confirm_sesskey()) { 182 print_error('invalidsesskey'); 183 } 184 $messageid = message_post_message($user1, $user2, $data->message, FORMAT_MOODLE); 185 if (!empty($messageid)) { 186 //including the id of the user sending the message in the logged URL so the URL works for admins 187 //note message ID may be misleading as the message may potentially get a different ID when moved from message to message_read 188 redirect($CFG->wwwroot . '/message/index.php?viewing='.$viewing.'&id='.$user2->id); 189 } 190 } 191 } 192 } 193 194 $strmessages = get_string('messages', 'message'); 195 if ($user2realuser) { 196 $user2fullname = fullname($user2); 197 198 $PAGE->set_title("$strmessages: $user2fullname"); 199 $PAGE->set_heading("$strmessages: $user2fullname"); 200 } else { 201 $PAGE->set_title("{$SITE->shortname}: $strmessages"); 202 $PAGE->set_heading("{$SITE->shortname}: $strmessages"); 203 } 204 205 //now the page contents 206 echo $OUTPUT->header(); 207 208 echo $OUTPUT->box_start('message'); 209 210 $countunread = 0; //count of unread messages from $user2 211 $countunreadtotal = 0; //count of unread messages from all users 212 213 //we're dealing with unread messages early so the contact list will accurately reflect what is read/unread 214 $viewingnewmessages = false; 215 if (!empty($user2)) { 216 //are there any unread messages from $user2 217 $countunread = message_count_unread_messages($user1, $user2); 218 if ($countunread>0) { 219 //mark the messages we're going to display as read 220 message_mark_messages_read($user1->id, $user2->id); 221 if($viewing == MESSAGE_VIEW_UNREAD_MESSAGES) { 222 $viewingnewmessages = true; 223 } 224 } 225 } 226 $countunreadtotal = message_count_unread_messages($user1); 227 228 if ($currentuser && $countunreadtotal == 0 && $viewing == MESSAGE_VIEW_UNREAD_MESSAGES && empty($user2)) { 229 // If the user has no unread messages, show the search box. 230 // We don't do this when a user is viewing another user's messages as search doesn't 231 // handle user A searching user B's messages properly. 232 $viewing = MESSAGE_VIEW_SEARCH; 233 } 234 235 $blockedusers = message_get_blocked_users($user1, $user2); 236 $countblocked = count($blockedusers); 237 238 list($onlinecontacts, $offlinecontacts, $strangers) = message_get_contacts($user1, $user2); 239 240 message_print_contact_selector($countunreadtotal, $viewing, $user1, $user2, $blockedusers, $onlinecontacts, $offlinecontacts, $strangers, $showactionlinks, $page); 241 242 echo html_writer::start_tag('div', array('class' => 'messagearea mdl-align')); 243 if (!empty($user2)) { 244 245 echo html_writer::start_tag('div', array('class' => 'mdl-left messagehistory')); 246 247 $visible = 'visible'; 248 $hidden = 'hiddenelement'; //cant just use hidden as mform adds that class to its fieldset for something else 249 250 $recentlinkclass = $recentlabelclass = $historylinkclass = $historylabelclass = $visible; 251 if ($history == MESSAGE_HISTORY_ALL) { 252 $displaycount = 0; 253 254 $recentlabelclass = $historylinkclass = $hidden; 255 } else if($viewingnewmessages) { 256 //if user is viewing new messages only show them the new messages 257 $displaycount = $countunread; 258 259 $recentlabelclass = $historylabelclass = $hidden; 260 } else { 261 //default to only showing the last few messages 262 $displaycount = MESSAGE_SHORTVIEW_LIMIT; 263 264 if ($countunread>MESSAGE_SHORTVIEW_LIMIT) { 265 $displaycount = $countunread; 266 } 267 268 $recentlinkclass = $historylabelclass = $hidden; 269 } 270 271 $messagehistorylink = html_writer::start_tag('div', array('class' => 'mdl-align messagehistorytype')); 272 $messagehistorylink .= html_writer::link($PAGE->url->out(false).'&history='.MESSAGE_HISTORY_ALL, 273 get_string('messagehistoryfull','message'), 274 array('class' => $historylinkclass)); 275 276 $messagehistorylink .= html_writer::start_tag('span', array('class' => $historylabelclass)); 277 $messagehistorylink .= get_string('messagehistoryfull','message'); 278 $messagehistorylink .= html_writer::end_tag('span'); 279 280 $messagehistorylink .= ' | '.html_writer::link($PAGE->url->out(false).'&history='.MESSAGE_HISTORY_SHORT, 281 get_string('mostrecent','message'), 282 array('class' => $recentlinkclass)); 283 284 $messagehistorylink .= html_writer::start_tag('span', array('class' => $recentlabelclass)); 285 $messagehistorylink .= get_string('mostrecent','message'); 286 $messagehistorylink .= html_writer::end_tag('span'); 287 288 if ($viewingnewmessages) { 289 $messagehistorylink .= ' | '.html_writer::start_tag('span');//, array('class' => $historyclass) 290 $messagehistorylink .= get_string('unreadnewmessages','message',$displaycount); 291 $messagehistorylink .= html_writer::end_tag('span'); 292 } 293 294 $messagehistorylink .= html_writer::end_tag('div'); 295 296 message_print_message_history($user1, $user2, $search, $displaycount, $messagehistorylink, $viewingnewmessages, $showactionlinks); 297 echo html_writer::end_tag('div'); 298 299 //send message form 300 if ($currentuser && has_capability('moodle/site:sendmessage', $systemcontext) && $user2realuser) { 301 echo html_writer::start_tag('div', array('class' => 'mdl-align messagesend')); 302 if (!empty($messageerror)) { 303 echo html_writer::tag('span', $messageerror, array('id' => 'messagewarning')); 304 } else { 305 // Display a warning if the current user is blocking non-contacts and is about to message to a non-contact 306 // Otherwise they may wonder why they never get a reply 307 $blocknoncontacts = get_user_preferences('message_blocknoncontacts', '', $user1->id); 308 if (!empty($blocknoncontacts)) { 309 $contact = $DB->get_record('message_contacts', array('userid' => $user1->id, 'contactid' => $user2->id)); 310 if (empty($contact)) { 311 $msg = get_string('messagingblockednoncontact', 'message', fullname($user2)); 312 echo html_writer::tag('span', $msg, array('id' => 'messagewarning')); 313 } 314 } 315 316 $mform = new send_form(); 317 $defaultmessage = new stdClass; 318 $defaultmessage->id = $user2->id; 319 $defaultmessage->viewing = $viewing; 320 $defaultmessage->message = ''; 321 //$defaultmessage->messageformat = FORMAT_MOODLE; 322 $mform->set_data($defaultmessage); 323 $mform->display(); 324 } 325 echo html_writer::end_tag('div'); 326 } 327 } else if ($viewing == MESSAGE_VIEW_SEARCH) { 328 message_print_search($advancedsearch, $user1); 329 } else if ($viewing == MESSAGE_VIEW_RECENT_CONVERSATIONS) { 330 message_print_recent_conversations($user1, false, $showactionlinks); 331 } else if ($viewing == MESSAGE_VIEW_RECENT_NOTIFICATIONS) { 332 message_print_recent_notifications($user1); 333 } 334 echo html_writer::end_tag('div'); 335 336 echo $OUTPUT->box_end(); 337 338 echo $OUTPUT->footer(); 339 340
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 20:29:05 2014 | Cross-referenced by PHPXref 0.7.1 |