Exemplo n.º 1
0
 /**
  * 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);
 }
Exemplo n.º 2
0
 /**
  * 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);
 }
Exemplo n.º 3
0
    /**
     * 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);
    }
Exemplo n.º 4
0
    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();
Exemplo n.º 5
0
 /**
  * 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);
 }