MDL-64180 core_message: added new WS for contact request count

This commit is contained in:
Mark Nelson 2018-11-23 10:30:02 +08:00
parent 720cc99331
commit 7d678923b3
4 changed files with 143 additions and 1 deletions

View File

@ -939,6 +939,15 @@ $functions = array(
'ajax' => true,
'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE),
),
'core_message_get_received_contact_requests_count' => array(
'classname' => 'core_message_external',
'methodname' => 'get_received_contact_requests_count',
'classpath' => 'message/externallib.php',
'description' => 'Gets the number of received contact requests',
'type' => 'read',
'ajax' => true,
'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE),
),
'core_message_delete_contacts' => array(
'classname' => 'core_message_external',
'methodname' => 'delete_contacts',

View File

@ -752,6 +752,60 @@ class core_message_external extends external_api {
);
}
/**
* Returns the number of contact requests the user has received parameters description.
*
* @return external_function_parameters
*/
public static function get_received_contact_requests_count_parameters() {
return new external_function_parameters(
array(
'userid' => new external_value(PARAM_INT, 'The id of the user we want to return the number of ' .
'received contact requests for', VALUE_REQUIRED),
)
);
}
/**
* Returns the number of contact requests the user has received.
*
* @param int $userid The ID of the user we want to return the number of received contact requests for
* @return external_value
*/
public static function get_received_contact_requests_count(int $userid) {
global $CFG, $USER;
// Check if messaging is enabled.
if (empty($CFG->messaging)) {
throw new moodle_exception('disabled', 'message');
}
// Validate context.
$context = context_system::instance();
self::validate_context($context);
$params = [
'userid' => $userid,
];
$params = self::validate_parameters(self::get_received_contact_requests_count_parameters(), $params);
$capability = 'moodle/site:manageallmessaging';
if (($USER->id != $params['userid']) && !has_capability($capability, $context)) {
throw new required_capability_exception($context, $capability, 'nopermissions', '');
}
return \core_message\api::get_received_contact_requests_count($params['userid']);
}
/**
* Returns the number of contact requests the user has received return description.
*
* @return external_value
*/
public static function get_received_contact_requests_count_returns() {
return new external_value(PARAM_INT, 'The number of received contact requests');
}
/**
* Returns get conversation members parameters description.
*

View File

@ -663,6 +663,85 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
core_message_external::create_contact_request($user1->id, $user2->id);
}
/**
* Test getting the number of received contact requests.
*/
public function test_get_received_contact_requests_count() {
$this->resetAfterTest();
$user1 = self::getDataGenerator()->create_user();
$user2 = self::getDataGenerator()->create_user();
$user3 = self::getDataGenerator()->create_user();
$user4 = self::getDataGenerator()->create_user();
$this->setUser($user1);
$contactrequestnumber = core_message_external::get_received_contact_requests_count($user1->id);
$contactrequestnumber = external_api::clean_returnvalue(
core_message_external::get_received_contact_requests_count_returns(), $contactrequestnumber);
$this->assertEquals(0, $contactrequestnumber);
\core_message\api::create_contact_request($user2->id, $user1->id);
$contactrequestnumber = core_message_external::get_received_contact_requests_count($user1->id);
$contactrequestnumber = external_api::clean_returnvalue(
core_message_external::get_received_contact_requests_count_returns(), $contactrequestnumber);
$this->assertEquals(1, $contactrequestnumber);
\core_message\api::create_contact_request($user3->id, $user1->id);
$contactrequestnumber = core_message_external::get_received_contact_requests_count($user1->id);
$contactrequestnumber = external_api::clean_returnvalue(
core_message_external::get_received_contact_requests_count_returns(), $contactrequestnumber);
$this->assertEquals(2, $contactrequestnumber);
\core_message\api::create_contact_request($user1->id, $user4->id);
// Web service should ignore sent requests.
$contactrequestnumber = core_message_external::get_received_contact_requests_count($user1->id);
$contactrequestnumber = external_api::clean_returnvalue(
core_message_external::get_received_contact_requests_count_returns(), $contactrequestnumber);
$this->assertEquals(2, $contactrequestnumber);
}
/**
* Test getting the number of received contact requests with no permissions.
*/
public function test_get_received_contact_requests_count_no_permission() {
$this->resetAfterTest();
// Create some skeleton data just so we can call the WS.
$user1 = self::getDataGenerator()->create_user();
$user2 = self::getDataGenerator()->create_user();
$this->setUser($user2);
// Ensure an exception is thrown.
$this->expectException('required_capability_exception');
core_message_external::get_received_contact_requests_count($user1->id);
}
/**
* Test getting the number of received contact requests with messaging disabled.
*/
public function test_get_received_contact_requests_count_messaging_disabled() {
global $CFG;
$this->resetAfterTest();
// Create some skeleton data just so we can call the WS.
$user1 = self::getDataGenerator()->create_user();
$this->setUser($user1);
// Disable messaging.
$CFG->messaging = 0;
// Ensure an exception is thrown.
$this->expectException('moodle_exception');
core_message_external::get_received_contact_requests_count($user1->id);
}
/**
* Test creating a contact request.
*/

View File

@ -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.