/** * Tests retrieving messages. */ public function test_get_messages() { // Create some users. $user1 = self::getDataGenerator()->create_user(); $user2 = self::getDataGenerator()->create_user(); // The person doing the search. $this->setUser($user1); // Send some messages back and forth. $time = 1; $this->send_fake_message($user1, $user2, 'Yo!', 0, $time + 1); $this->send_fake_message($user2, $user1, 'Sup mang?', 0, $time + 2); $this->send_fake_message($user1, $user2, 'Writing PHPUnit tests!', 0, $time + 3); $this->send_fake_message($user2, $user1, 'Word.', 0, $time + 4); // Retrieve the messages. $messages = \core_message\api::get_messages($user1->id, $user2->id); // Confirm the message data is correct. $this->assertEquals(4, count($messages)); $message1 = $messages[0]; $message2 = $messages[1]; $message3 = $messages[2]; $message4 = $messages[3]; $this->assertEquals($user1->id, $message1->useridfrom); $this->assertEquals($user2->id, $message1->useridto); $this->assertTrue($message1->displayblocktime); $this->assertContains('Yo!', $message1->text); $this->assertEquals($user2->id, $message2->useridfrom); $this->assertEquals($user1->id, $message2->useridto); $this->assertFalse($message2->displayblocktime); $this->assertContains('Sup mang?', $message2->text); $this->assertEquals($user1->id, $message3->useridfrom); $this->assertEquals($user2->id, $message3->useridto); $this->assertFalse($message3->displayblocktime); $this->assertContains('Writing PHPUnit tests!', $message3->text); $this->assertEquals($user2->id, $message4->useridfrom); $this->assertEquals($user1->id, $message4->useridto); $this->assertFalse($message4->displayblocktime); $this->assertContains('Word.', $message4->text); }
/** * Get messagearea messages. * * @param int $currentuserid The current user's id * @param int $otheruserid The other user's id * @param int $limitfrom * @param int $limitnum * @param boolean $newest * @return stdClass * @throws moodle_exception * @since 3.2 */ public static function data_for_messagearea_messages($currentuserid, $otheruserid, $limitfrom = 0, $limitnum = 0, $newest = false) { global $CFG, $PAGE, $USER; // Check if messaging is enabled. if (empty($CFG->messaging)) { throw new moodle_exception('disabled', 'message'); } $systemcontext = context_system::instance(); $params = array('currentuserid' => $currentuserid, 'otheruserid' => $otheruserid, 'limitfrom' => $limitfrom, 'limitnum' => $limitnum, 'newest' => $newest); self::validate_parameters(self::data_for_messagearea_messages_parameters(), $params); self::validate_context($systemcontext); if ($USER->id != $currentuserid && !has_capability('moodle/site:readallmessages', $systemcontext)) { throw new moodle_exception('You do not have permission to perform this action.'); } if ($newest) { $sort = 'timecreated DESC'; } else { $sort = 'timecreated ASC'; } $messages = \core_message\api::get_messages($currentuserid, $otheruserid, $limitfrom, $limitnum, $sort); $messages = new \core_message\output\messagearea\messages($currentuserid, $otheruserid, $messages); $renderer = $PAGE->get_renderer('core_message'); return $messages->export_for_template($renderer); }
/** * Get messagearea messages. * * @param int $currentuserid The current user's id * @param int $otheruserid The other user's id * @param int $limitfrom * @param int $limitnum * @param boolean $newest * @return stdClass * @throws moodle_exception * @since 3.2 */ public static function data_for_messagearea_messages($currentuserid, $otheruserid, $limitfrom = 0, $limitnum = 0, $newest = false, $timefrom = 0) { global $CFG, $PAGE, $USER; // Check if messaging is enabled. if (empty($CFG->messaging)) { throw new moodle_exception('disabled', 'message'); } $systemcontext = context_system::instance(); $params = array( 'currentuserid' => $currentuserid, 'otheruserid' => $otheruserid, 'limitfrom' => $limitfrom, 'limitnum' => $limitnum, 'newest' => $newest, 'timefrom' => $timefrom, ); self::validate_parameters(self::data_for_messagearea_messages_parameters(), $params); self::validate_context($systemcontext); if (($USER->id != $currentuserid) && !has_capability('moodle/site:readallmessages', $systemcontext)) { throw new moodle_exception('You do not have permission to perform this action.'); } if ($newest) { $sort = 'timecreated DESC'; } else { $sort = 'timecreated ASC'; } // We need to enforce a one second delay on messages to avoid race conditions of current // messages still being sent. // // There is a chance that we could request messages before the current time's // second has elapsed and while other messages are being sent in that same second. In which // case those messages will be lost. // // Instead we ignore the current time in the result set to ensure that second is allowed to finish. if (!empty($timefrom)) { $timeto = time() - 1; } else { $timeto = 0; } // No requesting messages from the current time, as stated above. if ($timefrom == time()) { $messages = []; } else { $messages = \core_message\api::get_messages($currentuserid, $otheruserid, $limitfrom, $limitnum, $sort, $timefrom, $timeto); } $messages = new \core_message\output\messagearea\messages($currentuserid, $otheruserid, $messages); $renderer = $PAGE->get_renderer('core_message'); return $messages->export_for_template($renderer); }
if (!empty($conversations)) { $contact = reset($conversations); $user2->id = $contact->userid; } } else { // The user has specifically requested to see a conversation. Add the flag to // the context so that we can render the messaging app appropriately - this is // used for smaller screens as it allows the UI to be responsive. $requestedconversation = true; } // Mark the conversation as read. if (!empty($user2->id)) { if ($currentuser && isset($conversations[$user2->id])) { // Mark the conversation we are loading as read. \core_message\api::mark_all_read_for_user($user1->id, $user2->id); // Ensure the UI knows it's read as well. $conversations[$user2->id]->isread = 1; } $messages = \core_message\api::get_messages($user1->id, $user2->id, 0, 20, 'timecreated DESC'); } $messagearea = new \core_message\output\messagearea\message_area($user1->id, $user2->id, $conversations, $messages, $requestedconversation); // Now the page contents. echo $OUTPUT->header(); echo $OUTPUT->heading(get_string('messages', 'message')); // Display a message that the user is viewing someone else's messages. if (!$currentuser) { $notify = new \core\output\notification(get_string('viewinganotherusersmessagearea', 'message'), \core\output\notification::NOTIFY_WARNING); echo $OUTPUT->render($notify); } echo $renderer->render($messagearea); echo $OUTPUT->footer();
/** * Test retrieving messages by providing a minimum and maximum timecreated value. */ public function test_get_messages_time_from_and_to() { // Create some users. $user1 = self::getDataGenerator()->create_user(); $user2 = self::getDataGenerator()->create_user(); // The person doing the search. $this->setUser($user1); // Send some messages back and forth. $time = 1; $this->send_fake_message($user1, $user2, 'Message 1', 0, $time + 1); $this->send_fake_message($user2, $user1, 'Message 2', 0, $time + 2); $this->send_fake_message($user1, $user2, 'Message 3', 0, $time + 3); $this->send_fake_message($user2, $user1, 'Message 4', 0, $time + 4); // Retrieve the messages from $time + 2 up until $time + 3, which should be 2nd and 3rd message. $messages = \core_message\api::get_messages($user1->id, $user2->id, 0, 0, 'timecreated ASC', $time + 2, $time + 3); // Confirm the message data is correct. $this->assertEquals(2, count($messages)); $message1 = $messages[0]; $message2 = $messages[1]; $this->assertContains('Message 2', $message1->text); $this->assertContains('Message 3', $message2->text); }