From 346cd4085939ded1d1b7beb95a97d89667543356 Mon Sep 17 00:00:00 2001 From: Juan Leyva Date: Mon, 8 Jun 2015 14:38:01 +0200 Subject: [PATCH] MDL-50459 messages: Handle deleted users in external functions --- message/externallib.php | 31 ++++++++++++++++++++---------- message/tests/externallib_test.php | 10 ++++++---- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/message/externallib.php b/message/externallib.php index 10efb45076c..eb14f68801e 100644 --- a/message/externallib.php +++ b/message/externallib.php @@ -444,11 +444,16 @@ class core_message_external extends external_api { 'unread' => $contact->messagecount ); - $usercontextid = context_user::instance($contact->id)->id; - $newcontact['profileimageurl'] = moodle_url::make_webservice_pluginfile_url( - $usercontextid, 'user', 'icon', null, '/', 'f1')->out(false); - $newcontact['profileimageurlsmall'] = moodle_url::make_webservice_pluginfile_url( - $usercontextid, 'user', 'icon', null, '/', 'f2')->out(false); + $usercontext = context_user::instance($contact->id, IGNORE_MISSING); + if ($usercontext) { + $newcontact['profileimageurl'] = moodle_url::make_webservice_pluginfile_url( + $usercontext->id, 'user', 'icon', null, '/', 'f1')->out(false); + $newcontact['profileimageurlsmall'] = moodle_url::make_webservice_pluginfile_url( + $usercontext->id, 'user', 'icon', null, '/', 'f2')->out(false); + } else { + $newcontact['profileimageurl'] = ''; + $newcontact['profileimageurlsmall'] = ''; + } $allcontacts[$mode][$key] = $newcontact; } @@ -576,11 +581,17 @@ class core_message_external extends external_api { $user->phone1 = null; $user->phone2 = null; - $usercontextid = context_user::instance($user->id)->id; - $newuser['profileimageurl'] = moodle_url::make_webservice_pluginfile_url( - $usercontextid, 'user', 'icon', null, '/', 'f1')->out(false); - $newuser['profileimageurlsmall'] = moodle_url::make_webservice_pluginfile_url( - $usercontextid, 'user', 'icon', null, '/', 'f2')->out(false); + $usercontext = context_user::instance($user->id, IGNORE_MISSING); + + if ($usercontext) { + $newuser['profileimageurl'] = moodle_url::make_webservice_pluginfile_url( + $usercontext->id, 'user', 'icon', null, '/', 'f1')->out(false); + $newuser['profileimageurlsmall'] = moodle_url::make_webservice_pluginfile_url( + $usercontext->id, 'user', 'icon', null, '/', 'f2')->out(false); + } else { + $newuser['profileimageurl'] = ''; + $newuser['profileimageurlsmall'] = ''; + } $user = $newuser; } diff --git a/message/tests/externallib_test.php b/message/tests/externallib_test.php index a9431cb744f..62cc271ba76 100644 --- a/message/tests/externallib_test.php +++ b/message/tests/externallib_test.php @@ -290,6 +290,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { $user_online->lastaccess = time(); $user_online = self::getDataGenerator()->create_user($user_online); $user_blocked = self::getDataGenerator()->create_user(); + $noreplyuser = core_user::get_user(core_user::NOREPLY_USER); // Login as user1. $this->setUser($user1); @@ -300,6 +301,7 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { $this->send_message($user_stranger, $user1, 'Hello there!'); $this->send_message($user_stranger, $user1, 'How you goin?'); $this->send_message($user_stranger, $user1, 'Cya!'); + $this->send_message($noreplyuser, $user1, 'I am not a real user'); // User_blocked sends a message to user1. $this->send_message($user_blocked, $user1, 'Here, have some spam.'); @@ -310,18 +312,18 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { $contacts = external_api::clean_returnvalue(core_message_external::get_contacts_returns(), $contacts); $this->assertCount(3, $contacts['offline']); $this->assertCount(1, $contacts['online']); - $this->assertCount(2, $contacts['strangers']); + $this->assertCount(3, $contacts['strangers']); core_message_external::block_contacts(array($user_blocked->id)); $contacts = core_message_external::get_contacts(); $contacts = external_api::clean_returnvalue(core_message_external::get_contacts_returns(), $contacts); $this->assertCount(3, $contacts['offline']); $this->assertCount(1, $contacts['online']); - $this->assertCount(1, $contacts['strangers']); + $this->assertCount(2, $contacts['strangers']); // Checking some of the fields returned. $stranger = array_pop($contacts['strangers']); - $this->assertEquals($user_stranger->id, $stranger['id']); - $this->assertEquals(3, $stranger['unread']); + $this->assertEquals(core_user::NOREPLY_USER, $stranger['id']); + $this->assertEquals(1, $stranger['unread']); } /**