예제 #1
0
 /**
  * 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;
 }
예제 #2
0
파일: api_test.php 프로젝트: dg711/moodle
 /**
  * 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);
 }
예제 #3
0
 /**
  * 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++;
     }
 }