From f89055372e6b382adeee6c3d2598b135f5627abd Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Tue, 20 Nov 2018 11:32:02 +0800 Subject: [PATCH 1/4] MDL-64018 core_message: deprecated get_contacts web service --- lib/db/services.php | 3 ++- message/externallib.php | 12 ++++++++++++ message/upgrade.txt | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/db/services.php b/lib/db/services.php index 9f7392362d9..54636310e99 100644 --- a/lib/db/services.php +++ b/lib/db/services.php @@ -1075,7 +1075,8 @@ $functions = array( 'classname' => 'core_message_external', 'methodname' => 'get_contacts', 'classpath' => 'message/externallib.php', - 'description' => 'Retrieve the contact list', + 'description' => '** DEPRECATED ** Please do not call this function any more. + Retrieve the contact list', 'type' => 'read', 'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE), ), diff --git a/message/externallib.php b/message/externallib.php index f842b85a2f2..b56cd464845 100644 --- a/message/externallib.php +++ b/message/externallib.php @@ -2391,6 +2391,7 @@ class core_message_external extends external_api { /** * Get contacts parameters description. * + * @deprecated since 3.6 * @return external_function_parameters * @since Moodle 2.5 */ @@ -2401,6 +2402,7 @@ class core_message_external extends external_api { /** * Get contacts. * + * @deprecated since 3.6 * @return external_description * @since Moodle 2.5 */ @@ -2482,6 +2484,7 @@ class core_message_external extends external_api { /** * Get contacts return description. * + * @deprecated since 3.6 * @return external_description * @since Moodle 2.5 */ @@ -2528,6 +2531,15 @@ class core_message_external extends external_api { ); } + /** + * Marking the method as deprecated. + * + * @return bool + */ + public static function get_contacts_is_deprecated() { + return true; + } + /** * Search contacts parameters description. * diff --git a/message/upgrade.txt b/message/upgrade.txt index 868178cf154..cc7ee4fda52 100644 --- a/message/upgrade.txt +++ b/message/upgrade.txt @@ -49,6 +49,7 @@ information provided here is intended especially for developers. - core_message_external::data_for_messagearea_messages(). - core_message_external::data_for_messagearea_get_most_recent_message(). - core_message_external::data_for_messagearea_get_profile(). + - core_message_external::get_contacts(). * The following function has been added for getting the privacy messaging preference: - get_user_privacy_messaging_preference() From 715c45aac916291aa791b768be70cfdad7497f2b Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Tue, 20 Nov 2018 12:00:38 +0800 Subject: [PATCH 2/4] MDL-64018 core_message: added api::get_user_contacts This is to replace api::get_contacts when that gets deprecated. --- message/classes/api.php | 30 +++++++++++++++++++ message/tests/api_test.php | 60 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/message/classes/api.php b/message/classes/api.php index 86a22f81e67..017b81cd500 100644 --- a/message/classes/api.php +++ b/message/classes/api.php @@ -1029,6 +1029,36 @@ class api { return []; } + /** + * Get the contacts for a given user. + * + * @param int $userid + * @param int $limitfrom + * @param int $limitnum + * @return array An array of contacts + */ + public static function get_user_contacts(int $userid, int $limitfrom = 0, int $limitnum = 0) { + global $DB; + + $sql = "SELECT * + FROM {message_contacts} mc + WHERE mc.userid = ? OR mc.contactid = ? + ORDER BY timecreated DESC, id ASC"; + if ($contacts = $DB->get_records_sql($sql, [$userid, $userid], $limitfrom, $limitnum)) { + $userids = []; + foreach ($contacts as $contact) { + if ($contact->userid == $userid) { + $userids[] = $contact->contactid; + } else { + $userids[] = $contact->userid; + } + } + return helper::get_member_info($userid, $userids); + } + + return []; + } + /** * Returns the contacts count. * diff --git a/message/tests/api_test.php b/message/tests/api_test.php index 9e29bd14c14..5793128183f 100644 --- a/message/tests/api_test.php +++ b/message/tests/api_test.php @@ -2108,6 +2108,66 @@ class core_message_api_testcase extends core_message_messagelib_testcase { $this->assertNull($contact3->unreadcount); } + /** + * Tests retrieving user contacts. + */ + public function test_get_user_contacts() { + // Create some users. + $user1 = self::getDataGenerator()->create_user(); + + // Set as the user. + $this->setUser($user1); + + $user2 = new stdClass(); + $user2->firstname = 'User'; + $user2->lastname = 'A'; + $user2 = self::getDataGenerator()->create_user($user2); + + $user3 = new stdClass(); + $user3->firstname = 'User'; + $user3->lastname = 'B'; + $user3 = self::getDataGenerator()->create_user($user3); + + $user4 = new stdClass(); + $user4->firstname = 'User'; + $user4->lastname = 'C'; + $user4 = self::getDataGenerator()->create_user($user4); + + $user5 = new stdClass(); + $user5->firstname = 'User'; + $user5->lastname = 'D'; + $user5 = self::getDataGenerator()->create_user($user5); + + // Add some users as contacts. + \core_message\api::add_contact($user1->id, $user2->id); + \core_message\api::add_contact($user1->id, $user3->id); + \core_message\api::add_contact($user1->id, $user4->id); + + // Retrieve the contacts. + $contacts = \core_message\api::get_user_contacts($user1->id); + + // Confirm the data is correct. + $this->assertEquals(3, count($contacts)); + + ksort($contacts); + + $contact1 = array_shift($contacts); + $contact2 = array_shift($contacts); + $contact3 = array_shift($contacts); + + $this->assertEquals($user2->id, $contact1->id); + $this->assertEquals(fullname($user2), $contact1->fullname); + $this->assertTrue($contact1->iscontact); + + $this->assertEquals($user3->id, $contact2->id); + $this->assertEquals(fullname($user3), $contact2->fullname); + $this->assertTrue($contact2->iscontact); + + $this->assertEquals($user4->id, $contact3->id); + $this->assertEquals(fullname($user4), $contact3->fullname); + $this->assertTrue($contact3->iscontact); + } + /** * Tests retrieving messages. */ From c9b0f33f782a0a03b25c169157c12c7290128894 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Tue, 20 Nov 2018 12:01:01 +0800 Subject: [PATCH 3/4] MDL-64018 core_message: added external::get_user_contacts This is to replace usages of external::data_for_messagearea_contacts in the new UI. --- lib/db/services.php | 9 ++ message/externallib.php | 60 +++++++++ message/tests/externallib_test.php | 198 +++++++++++++++++++++++++++++ version.php | 2 +- 4 files changed, 268 insertions(+), 1 deletion(-) diff --git a/lib/db/services.php b/lib/db/services.php index 54636310e99..cc4ba890a21 100644 --- a/lib/db/services.php +++ b/lib/db/services.php @@ -1080,6 +1080,15 @@ $functions = array( 'type' => 'read', 'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE), ), + 'core_message_get_user_contacts' => array( + 'classname' => 'core_message_external', + 'methodname' => 'get_user_contacts', + 'classpath' => 'message/externallib.php', + 'description' => 'Retrieve the contact list', + 'type' => 'read', + 'ajax' => true, + 'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE), + ), 'core_message_get_conversations' => array( 'classname' => 'core_message_external', 'methodname' => 'get_conversations', diff --git a/message/externallib.php b/message/externallib.php index b56cd464845..05c76689eda 100644 --- a/message/externallib.php +++ b/message/externallib.php @@ -2226,6 +2226,66 @@ class core_message_external extends external_api { ); } + /** + * The user contacts return parameters. + * + * @return external_function_parameters + */ + public static function get_user_contacts_parameters() { + return new external_function_parameters( + array( + 'userid' => new external_value(PARAM_INT, 'The id of the user who we retrieving the contacts for'), + 'limitfrom' => new external_value(PARAM_INT, 'Limit from', VALUE_DEFAULT, 0), + 'limitnum' => new external_value(PARAM_INT, 'Limit number', VALUE_DEFAULT, 0) + ) + ); + } + + /** + * Get user contacts. + * + * @param int $userid The id of the user who we are viewing conversations for + * @param int $limitfrom + * @param int $limitnum + * @return array + * @throws moodle_exception + */ + public static function get_user_contacts(int $userid, int $limitfrom = 0, int $limitnum = 0) { + global $CFG, $USER; + + // Check if messaging is enabled. + if (empty($CFG->messaging)) { + throw new moodle_exception('disabled', 'message'); + } + + $systemcontext = context_system::instance(); + + $params = array( + 'userid' => $userid, + 'limitfrom' => $limitfrom, + 'limitnum' => $limitnum + ); + $params = self::validate_parameters(self::get_user_contacts_parameters(), $params); + self::validate_context($systemcontext); + + if (($USER->id != $params['userid']) && !has_capability('moodle/site:readallmessages', $systemcontext)) { + throw new moodle_exception('You do not have permission to perform this action.'); + } + + return \core_message\api::get_user_contacts($params['userid'], $params['limitfrom'], $params['limitnum']); + } + + /** + * The user contacts return structure. + * + * @return external_multiple_structure + */ + public static function get_user_contacts_returns() { + return new external_multiple_structure( + self::get_conversation_member_structure() + ); + } + /** * The get most recent message return parameters. * diff --git a/message/tests/externallib_test.php b/message/tests/externallib_test.php index 451b866a04e..7e89cc661a8 100644 --- a/message/tests/externallib_test.php +++ b/message/tests/externallib_test.php @@ -3191,6 +3191,193 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { core_message_external::data_for_messagearea_contacts($user->id); } + /** + * Tests retrieving contacts. + */ + public function test_get_user_contacts() { + $this->resetAfterTest(true); + + // Create some users. + $user1 = self::getDataGenerator()->create_user(); + + // Set as the user. + $this->setUser($user1); + + $user2 = new stdClass(); + $user2->firstname = 'User'; + $user2->lastname = 'A'; + $user2 = self::getDataGenerator()->create_user($user2); + + $user3 = new stdClass(); + $user3->firstname = 'User'; + $user3->lastname = 'B'; + $user3 = self::getDataGenerator()->create_user($user3); + + $user4 = new stdClass(); + $user4->firstname = 'User'; + $user4->lastname = 'C'; + $user4 = self::getDataGenerator()->create_user($user4); + + $user5 = new stdClass(); + $user5->firstname = 'User'; + $user5->lastname = 'D'; + $user5 = self::getDataGenerator()->create_user($user5); + + // Add some users as contacts. + \core_message\api::add_contact($user1->id, $user2->id); + \core_message\api::add_contact($user1->id, $user3->id); + \core_message\api::add_contact($user1->id, $user4->id); + + // Retrieve the contacts. + $result = core_message_external::get_user_contacts($user1->id); + + // We need to execute the return values cleaning process to simulate the web service server. + $result = external_api::clean_returnvalue(core_message_external::get_user_contacts_returns(), + $result); + + // Confirm the data is correct. + $contacts = $result; + usort($contacts, ['static', 'sort_contacts_id']); + $this->assertCount(3, $contacts); + + $contact1 = array_shift($contacts); + $contact2 = array_shift($contacts); + $contact3 = array_shift($contacts); + + $this->assertEquals($user2->id, $contact1['id']); + $this->assertEquals(fullname($user2), $contact1['fullname']); + $this->assertTrue($contact1['iscontact']); + + $this->assertEquals($user3->id, $contact2['id']); + $this->assertEquals(fullname($user3), $contact2['fullname']); + $this->assertTrue($contact2['iscontact']); + + $this->assertEquals($user4->id, $contact3['id']); + $this->assertEquals(fullname($user4), $contact3['fullname']); + $this->assertTrue($contact3['iscontact']); + } + + /** + * Tests retrieving contacts as another user. + */ + public function test_get_user_contacts_as_other_user() { + $this->resetAfterTest(true); + + $this->setAdminUser(); + + // Create some users. + $user1 = self::getDataGenerator()->create_user(); + + $user2 = new stdClass(); + $user2->firstname = 'User'; + $user2->lastname = 'A'; + $user2 = self::getDataGenerator()->create_user($user2); + + $user3 = new stdClass(); + $user3->firstname = 'User'; + $user3->lastname = 'B'; + $user3 = self::getDataGenerator()->create_user($user3); + + $user4 = new stdClass(); + $user4->firstname = 'User'; + $user4->lastname = 'C'; + $user4 = self::getDataGenerator()->create_user($user4); + + $user5 = new stdClass(); + $user5->firstname = 'User'; + $user5->lastname = 'D'; + $user5 = self::getDataGenerator()->create_user($user5); + + // Add some users as contacts. + \core_message\api::add_contact($user1->id, $user2->id); + \core_message\api::add_contact($user1->id, $user3->id); + \core_message\api::add_contact($user1->id, $user4->id); + + // Retrieve the contacts. + $result = core_message_external::get_user_contacts($user1->id); + + // We need to execute the return values cleaning process to simulate the web service server. + $result = external_api::clean_returnvalue(core_message_external::get_user_contacts_returns(), + $result); + + // Confirm the data is correct. + $contacts = $result; + usort($contacts, ['static', 'sort_contacts_id']); + $this->assertCount(3, $contacts); + + $contact1 = array_shift($contacts); + $contact2 = array_shift($contacts); + $contact3 = array_shift($contacts); + + $this->assertEquals($user2->id, $contact1['id']); + $this->assertEquals(fullname($user2), $contact1['fullname']); + $this->assertTrue($contact1['iscontact']); + + $this->assertEquals($user3->id, $contact2['id']); + $this->assertEquals(fullname($user3), $contact2['fullname']); + $this->assertTrue($contact2['iscontact']); + + $this->assertEquals($user4->id, $contact3['id']); + $this->assertEquals(fullname($user4), $contact3['fullname']); + $this->assertTrue($contact3['iscontact']); + } + + /** + * Tests retrieving contacts as another user without the proper capabilities. + */ + public function test_get_user_contacts_as_other_user_without_cap() { + $this->resetAfterTest(true); + + // Create some users. + $user1 = self::getDataGenerator()->create_user(); + $user2 = self::getDataGenerator()->create_user(); + + // The person retrieving the contacts for another user. + $this->setUser($user1); + + // Perform the WS call and ensure an exception is thrown. + $this->expectException('moodle_exception'); + core_message_external::get_user_contacts($user2->id); + } + + /** + * Tests retrieving contacts with messaging disabled. + */ + public function test_get_user_contacts_messaging_disabled() { + global $CFG; + + $this->resetAfterTest(true); + + // Create some skeleton data just so we can call the WS. + $user = self::getDataGenerator()->create_user(); + + // The person retrieving the contacts. + $this->setUser($user); + + // Disable messaging. + $CFG->messaging = 0; + + // Perform the WS call and ensure we are shown that it is disabled. + $this->expectException('moodle_exception'); + core_message_external::get_user_contacts($user->id); + } + + /** + * Test getting contacts when there are no results. + */ + public function test_get_user_contacts_no_results() { + $this->resetAfterTest(); + + $user1 = self::getDataGenerator()->create_user(); + + $this->setUser($user1); + + $requests = core_message_external::get_user_contacts($user1->id); + $requests = external_api::clean_returnvalue(core_message_external::get_user_contacts_returns(), $requests); + + $this->assertEmpty($requests); + } + /** * Tests retrieving messages. */ @@ -4564,6 +4751,17 @@ class core_message_externallib_testcase extends externallib_advanced_testcase { return $a['userid'] > $b['userid']; } + /** + * Comparison function for sorting contacts. + * + * @param array $a + * @param array $b + * @return bool + */ + protected static function sort_contacts_id($a, $b) { + return $a['id'] > $b['id']; + } + /** * Test verifying that conversations can be marked as favourite conversations. */ diff --git a/version.php b/version.php index 4c5fe15a3fd..2ae71e2a405 100644 --- a/version.php +++ b/version.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); -$version = 2018112000.01; // YYYYMMDD = weekly release date of this DEV branch. +$version = 2018112000.02; // YYYYMMDD = weekly release date of this DEV branch. // RR = release increments - 00 in DEV branches. // .XX = incremental changes. From 00e103a7b4518c40de25fe8c27a6ef5015970ed1 Mon Sep 17 00:00:00 2001 From: Mark Nelson Date: Tue, 20 Nov 2018 20:39:45 +0800 Subject: [PATCH 4/4] MDL-64018 core_message: use new web service in UI --- .../build/message_drawer_view_contacts_section_contacts.min.js | 2 +- message/amd/build/message_repository.min.js | 2 +- .../amd/src/message_drawer_view_contacts_section_contacts.js | 2 +- message/amd/src/message_repository.js | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/message/amd/build/message_drawer_view_contacts_section_contacts.min.js b/message/amd/build/message_drawer_view_contacts_section_contacts.min.js index 9b0b825f9e0..7035c6b4252 100644 --- a/message/amd/build/message_drawer_view_contacts_section_contacts.min.js +++ b/message/amd/build/message_drawer_view_contacts_section_contacts.min.js @@ -1 +1 @@ -define(["jquery","core/notification","core/pubsub","core/templates","core_message/message_repository","core_message/message_drawer_events","core_message/message_drawer_lazy_load_list"],function(a,b,c,d,e,f,g){var h=100,i=0,j={BLOCK_ICON_CONTAINER:'[data-region="block-icon-container"]',CONTACT:'[data-region="contact"]',CONTENT_CONTAINER:'[data-region="contacts-content-container"]'},k={CONTACTS_LIST:"core_message/message_drawer_contacts_list"},l=function(a,b){return a.find('[data-contact-user-id="'+b+'"]')},m=function(c,e){var f=e.map(function(b){return a.extend(b,{id:b.userid})});return d.render(k.CONTACTS_LIST,{contacts:f}).then(function(a){return c.append(a),a})["catch"](b.exception)},n=function(a,c){return e.getContacts(c,h+1,i).then(function(a){return a.contacts}).then(function(b){return b.length>h?b.pop():g.setLoadedAll(a,!0),b}).then(function(a){return i+=h,a})["catch"](b.exception)},o=function(a,b){l(a,b).remove()},p=function(a,b){var c=l(a,b);c.length&&c.find(j.BLOCK_ICON_CONTAINER).removeClass("hidden")},q=function(a,b){var c=l(a,b);c.length&&c.find(j.BLOCK_ICON_CONTAINER).addClass("hidden")},r=function(a){c.subscribe(f.CONTACT_ADDED,function(b){var c=g.getContentContainer(a);m(c,[b]),g.hideEmptyMessage(a),g.showContent(a)}),c.subscribe(f.CONTACT_REMOVED,function(b){o(a,b);var c=a.find(j.CONTACT);c.length||(g.hideContent(a),g.showEmptyMessage(a))}),c.subscribe(f.CONTACT_BLOCKED,function(b){p(a,b)}),c.subscribe(f.CONTACT_UNBLOCKED,function(b){q(a,b)})},s=function(a){a.attr("data-contacts-init")||(r(a),a.attr("data-contacts-init",!0)),g.show(a,n,m)};return{show:s}}); \ No newline at end of file +define(["jquery","core/notification","core/pubsub","core/templates","core_message/message_repository","core_message/message_drawer_events","core_message/message_drawer_lazy_load_list"],function(a,b,c,d,e,f,g){var h=100,i=0,j={BLOCK_ICON_CONTAINER:'[data-region="block-icon-container"]',CONTACT:'[data-region="contact"]',CONTENT_CONTAINER:'[data-region="contacts-content-container"]'},k={CONTACTS_LIST:"core_message/message_drawer_contacts_list"},l=function(a,b){return a.find('[data-contact-user-id="'+b+'"]')},m=function(c,e){var f=e.map(function(b){return a.extend(b,{id:b.userid})});return d.render(k.CONTACTS_LIST,{contacts:f}).then(function(a){return c.append(a),a})["catch"](b.exception)},n=function(a,c){return e.getContacts(c,h+1,i).then(function(a){return a}).then(function(b){return b.length>h?b.pop():g.setLoadedAll(a,!0),b}).then(function(a){return i+=h,a})["catch"](b.exception)},o=function(a,b){l(a,b).remove()},p=function(a,b){var c=l(a,b);c.length&&c.find(j.BLOCK_ICON_CONTAINER).removeClass("hidden")},q=function(a,b){var c=l(a,b);c.length&&c.find(j.BLOCK_ICON_CONTAINER).addClass("hidden")},r=function(a){c.subscribe(f.CONTACT_ADDED,function(b){var c=g.getContentContainer(a);m(c,[b]),g.hideEmptyMessage(a),g.showContent(a)}),c.subscribe(f.CONTACT_REMOVED,function(b){o(a,b);var c=a.find(j.CONTACT);c.length||(g.hideContent(a),g.showEmptyMessage(a))}),c.subscribe(f.CONTACT_BLOCKED,function(b){p(a,b)}),c.subscribe(f.CONTACT_UNBLOCKED,function(b){q(a,b)})},s=function(a){a.attr("data-contacts-init")||(r(a),a.attr("data-contacts-init",!0)),g.show(a,n,m)};return{show:s}}); \ No newline at end of file diff --git a/message/amd/build/message_repository.min.js b/message/amd/build/message_repository.min.js index 4e55810c9a1..5cee83618d5 100644 --- a/message/amd/build/message_repository.min.js +++ b/message/amd/build/message_repository.min.js @@ -1 +1 @@ -define(["jquery","core/ajax","core/notification"],function(a,b,c){var d={PRIVATE:1,PUBLIC:2},e=function(a){"undefined"==typeof a.limit&&(a.limit=0),"undefined"==typeof a.offset&&(a.offset=0),"undefined"==typeof a.type&&(a.type=null),"undefined"==typeof a.favouritesonly&&(a.favouritesonly=!1),a.limitfrom=a.offset,a.limitnum=a.limit,delete a.limit,delete a.offset;var d={methodname:"core_message_data_for_messagearea_conversations",args:a},e=b.call([d])[0];return e.fail(c.exception),e},f=function(a){var d={methodname:"core_message_get_unread_conversations_count",args:a},e=b.call([d])[0];return e.fail(c.exception),e},g=function(a){var d={methodname:"core_message_mark_all_messages_as_read",args:a},e=b.call([d])[0];return e.fail(c.exception),e},h=function(a,c,d){var e={userid:a};"undefined"!=typeof c&&(e.limitnum=c),"undefined"!=typeof d&&(e.limitfrom=d);var f={methodname:"core_message_data_for_messagearea_contacts",args:e};return b.call([f])[0]},i=function(a,c){var d={methodname:"core_message_data_for_messagearea_get_profile",args:{currentuserid:a,otheruserid:c}};return b.call([d])[0]},j=function(c,d){var e=[{methodname:"core_message_block_user",args:{userid:c,blockeduserid:d}},{methodname:"core_message_get_member_info",args:{referenceuserid:c,userids:[d],includecontactrequests:!0,includeprivacyinfo:!0}}];return a.when.apply(null,b.call(e)).then(function(a,b){return b.length?b[0]:{}})},k=function(c,d){var e=[{methodname:"core_message_unblock_user",args:{userid:c,unblockeduserid:d}},{methodname:"core_message_get_member_info",args:{referenceuserid:c,userids:[d],includecontactrequests:!0,includeprivacyinfo:!0}}];return a.when.apply(null,b.call(e)).then(function(a,b){return b.length?b[0]:{}})},l=function(a,c){var d={methodname:"core_message_create_contact_request",args:{userid:a,requesteduserid:c}};return b.call([d])[0]},m=function(c,d){var e=[{methodname:"core_message_delete_contacts",args:{userid:c,userids:d}},{methodname:"core_message_get_member_info",args:{referenceuserid:c,userids:d,includecontactrequests:!0,includeprivacyinfo:!0}}];return a.when.apply(null,b.call(e)).then(function(a,b){return b})},n=function(a,c,d,e,f,g){var h={currentuserid:a,convid:c,newest:!!f};"undefined"!=typeof d&&(h.limitnum=d),"undefined"!=typeof e&&(h.limitfrom=e),"undefined"!=typeof g&&(h.timefrom=g);var i={methodname:"core_message_get_conversation_messages",args:h};return b.call([i])[0]},o=function(a,c,d,e){var f={userid:a,search:c};"undefined"!=typeof d&&(f.limitnum=d),"undefined"!=typeof e&&(f.limitfrom=e);var g={methodname:"core_message_message_search_users",args:f};return b.call([g])[0]},p=function(a,c,d,e){var f={userid:a,search:c};"undefined"!=typeof d&&(f.limitnum=d),"undefined"!=typeof e&&(f.limitfrom=e);var g={methodname:"core_message_data_for_messagearea_search_messages",args:f};return b.call([g])[0]},q=function(a,c){var d=c.map(function(b){return{touserid:a,text:b}}),e={methodname:"core_message_send_instant_messages",args:{messages:d}};return b.call([e])[0].then(function(a){var b=a.reduce(function(a,b){return b.errormessage&&a.push(b.errormessage),a},[]);if(b.length)throw new Error(b.join("\n"));return a}).then(function(a){return a.map(function(a){return{id:a.msgid,text:a.text,timecreated:a.timecreated,useridfrom:a.useridfrom,conversationid:a.conversationid}})})},r=function(a,b){return q(a,[b]).then(function(a){return a[0]})},s=function(a,c){var d=c.map(function(a){return{text:a}}),e={methodname:"core_message_send_messages_to_conversation",args:{conversationid:a,messages:d}};return b.call([e])[0]},t=function(a,b){return s(a,[b]).then(function(a){return a[0]})},u=function(a,c){var d={methodname:"core_user_update_user_preferences",args:{userid:a,preferences:c}};return b.call([d])[0]},v=function(a){var c={methodname:"core_user_get_user_preferences",args:{userid:a}};return b.call([c])[0]},w=function(a,c){return b.call(c.map(function(b){return{methodname:"core_message_delete_message",args:{messageid:b,userid:a}}}))},x=function(a,c){var d={methodname:"core_message_delete_conversation",args:{userid:a,otheruserid:c}};return b.call([d])[0]},y=function(a){var c={methodname:"core_message_get_contact_requests",args:{userid:a}};return b.call([c])[0]},z=function(c,d){var e=[{methodname:"core_message_confirm_contact_request",args:{userid:c,requesteduserid:d}},{methodname:"core_message_get_member_info",args:{referenceuserid:d,userids:[c],includecontactrequests:!0,includeprivacyinfo:!0}}];return a.when.apply(null,b.call(e)).then(function(a,b){return b.length?b[0]:{}})},A=function(c,d){var e=[{methodname:"core_message_decline_contact_request",args:{userid:c,requesteduserid:d}},{methodname:"core_message_get_member_info",args:{referenceuserid:d,userids:[c],includecontactrequests:!0,includeprivacyinfo:!0}}];return a.when.apply(null,b.call(e)).then(function(a,b){return b.length?b[0]:{}})},B=function(a,c,d,e,f,g,h,i,j){var k={userid:a,conversationid:c};"undefined"!=typeof d&&null!==d&&(k.includecontactrequests=d),"undefined"!=typeof e&&null!==e&&(k.includeprivacyinfo=e),"undefined"!=typeof f&&null!==f&&(k.memberlimit=f),"undefined"!=typeof g&&null!==g&&(k.memberoffset=g),"undefined"!=typeof h&&null!==h&&(k.messagelimit=h),"undefined"!=typeof i&&null!==i&&(k.messageoffset=i),"undefined"!=typeof j&&null!==j&&(k.newestmessagesfirst=j);var l={methodname:"core_message_get_conversation",args:k};return b.call([l])[0]},C=function(a,c,d,e,f,g,h,i,j){var k={userid:a,otheruserid:c};"undefined"!=typeof d&&null!==d&&(k.includecontactrequests=d),"undefined"!=typeof e&&null!==e&&(k.includeprivacyinfo=e),"undefined"!=typeof f&&null!==f&&(k.memberlimit=f),"undefined"!=typeof g&&null!==g&&(k.memberoffset=g),"undefined"!=typeof h&&null!==h&&(k.messagelimit=h),"undefined"!=typeof i&&null!==i&&(k.messageoffset=i),"undefined"!=typeof j&&null!==j&&(k.newestmessagesfirst=j);var l={methodname:"core_message_get_conversation_between_users",args:k};return b.call([l])[0]},D=function(a,c,e,f,g){var h={userid:a,type:c};"undefined"!=typeof e&&null!==e&&(h.limitnum=e),"undefined"!=typeof f&&null!==f&&(h.limitfrom=f),"undefined"!=typeof g&&null!==g&&(h.favourites=g);var i={methodname:"core_message_get_conversations",args:h};return b.call([i])[0].then(function(a){return a.conversations.length&&(a.conversations=a.conversations.map(function(a){if(a.type==d.PRIVATE){var b=a.members.length?a.members[0]:null;b&&(a.name=a.name?a.name:b.fullname,a.imageurl=a.imageurl?a.imageurl:b.profileimageurl)}return a})),a})},E=function(a,c,d,e,f){var g={userid:c,conversationid:a};"undefined"!=typeof d&&null!==d&&(g.limitnum=d),"undefined"!=typeof e&&null!==e&&(g.limitfrom=e),"undefined"!=typeof f&&null!==f&&(g.includecontactrequests=f);var h={methodname:"core_message_get_conversation_members",args:g};return b.call([h])[0]},F=function(a,c){var d={methodname:"core_message_set_favourite_conversations",args:{userid:a,conversations:c}};return b.call([d])[0]},G=function(a,c){var d={methodname:"core_message_unset_favourite_conversations",args:{userid:a,conversations:c}};return b.call([d])[0]},H=function(a,c,d,e){var f={referenceuserid:a,userids:c};"undefined"!=typeof d&&(f.includecontactrequests=d),"undefined"!=typeof e&&(f.includeprivacyinfo=e);var g={methodname:"core_message_get_member_info",args:f};return b.call([g])[0]},I=function(a,c){var d={methodname:"core_message_mark_all_conversation_messages_as_read",args:{userid:a,conversationid:c}};return b.call([d])[0]};return{query:e,countUnreadConversations:f,markAllAsRead:g,getContacts:h,getProfile:i,blockUser:j,unblockUser:k,createContactRequest:l,deleteContacts:m,getMessages:n,searchUsers:o,searchMessages:p,sendMessagesToUser:q,sendMessageToUser:r,sendMessagesToConversation:s,sendMessageToConversation:t,savePreferences:u,getPreferences:v,deleteMessages:w,deleteCoversation:x,getContactRequests:y,acceptContactRequest:z,declineContactRequest:A,getConversation:B,getConversationBetweenUsers:C,getConversations:D,getConversationMembers:E,setFavouriteConversations:F,unsetFavouriteConversations:G,getMemberInfo:H,markAllConversationMessagesAsRead:I}}); \ No newline at end of file +define(["jquery","core/ajax","core/notification"],function(a,b,c){var d={PRIVATE:1,PUBLIC:2},e=function(a){"undefined"==typeof a.limit&&(a.limit=0),"undefined"==typeof a.offset&&(a.offset=0),"undefined"==typeof a.type&&(a.type=null),"undefined"==typeof a.favouritesonly&&(a.favouritesonly=!1),a.limitfrom=a.offset,a.limitnum=a.limit,delete a.limit,delete a.offset;var d={methodname:"core_message_data_for_messagearea_conversations",args:a},e=b.call([d])[0];return e.fail(c.exception),e},f=function(a){var d={methodname:"core_message_get_unread_conversations_count",args:a},e=b.call([d])[0];return e.fail(c.exception),e},g=function(a){var d={methodname:"core_message_mark_all_messages_as_read",args:a},e=b.call([d])[0];return e.fail(c.exception),e},h=function(a,c,d){var e={userid:a};"undefined"!=typeof c&&(e.limitnum=c),"undefined"!=typeof d&&(e.limitfrom=d);var f={methodname:"core_message_get_user_contacts",args:e};return b.call([f])[0]},i=function(a,c){var d={methodname:"core_message_data_for_messagearea_get_profile",args:{currentuserid:a,otheruserid:c}};return b.call([d])[0]},j=function(c,d){var e=[{methodname:"core_message_block_user",args:{userid:c,blockeduserid:d}},{methodname:"core_message_get_member_info",args:{referenceuserid:c,userids:[d],includecontactrequests:!0,includeprivacyinfo:!0}}];return a.when.apply(null,b.call(e)).then(function(a,b){return b.length?b[0]:{}})},k=function(c,d){var e=[{methodname:"core_message_unblock_user",args:{userid:c,unblockeduserid:d}},{methodname:"core_message_get_member_info",args:{referenceuserid:c,userids:[d],includecontactrequests:!0,includeprivacyinfo:!0}}];return a.when.apply(null,b.call(e)).then(function(a,b){return b.length?b[0]:{}})},l=function(a,c){var d={methodname:"core_message_create_contact_request",args:{userid:a,requesteduserid:c}};return b.call([d])[0]},m=function(c,d){var e=[{methodname:"core_message_delete_contacts",args:{userid:c,userids:d}},{methodname:"core_message_get_member_info",args:{referenceuserid:c,userids:d,includecontactrequests:!0,includeprivacyinfo:!0}}];return a.when.apply(null,b.call(e)).then(function(a,b){return b})},n=function(a,c,d,e,f,g){var h={currentuserid:a,convid:c,newest:!!f};"undefined"!=typeof d&&(h.limitnum=d),"undefined"!=typeof e&&(h.limitfrom=e),"undefined"!=typeof g&&(h.timefrom=g);var i={methodname:"core_message_get_conversation_messages",args:h};return b.call([i])[0]},o=function(a,c,d,e){var f={userid:a,search:c};"undefined"!=typeof d&&(f.limitnum=d),"undefined"!=typeof e&&(f.limitfrom=e);var g={methodname:"core_message_message_search_users",args:f};return b.call([g])[0]},p=function(a,c,d,e){var f={userid:a,search:c};"undefined"!=typeof d&&(f.limitnum=d),"undefined"!=typeof e&&(f.limitfrom=e);var g={methodname:"core_message_data_for_messagearea_search_messages",args:f};return b.call([g])[0]},q=function(a,c){var d=c.map(function(b){return{touserid:a,text:b}}),e={methodname:"core_message_send_instant_messages",args:{messages:d}};return b.call([e])[0].then(function(a){var b=a.reduce(function(a,b){return b.errormessage&&a.push(b.errormessage),a},[]);if(b.length)throw new Error(b.join("\n"));return a}).then(function(a){return a.map(function(a){return{id:a.msgid,text:a.text,timecreated:a.timecreated,useridfrom:a.useridfrom,conversationid:a.conversationid}})})},r=function(a,b){return q(a,[b]).then(function(a){return a[0]})},s=function(a,c){var d=c.map(function(a){return{text:a}}),e={methodname:"core_message_send_messages_to_conversation",args:{conversationid:a,messages:d}};return b.call([e])[0]},t=function(a,b){return s(a,[b]).then(function(a){return a[0]})},u=function(a,c){var d={methodname:"core_user_update_user_preferences",args:{userid:a,preferences:c}};return b.call([d])[0]},v=function(a){var c={methodname:"core_user_get_user_preferences",args:{userid:a}};return b.call([c])[0]},w=function(a,c){return b.call(c.map(function(b){return{methodname:"core_message_delete_message",args:{messageid:b,userid:a}}}))},x=function(a,c){var d={methodname:"core_message_delete_conversation",args:{userid:a,otheruserid:c}};return b.call([d])[0]},y=function(a){var c={methodname:"core_message_get_contact_requests",args:{userid:a}};return b.call([c])[0]},z=function(c,d){var e=[{methodname:"core_message_confirm_contact_request",args:{userid:c,requesteduserid:d}},{methodname:"core_message_get_member_info",args:{referenceuserid:d,userids:[c],includecontactrequests:!0,includeprivacyinfo:!0}}];return a.when.apply(null,b.call(e)).then(function(a,b){return b.length?b[0]:{}})},A=function(c,d){var e=[{methodname:"core_message_decline_contact_request",args:{userid:c,requesteduserid:d}},{methodname:"core_message_get_member_info",args:{referenceuserid:d,userids:[c],includecontactrequests:!0,includeprivacyinfo:!0}}];return a.when.apply(null,b.call(e)).then(function(a,b){return b.length?b[0]:{}})},B=function(a,c,d,e,f,g,h,i,j){var k={userid:a,conversationid:c};"undefined"!=typeof d&&null!==d&&(k.includecontactrequests=d),"undefined"!=typeof e&&null!==e&&(k.includeprivacyinfo=e),"undefined"!=typeof f&&null!==f&&(k.memberlimit=f),"undefined"!=typeof g&&null!==g&&(k.memberoffset=g),"undefined"!=typeof h&&null!==h&&(k.messagelimit=h),"undefined"!=typeof i&&null!==i&&(k.messageoffset=i),"undefined"!=typeof j&&null!==j&&(k.newestmessagesfirst=j);var l={methodname:"core_message_get_conversation",args:k};return b.call([l])[0]},C=function(a,c,d,e,f,g,h,i,j){var k={userid:a,otheruserid:c};"undefined"!=typeof d&&null!==d&&(k.includecontactrequests=d),"undefined"!=typeof e&&null!==e&&(k.includeprivacyinfo=e),"undefined"!=typeof f&&null!==f&&(k.memberlimit=f),"undefined"!=typeof g&&null!==g&&(k.memberoffset=g),"undefined"!=typeof h&&null!==h&&(k.messagelimit=h),"undefined"!=typeof i&&null!==i&&(k.messageoffset=i),"undefined"!=typeof j&&null!==j&&(k.newestmessagesfirst=j);var l={methodname:"core_message_get_conversation_between_users",args:k};return b.call([l])[0]},D=function(a,c,e,f,g){var h={userid:a,type:c};"undefined"!=typeof e&&null!==e&&(h.limitnum=e),"undefined"!=typeof f&&null!==f&&(h.limitfrom=f),"undefined"!=typeof g&&null!==g&&(h.favourites=g);var i={methodname:"core_message_get_conversations",args:h};return b.call([i])[0].then(function(a){return a.conversations.length&&(a.conversations=a.conversations.map(function(a){if(a.type==d.PRIVATE){var b=a.members.length?a.members[0]:null;b&&(a.name=a.name?a.name:b.fullname,a.imageurl=a.imageurl?a.imageurl:b.profileimageurl)}return a})),a})},E=function(a,c,d,e,f){var g={userid:c,conversationid:a};"undefined"!=typeof d&&null!==d&&(g.limitnum=d),"undefined"!=typeof e&&null!==e&&(g.limitfrom=e),"undefined"!=typeof f&&null!==f&&(g.includecontactrequests=f);var h={methodname:"core_message_get_conversation_members",args:g};return b.call([h])[0]},F=function(a,c){var d={methodname:"core_message_set_favourite_conversations",args:{userid:a,conversations:c}};return b.call([d])[0]},G=function(a,c){var d={methodname:"core_message_unset_favourite_conversations",args:{userid:a,conversations:c}};return b.call([d])[0]},H=function(a,c,d,e){var f={referenceuserid:a,userids:c};"undefined"!=typeof d&&(f.includecontactrequests=d),"undefined"!=typeof e&&(f.includeprivacyinfo=e);var g={methodname:"core_message_get_member_info",args:f};return b.call([g])[0]},I=function(a,c){var d={methodname:"core_message_mark_all_conversation_messages_as_read",args:{userid:a,conversationid:c}};return b.call([d])[0]};return{query:e,countUnreadConversations:f,markAllAsRead:g,getContacts:h,getProfile:i,blockUser:j,unblockUser:k,createContactRequest:l,deleteContacts:m,getMessages:n,searchUsers:o,searchMessages:p,sendMessagesToUser:q,sendMessageToUser:r,sendMessagesToConversation:s,sendMessageToConversation:t,savePreferences:u,getPreferences:v,deleteMessages:w,deleteCoversation:x,getContactRequests:y,acceptContactRequest:z,declineContactRequest:A,getConversation:B,getConversationBetweenUsers:C,getConversations:D,getConversationMembers:E,setFavouriteConversations:F,unsetFavouriteConversations:G,getMemberInfo:H,markAllConversationMessagesAsRead:I}}); \ No newline at end of file diff --git a/message/amd/src/message_drawer_view_contacts_section_contacts.js b/message/amd/src/message_drawer_view_contacts_section_contacts.js index ea868c9307e..84c0f51010f 100644 --- a/message/amd/src/message_drawer_view_contacts_section_contacts.js +++ b/message/amd/src/message_drawer_view_contacts_section_contacts.js @@ -94,7 +94,7 @@ function( var load = function(listRoot, userId) { return MessageRepository.getContacts(userId, (limit + 1), offset) .then(function(result) { - return result.contacts; + return result; }) .then(function(contacts) { if (contacts.length > limit) { diff --git a/message/amd/src/message_repository.js b/message/amd/src/message_repository.js index 8fa57e83885..1542036a60d 100644 --- a/message/amd/src/message_repository.js +++ b/message/amd/src/message_repository.js @@ -132,7 +132,7 @@ define(['jquery', 'core/ajax', 'core/notification'], function($, Ajax, Notificat } var request = { - methodname: 'core_message_data_for_messagearea_contacts', + methodname: 'core_message_get_user_contacts', args: args };