mirror of
https://github.com/moodle/moodle.git
synced 2025-04-20 07:56:06 +02:00
MDL-49823 webservice: Support gravatar profile images
This commit is contained in:
parent
fd57d685c7
commit
d85bedf796
@ -425,7 +425,7 @@ class core_message_external extends external_api {
|
||||
* @since Moodle 2.5
|
||||
*/
|
||||
public static function get_contacts() {
|
||||
global $CFG;
|
||||
global $CFG, $PAGE;
|
||||
|
||||
// Check if messaging is enabled.
|
||||
if (!$CFG->messaging) {
|
||||
@ -444,16 +444,11 @@ class core_message_external extends external_api {
|
||||
'unread' => $contact->messagecount
|
||||
);
|
||||
|
||||
$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'] = '';
|
||||
}
|
||||
$userpicture = new user_picture($contact);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$newcontact['profileimageurl'] = $userpicture->get_url($PAGE)->out(false);
|
||||
$userpicture->size = 0; // Size f2.
|
||||
$newcontact['profileimageurlsmall'] = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
$allcontacts[$mode][$key] = $newcontact;
|
||||
}
|
||||
@ -535,7 +530,7 @@ class core_message_external extends external_api {
|
||||
* @since Moodle 2.5
|
||||
*/
|
||||
public static function search_contacts($searchtext, $onlymycourses = false) {
|
||||
global $CFG, $USER;
|
||||
global $CFG, $USER, $PAGE;
|
||||
require_once($CFG->dirroot . '/user/lib.php');
|
||||
|
||||
// Check if messaging is enabled.
|
||||
@ -581,17 +576,11 @@ class core_message_external extends external_api {
|
||||
$user->phone1 = null;
|
||||
$user->phone2 = null;
|
||||
|
||||
$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'] = '';
|
||||
}
|
||||
$userpicture = new user_picture($user);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$newuser['profileimageurl'] = $userpicture->get_url($PAGE)->out(false);
|
||||
$userpicture->size = 0; // Size f2.
|
||||
$newuser['profileimageurlsmall'] = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
$user = $newuser;
|
||||
}
|
||||
@ -863,7 +852,7 @@ class core_message_external extends external_api {
|
||||
* @since 2.9
|
||||
*/
|
||||
public static function get_blocked_users($userid) {
|
||||
global $CFG, $USER;
|
||||
global $CFG, $USER, $PAGE;
|
||||
require_once($CFG->dirroot . "/message/lib.php");
|
||||
|
||||
// Warnings array, it can be empty at the end but is mandatory.
|
||||
@ -902,13 +891,9 @@ class core_message_external extends external_api {
|
||||
'fullname' => fullname($user),
|
||||
);
|
||||
|
||||
$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);
|
||||
} else {
|
||||
$newuser['profileimageurl'] = '';
|
||||
}
|
||||
$userpicture = new user_picture($user);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$newuser['profileimageurl'] = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
$blockedusers[] = $newuser;
|
||||
}
|
||||
|
@ -153,7 +153,7 @@ class mod_chat_external extends external_api {
|
||||
* @throws moodle_exception
|
||||
*/
|
||||
public static function get_chat_users($chatsid) {
|
||||
global $DB;
|
||||
global $DB, $PAGE;
|
||||
|
||||
$params = self::validate_parameters(self::get_chat_users_parameters(),
|
||||
array(
|
||||
@ -180,13 +180,10 @@ class mod_chat_external extends external_api {
|
||||
$returnedusers = array();
|
||||
|
||||
foreach ($users as $user) {
|
||||
$usercontext = context_user::instance($user->id, IGNORE_MISSING);
|
||||
$profileimageurl = '';
|
||||
|
||||
if ($usercontext) {
|
||||
$profileimageurl = moodle_url::make_webservice_pluginfile_url(
|
||||
$usercontext->id, 'user', 'icon', null, '/', 'f1')->out(false);
|
||||
}
|
||||
$userpicture = new user_picture($user);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$profileimageurl = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
$returnedusers[] = array(
|
||||
'id' => $user->id,
|
||||
|
@ -57,7 +57,7 @@ class mod_choice_external extends external_api {
|
||||
* @since Moodle 3.0
|
||||
*/
|
||||
public static function get_choice_results($choiceid) {
|
||||
global $USER;
|
||||
global $USER, $PAGE;
|
||||
|
||||
$params = self::validate_parameters(self::get_choice_results_parameters(), array('choiceid' => $choiceid));
|
||||
|
||||
@ -96,14 +96,11 @@ class mod_choice_external extends external_api {
|
||||
$response = array();
|
||||
$response['userid'] = $userresponse->id;
|
||||
$response['fullname'] = fullname($userresponse, $fullnamecap);
|
||||
$usercontext = context_user::instance($userresponse->id, IGNORE_MISSING);
|
||||
if ($usercontext) {
|
||||
$profileimageurl = moodle_url::make_webservice_pluginfile_url($usercontext->id, 'user', 'icon', null,
|
||||
'/', 'f1')->out(false);
|
||||
} else {
|
||||
$profileimageurl = '';
|
||||
}
|
||||
$response['profileimageurl'] = $profileimageurl;
|
||||
|
||||
$userpicture = new user_picture($userresponse);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$response['profileimageurl'] = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
// Add optional properties.
|
||||
foreach (array('answerid', 'timemodified') as $field) {
|
||||
if (property_exists($userresponse, 'answerid')) {
|
||||
|
@ -384,7 +384,7 @@ class mod_forum_external extends external_api {
|
||||
* @since Moodle 2.7
|
||||
*/
|
||||
public static function get_forum_discussion_posts($discussionid, $sortby = "created", $sortdirection = "DESC") {
|
||||
global $CFG, $DB, $USER;
|
||||
global $CFG, $DB, $USER, $PAGE;
|
||||
|
||||
$posts = array();
|
||||
$warnings = array();
|
||||
@ -475,20 +475,15 @@ class mod_forum_external extends external_api {
|
||||
$post->children = array();
|
||||
}
|
||||
|
||||
$userpicture = new user_picture($post);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$post->userpictureurl = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
$user = new stdclass();
|
||||
$user->id = $post->userid;
|
||||
$user = username_load_fields_from_object($user, $post);
|
||||
$post->userfullname = fullname($user, $canviewfullname);
|
||||
|
||||
// We can have post written by users that are deleted. In this case, those users don't have a valid context.
|
||||
$usercontext = context_user::instance($user->id, IGNORE_MISSING);
|
||||
if ($usercontext) {
|
||||
$post->userpictureurl = moodle_url::make_webservice_pluginfile_url(
|
||||
$usercontext->id, 'user', 'icon', null, '/', 'f1')->out(false);
|
||||
} else {
|
||||
$post->userpictureurl = '';
|
||||
}
|
||||
|
||||
// Rewrite embedded images URLs.
|
||||
list($post->message, $post->messageformat) =
|
||||
external_format_text($post->message, $post->messageformat, $modcontext->id, 'mod_forum', 'post', $post->id);
|
||||
@ -603,7 +598,7 @@ class mod_forum_external extends external_api {
|
||||
*/
|
||||
public static function get_forum_discussions_paginated($forumid, $sortby = 'timemodified', $sortdirection = 'DESC',
|
||||
$page = -1, $perpage = 0) {
|
||||
global $CFG, $DB, $USER;
|
||||
global $CFG, $DB, $USER, $PAGE;
|
||||
|
||||
require_once($CFG->dirroot . "/mod/forum/lib.php");
|
||||
|
||||
@ -696,34 +691,30 @@ class mod_forum_external extends external_api {
|
||||
$discussion->numreplies = (int) $replies[$discussion->discussion]->replies;
|
||||
}
|
||||
|
||||
$picturefields = explode(',', user_picture::fields());
|
||||
|
||||
// Load user objects from the results of the query.
|
||||
$user = new stdclass();
|
||||
$user->id = $discussion->userid;
|
||||
$user = username_load_fields_from_object($user, $discussion);
|
||||
$user = username_load_fields_from_object($user, $discussion, null, $picturefields);
|
||||
// Preserve the id, it can be modified by username_load_fields_from_object.
|
||||
$user->id = $discussion->userid;
|
||||
$discussion->userfullname = fullname($user, $canviewfullname);
|
||||
|
||||
// We can have post written by users that are deleted. In this case, those users don't have a valid context.
|
||||
$usercontext = context_user::instance($user->id, IGNORE_MISSING);
|
||||
if ($usercontext) {
|
||||
$discussion->userpictureurl = moodle_url::make_webservice_pluginfile_url(
|
||||
$usercontext->id, 'user', 'icon', null, '/', 'f1')->out(false);
|
||||
} else {
|
||||
$discussion->userpictureurl = '';
|
||||
}
|
||||
$userpicture = new user_picture($user);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$discussion->userpictureurl = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
$usermodified = new stdclass();
|
||||
$usermodified->id = $discussion->usermodified;
|
||||
$usermodified = username_load_fields_from_object($usermodified, $discussion, 'um');
|
||||
$usermodified = username_load_fields_from_object($usermodified, $discussion, 'um', $picturefields);
|
||||
// Preserve the id (it can be overwritten due to the prefixed $picturefields).
|
||||
$usermodified->id = $discussion->usermodified;
|
||||
$discussion->usermodifiedfullname = fullname($usermodified, $canviewfullname);
|
||||
|
||||
// We can have post written by users that are deleted. In this case, those users don't have a valid context.
|
||||
$usercontext = context_user::instance($usermodified->id, IGNORE_MISSING);
|
||||
if ($usercontext) {
|
||||
$discussion->usermodifiedpictureurl = moodle_url::make_webservice_pluginfile_url(
|
||||
$usercontext->id, 'user', 'icon', null, '/', 'f1')->out(false);
|
||||
} else {
|
||||
$discussion->usermodifiedpictureurl = '';
|
||||
}
|
||||
$userpicture = new user_picture($usermodified);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$discussion->usermodifiedpictureurl = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
// Rewrite embedded images URLs.
|
||||
list($discussion->message, $discussion->messageformat) =
|
||||
|
@ -2679,7 +2679,8 @@ function forum_get_discussions($cm, $forumsort="d.timemodified DESC", $fullpost=
|
||||
$umfields = "";
|
||||
$umtable = "";
|
||||
} else {
|
||||
$umfields = ', ' . get_all_user_name_fields(true, 'um', null, 'um');
|
||||
$umfields = ', ' . get_all_user_name_fields(true, 'um', null, 'um') . ', um.email AS umemail, um.picture AS umpicture,
|
||||
um.imagealt AS umimagealt';
|
||||
$umtable = " LEFT JOIN {user} um ON (d.usermodified = um.id)";
|
||||
}
|
||||
|
||||
|
@ -383,7 +383,7 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
|
||||
* Test get forum posts
|
||||
*/
|
||||
public function test_mod_forum_get_forum_discussion_posts() {
|
||||
global $CFG;
|
||||
global $CFG, $PAGE;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
@ -451,9 +451,7 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
|
||||
'warnings' => array(),
|
||||
);
|
||||
|
||||
// Empty picture since it's a user deleted (user3).
|
||||
$userpictureurl = '';
|
||||
|
||||
// User pictures are initially empty, we should get the links once the external function is called.
|
||||
$expectedposts['posts'][] = array(
|
||||
'id' => $discussion1reply2->id,
|
||||
'discussion' => $discussion1reply2->discussion,
|
||||
@ -474,12 +472,9 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
|
||||
'canreply' => true,
|
||||
'postread' => false,
|
||||
'userfullname' => fullname($user3),
|
||||
'userpictureurl' => $userpictureurl
|
||||
'userpictureurl' => ''
|
||||
);
|
||||
|
||||
$userpictureurl = moodle_url::make_webservice_pluginfile_url(
|
||||
context_user::instance($discussion1reply1->userid)->id, 'user', 'icon', null, '/', 'f1')->out(false);
|
||||
|
||||
$expectedposts['posts'][] = array(
|
||||
'id' => $discussion1reply1->id,
|
||||
'discussion' => $discussion1reply1->discussion,
|
||||
@ -500,7 +495,7 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
|
||||
'canreply' => true,
|
||||
'postread' => false,
|
||||
'userfullname' => fullname($user2),
|
||||
'userpictureurl' => $userpictureurl
|
||||
'userpictureurl' => ''
|
||||
);
|
||||
|
||||
// Test a discussion with two additional posts (total 3 posts).
|
||||
@ -508,6 +503,15 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
|
||||
$posts = external_api::clean_returnvalue(mod_forum_external::get_forum_discussion_posts_returns(), $posts);
|
||||
$this->assertEquals(3, count($posts['posts']));
|
||||
|
||||
// Generate here the pictures because we need to wait to the external function to init the theme.
|
||||
$userpicture = new user_picture($user3);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$expectedposts['posts'][0]['userpictureurl'] = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
$userpicture = new user_picture($user2);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$expectedposts['posts'][1]['userpictureurl'] = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
// Unset the initial discussion post.
|
||||
array_pop($posts['posts']);
|
||||
$this->assertEquals($expectedposts, $posts);
|
||||
@ -589,7 +593,7 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
|
||||
* Test get forum discussions paginated
|
||||
*/
|
||||
public function test_mod_forum_get_forum_discussions_paginated() {
|
||||
global $USER, $CFG, $DB;
|
||||
global $USER, $CFG, $DB, $PAGE;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
@ -663,12 +667,8 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
|
||||
// Create what we expect to be returned when querying the forums.
|
||||
|
||||
$post1 = $DB->get_record('forum_posts', array('id' => $discussion1->firstpost), '*', MUST_EXIST);
|
||||
$userpictureurl = moodle_url::make_webservice_pluginfile_url(
|
||||
context_user::instance($user1->id)->id, 'user', 'icon', null, '/', 'f1');
|
||||
|
||||
// We expect an empty URL since we deleted the user4.
|
||||
$usermodifiedpictureurl = '';
|
||||
|
||||
// User pictures are initially empty, we should get the links once the external function is called.
|
||||
$expecteddiscussions = array(
|
||||
'id' => $discussion1->firstpost,
|
||||
'name' => $discussion1->name,
|
||||
@ -692,8 +692,8 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
|
||||
'mailnow' => $post1->mailnow,
|
||||
'userfullname' => fullname($user1),
|
||||
'usermodifiedfullname' => fullname($user4),
|
||||
'userpictureurl' => $userpictureurl,
|
||||
'usermodifiedpictureurl' => $usermodifiedpictureurl,
|
||||
'userpictureurl' => '',
|
||||
'usermodifiedpictureurl' => '',
|
||||
'numreplies' => 3,
|
||||
'numunread' => 0
|
||||
);
|
||||
@ -705,6 +705,16 @@ class mod_forum_external_testcase extends externallib_advanced_testcase {
|
||||
'discussions' => array($expecteddiscussions),
|
||||
'warnings' => array()
|
||||
);
|
||||
|
||||
// Wait the theme to be loaded (the external_api call does that) to generate the user profiles.
|
||||
$userpicture = new user_picture($user1);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$expectedreturn['discussions'][0]['userpictureurl'] = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
$userpicture = new user_picture($user4);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$expectedreturn['discussions'][0]['usermodifiedpictureurl'] = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
$this->assertEquals($expectedreturn, $discussions);
|
||||
|
||||
// Call without required view discussion capability.
|
||||
|
@ -75,7 +75,7 @@ class core_rating_external extends external_api {
|
||||
* @since Moodle 2.9
|
||||
*/
|
||||
public static function get_item_ratings($contextlevel, $instanceid, $component, $ratingarea, $itemid, $scaleid, $sort) {
|
||||
global $USER;
|
||||
global $USER, $PAGE;
|
||||
|
||||
$warnings = array();
|
||||
|
||||
@ -146,13 +146,10 @@ class core_rating_external extends external_api {
|
||||
$rating->rating = $maxrating;
|
||||
}
|
||||
|
||||
$profileimageurl = '';
|
||||
// We can have ratings from deleted users. In this case, those users don't have a valid context.
|
||||
$usercontext = context_user::instance($rating->userid, IGNORE_MISSING);
|
||||
if ($usercontext) {
|
||||
$profileimageurl = moodle_url::make_webservice_pluginfile_url($usercontext->id, 'user', 'icon', null,
|
||||
'/', 'f1')->out(false);
|
||||
}
|
||||
// The rating object has all the required fields for generating the picture url.
|
||||
$userpicture = new user_picture($rating);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$profileimageurl = $userpicture->get_url($PAGE)->out(false);
|
||||
|
||||
$result = array();
|
||||
$result['id'] = $rating->id;
|
||||
|
@ -71,14 +71,16 @@ class core_webservice_external extends external_api {
|
||||
* @since Moodle 2.2
|
||||
*/
|
||||
public static function get_site_info($serviceshortnames = array()) {
|
||||
global $USER, $SITE, $CFG, $DB;
|
||||
global $USER, $SITE, $CFG, $DB, $PAGE;
|
||||
|
||||
$params = self::validate_parameters(self::get_site_info_parameters(),
|
||||
array('serviceshortnames'=>$serviceshortnames));
|
||||
|
||||
$context = context_user::instance($USER->id);
|
||||
$profileimageurl = moodle_url::make_pluginfile_url(
|
||||
$context->id, 'user', 'icon', null, '/', 'f1');
|
||||
|
||||
$userpicture = new user_picture($USER);
|
||||
$userpicture->size = 1; // Size f1.
|
||||
$profileimageurl = $userpicture->get_url($PAGE);
|
||||
|
||||
// Site information.
|
||||
$siteinfo = array(
|
||||
|
Loading…
x
Reference in New Issue
Block a user