/** * Deletes a conversation. * * @param int $userid The user id of who we want to delete the conversation for * @param int $otheruserid The user id of the other user in the conversation * @return array * @throws moodle_exception * @since 3.2 */ public static function delete_conversation($userid, $otheruserid) { global $CFG; // Check if private messaging between users is allowed. if (empty($CFG->messaging)) { throw new moodle_exception('disabled', 'message'); } // Warnings array, it can be empty at the end but is mandatory. $warnings = array(); // Validate params. $params = array('userid' => $userid, 'otheruserid' => $otheruserid); $params = self::validate_parameters(self::delete_conversation_parameters(), $params); // Validate context. $context = context_system::instance(); self::validate_context($context); $user = core_user::get_user($params['userid'], '*', MUST_EXIST); core_user::require_active_user($user); if (\core_message\api::can_delete_conversation($user->id)) { $status = \core_message\api::delete_conversation($user->id, $otheruserid); } else { throw new moodle_exception('You do not have permission to delete messages'); } $results = array('status' => $status, 'warnings' => $warnings); return $results; }
/** * Tests deleting a conversation. */ public function test_delete_conversation() { global $DB; // 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); // Delete the conversation as user 1. \core_message\api::delete_conversation($user1->id, $user2->id); $messages = $DB->get_records('message', array(), 'timecreated ASC'); $this->assertCount(4, $messages); $message1 = array_shift($messages); $message2 = array_shift($messages); $message3 = array_shift($messages); $message4 = array_shift($messages); $this->assertNotEmpty($message1->timeuserfromdeleted); $this->assertEmpty($message1->timeusertodeleted); $this->assertEmpty($message2->timeuserfromdeleted); $this->assertNotEmpty($message2->timeusertodeleted); $this->assertNotEmpty($message3->timeuserfromdeleted); $this->assertEmpty($message3->timeusertodeleted); $this->assertEmpty($message4->timeuserfromdeleted); $this->assertNotEmpty($message4->timeusertodeleted); }
/** * Test the message deleted event is fired when deleting a conversation. */ public function test_message_deleted_whole_conversation() { global $DB; // Create a message. $message = new stdClass(); $message->useridfrom = '1'; $message->useridto = '2'; $message->subject = 'Subject'; $message->message = 'Message'; $message->timeuserfromdeleted = 0; $message->timeusertodeleted = 0; $message->timecreated = 1; $messages = []; // Send this a few times. $messages[] = $DB->insert_record('message', $message); $message->timecreated++; $messages[] = $DB->insert_record('message', $message); $message->timecreated++; $messages[] = $DB->insert_record('message', $message); $message->timecreated++; $messages[] = $DB->insert_record('message', $message); // Create a read message. $message->timeread = time(); // Send this a few times. $message->timecreated++; $messages[] = $DB->insert_record('message_read', $message); $message->timecreated++; $messages[] = $DB->insert_record('message_read', $message); $message->timecreated++; $messages[] = $DB->insert_record('message_read', $message); $message->timecreated++; $messages[] = $DB->insert_record('message_read', $message); // Trigger and capture the event. $sink = $this->redirectEvents(); \core_message\api::delete_conversation(1, 2); $events = $sink->get_events(); // Check that there were the correct number of events triggered. $this->assertEquals(8, count($events)); // Check that the event data is valid. $i = 0; foreach ($events as $event) { $table = $i > 3 ? 'message_read' : 'message'; $this->assertInstanceOf('\\core\\event\\message_deleted', $event); $this->assertEquals($message->useridfrom, $event->userid); $this->assertEquals($message->useridto, $event->relateduserid); $this->assertEquals($table, $event->other['messagetable']); $this->assertEquals($messages[$i], $event->other['messageid']); $this->assertEquals($message->useridfrom, $event->other['useridfrom']); $this->assertEquals($message->useridto, $event->other['useridto']); $i++; } }