Merge branch 'MDL-63864_master' of git://github.com/markn86/moodle

This commit is contained in:
Damyon Wiese
2018-11-12 10:02:25 +08:00
4 changed files with 107 additions and 50 deletions
+12 -10
View File
@@ -2046,24 +2046,26 @@ class api {
* It will not include blocked users.
*
* @param int $userid
* @param int $limitfrom
* @param int $limitnum
* @return array The list of contact requests
*/
public static function get_contact_requests(int $userid) : array {
public static function get_contact_requests(int $userid, int $limitfrom = 0, int $limitnum = 0) : array {
global $DB;
$ufields = \user_picture::fields('u');
$sql = "SELECT $ufields, mcr.id as contactrequestid
FROM {user} u
JOIN {message_contact_requests} mcr
ON u.id = mcr.userid
$sql = "SELECT mcr.userid
FROM {message_contact_requests} mcr
LEFT JOIN {message_users_blocked} mub
ON (mub.userid = ? AND mub.blockeduserid = u.id)
ON (mub.userid = ? AND mub.blockeduserid = mcr.userid)
WHERE mcr.requesteduserid = ?
AND u.deleted = 0
AND mub.id is NULL
ORDER BY mcr.timecreated DESC";
ORDER BY mcr.timecreated ASC";
if ($contactrequests = $DB->get_records_sql($sql, [$userid, $userid], $limitfrom, $limitnum)) {
$userids = array_keys($contactrequests);
return helper::get_member_info($userid, $userids);
}
return $DB->get_records_sql($sql, [$userid, $userid]);
return [];
}
/**
+13 -24
View File
@@ -599,7 +599,9 @@ class core_message_external extends external_api {
public static function get_contact_requests_parameters() {
return new external_function_parameters(
[
'userid' => new external_value(PARAM_INT, 'The id of the user we want the requests for')
'userid' => new external_value(PARAM_INT, 'The id of the user we want the requests for'),
'limitfrom' => new external_value(PARAM_INT, 'Limit from', VALUE_DEFAULT, 0),
'limitnum' => new external_value(PARAM_INT, 'Limit number', VALUE_DEFAULT, 0)
]
);
}
@@ -613,8 +615,10 @@ class core_message_external extends external_api {
* It will not include blocked users.
*
* @param int $userid The id of the user we want to get the contact requests for
* @param int $limitfrom
* @param int $limitnum
*/
public static function get_contact_requests(int $userid) {
public static function get_contact_requests(int $userid, int $limitfrom = 0, int $limitnum = 0) {
global $CFG, $USER;
// Check if messaging is enabled.
@@ -631,10 +635,14 @@ class core_message_external extends external_api {
throw new required_capability_exception($context, $capability, 'nopermissions', '');
}
$params = ['userid' => $userid];
$params = [
'userid' => $userid,
'limitfrom' => $limitfrom,
'limitnum' => $limitnum
];
$params = self::validate_parameters(self::get_contact_requests_parameters(), $params);
return \core_message\api::get_contact_requests($params['userid']);
return \core_message\api::get_contact_requests($params['userid'], $params['limitfrom'], $params['limitnum']);
}
/**
@@ -644,26 +652,7 @@ class core_message_external extends external_api {
*/
public static function get_contact_requests_returns() {
return new external_multiple_structure(
new external_single_structure(
[
'id' => new external_value(core_user::get_property_type('id'), 'ID of the user'),
'contactrequestid' => new external_value(PARAM_INT, 'The ID of the contact request'),
'picture' => new external_value(core_user::get_property_type('picture'), 'The picture'),
'firstname' => new external_value(core_user::get_property_type('firstname'),
'The first name(s) of the user'),
'lastname' => new external_value(core_user::get_property_type('lastname'),
'The family name of the user'),
'firstnamephonetic' => new external_value(core_user::get_property_type('firstnamephonetic'),
'The phonetic first name of the user'),
'lastnamephonetic' => new external_value(core_user::get_property_type('lastnamephonetic'),
'The phonetic last name of the user'),
'middlename' => new external_value(core_user::get_property_type('middlename'),
'The middle name of the user'),
'alternatename' => new external_value(core_user::get_property_type('alternatename'),
'The alternate name of the user'),
'email' => new external_value(core_user::get_property_type('email'), 'An email address')
]
)
self::get_conversation_member_structure()
);
}
+38 -8
View File
@@ -4062,14 +4062,44 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
$request = reset($requests);
$this->assertEquals($user2->id, $request->id);
$this->assertEquals($user2->picture, $request->picture);
$this->assertEquals($user2->firstname, $request->firstname);
$this->assertEquals($user2->lastname, $request->lastname);
$this->assertEquals($user2->firstnamephonetic, $request->firstnamephonetic);
$this->assertEquals($user2->lastnamephonetic, $request->lastnamephonetic);
$this->assertEquals($user2->middlename, $request->middlename);
$this->assertEquals($user2->alternatename, $request->alternatename);
$this->assertEquals($user2->email, $request->email);
$this->assertEquals(fullname($user2), $request->fullname);
$this->assertObjectHasAttribute('profileimageurl', $request);
$this->assertObjectHasAttribute('profileimageurlsmall', $request);
$this->assertObjectHasAttribute('isonline', $request);
$this->assertObjectHasAttribute('showonlinestatus', $request);
$this->assertObjectHasAttribute('isblocked', $request);
$this->assertObjectHasAttribute('iscontact', $request);
}
/**
* Test getting contact requests when there are none.
*/
public function test_get_contact_requests_no_requests() {
$this->resetAfterTest();
$user1 = self::getDataGenerator()->create_user();
$requests = \core_message\api::get_contact_requests($user1->id);
$this->assertEmpty($requests);
}
/**
* Test getting contact requests with limits.
*/
public function test_get_contact_requests_with_limits() {
$this->resetAfterTest();
$user1 = self::getDataGenerator()->create_user();
$user2 = self::getDataGenerator()->create_user();
$user3 = self::getDataGenerator()->create_user();
\core_message\api::create_contact_request($user2->id, $user1->id);
\core_message\api::create_contact_request($user3->id, $user1->id);
$requests = \core_message\api::get_contact_requests($user1->id, 0, 1);
$this->assertCount(1, $requests);
}
/**
+44 -8
View File
@@ -574,14 +574,50 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
$request = reset($requests);
$this->assertEquals($user2->id, $request['id']);
$this->assertEquals($user2->picture, $request['picture']);
$this->assertEquals($user2->firstname, $request['firstname']);
$this->assertEquals($user2->lastname, $request['lastname']);
$this->assertEquals($user2->firstnamephonetic, $request['firstnamephonetic']);
$this->assertEquals($user2->lastnamephonetic, $request['lastnamephonetic']);
$this->assertEquals($user2->middlename, $request['middlename']);
$this->assertEquals($user2->alternatename, $request['alternatename']);
$this->assertEquals($user2->email, $request['email']);
$this->assertEquals(fullname($user2), $request['fullname']);
$this->assertArrayHasKey('profileimageurl', $request);
$this->assertArrayHasKey('profileimageurlsmall', $request);
$this->assertArrayHasKey('isonline', $request);
$this->assertArrayHasKey('showonlinestatus', $request);
$this->assertArrayHasKey('isblocked', $request);
$this->assertArrayHasKey('iscontact', $request);
}
/**
* Test getting contact requests when there are none.
*/
public function test_get_contact_requests_no_requests() {
$this->resetAfterTest();
$user1 = self::getDataGenerator()->create_user();
$this->setUser($user1);
$requests = core_message_external::get_contact_requests($user1->id);
$requests = external_api::clean_returnvalue(core_message_external::get_contact_requests_returns(), $requests);
$this->assertEmpty($requests);
}
/**
* Test getting contact requests with limits.
*/
public function test_get_contact_requests_with_limits() {
$this->resetAfterTest();
$user1 = self::getDataGenerator()->create_user();
$user2 = self::getDataGenerator()->create_user();
$user3 = self::getDataGenerator()->create_user();
$this->setUser($user1);
\core_message\api::create_contact_request($user2->id, $user1->id);
\core_message\api::create_contact_request($user3->id, $user1->id);
$requests = core_message_external::get_contact_requests($user1->id, 0, 1);
$requests = external_api::clean_returnvalue(core_message_external::get_contact_requests_returns(), $requests);
$this->assertCount(1, $requests);
}
/**