/** * Get the user participating in the given assignment. An error with code 'usernotincourse' * is thrown is the user isn't a participant of the given assignment. * * @param int $assignid the assign instance id * @param int $userid the user id * @param bool $embeduser return user details (only applicable if not blind marking) * @return array of warnings and status result * @since Moodle 3.1 * @throws moodle_exception */ public static function get_participant($assignid, $userid, $embeduser) { global $DB, $CFG; require_once $CFG->dirroot . "/mod/assign/locallib.php"; require_once $CFG->dirroot . "/user/lib.php"; $params = self::validate_parameters(self::get_participant_parameters(), array('assignid' => $assignid, 'userid' => $userid, 'embeduser' => $embeduser)); list($assign, $course, $cm, $context) = self::validate_assign($params['assignid']); $assign->require_view_grades(); $participant = $assign->get_participant($params['userid']); if (!$participant) { // No participant found so we can return early. throw new moodle_exception('usernotincourse'); } $return = array('id' => $participant->id, 'fullname' => $participant->fullname, 'submitted' => $participant->submitted, 'requiregrading' => $participant->requiregrading, 'blindmarking' => $assign->is_blind_marking()); if (!empty($participant->groupid)) { $return['groupid'] = $participant->groupid; } if (!empty($participant->groupname)) { $return['groupname'] = $participant->groupname; } // Skip the expensive lookup of user detail if we're blind marking or the caller // hasn't asked for user details to be embedded. if (!$assign->is_blind_marking() && $embeduser) { $return['user'] = user_get_user_details($participant, $course); } return $return; }
/** * Tries to obtain user details, either recurring directly to the user's system profile * or through one of the user's course enrollments (course profile). * * @param object $user The user. * @return array if unsuccessful or the allowed user details. */ function user_get_user_details_courses($user) { global $USER; $userdetails = null; // Get the courses that the user is enrolled in (only active). $courses = enrol_get_users_courses($user->id, true); $systemprofile = false; if (can_view_user_details_cap($user) || $user->id == $USER->id || has_coursecontact_role($user->id)) { $systemprofile = true; } // Try using system profile. if ($systemprofile) { $userdetails = user_get_user_details($user, null); } else { // Try through course profile. foreach ($courses as $course) { if (can_view_user_details_cap($user, $course) || $user->id == $USER->id || has_coursecontact_role($user->id)) { $userdetails = user_get_user_details($user, $course); } } } return $userdetails; }
/** * Get course participants details * * @param int $courseid course id * @param array $options options { * 'name' => option name * 'value' => option value * } * @return array An array of users */ public static function get_enrolled_users($courseid, $options = array()) { global $CFG, $USER, $DB; require_once $CFG->dirroot . "/user/lib.php"; $params = self::validate_parameters(self::get_enrolled_users_parameters(), array('courseid' => $courseid, 'options' => $options)); $withcapability = ''; $groupid = 0; $onlyactive = false; $userfields = array(); $limitfrom = 0; $limitnumber = 0; $sortby = 'us.id'; $sortparams = array(); $sortdirection = 'ASC'; foreach ($options as $option) { switch ($option['name']) { case 'withcapability': $withcapability = $option['value']; break; case 'groupid': $groupid = (int) $option['value']; break; case 'onlyactive': $onlyactive = !empty($option['value']); break; case 'userfields': $thefields = explode(',', $option['value']); foreach ($thefields as $f) { $userfields[] = clean_param($f, PARAM_ALPHANUMEXT); } break; case 'limitfrom': $limitfrom = clean_param($option['value'], PARAM_INT); break; case 'limitnumber': $limitnumber = clean_param($option['value'], PARAM_INT); break; case 'sortby': $sortallowedvalues = array('id', 'firstname', 'lastname', 'siteorder'); if (!in_array($option['value'], $sortallowedvalues)) { throw new invalid_parameter_exception('Invalid value for sortby parameter (value: ' . $option['value'] . '),' . 'allowed values are: ' . implode(',', $sortallowedvalues)); } if ($option['value'] == 'siteorder') { list($sortby, $sortparams) = users_order_by_sql('us'); } else { $sortby = 'us.' . $option['value']; } break; case 'sortdirection': $sortdirection = strtoupper($option['value']); $directionallowedvalues = array('ASC', 'DESC'); if (!in_array($sortdirection, $directionallowedvalues)) { throw new invalid_parameter_exception('Invalid value for sortdirection parameter (value: ' . $sortdirection . '),' . 'allowed values are: ' . implode(',', $directionallowedvalues)); } break; } } $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST); $coursecontext = context_course::instance($courseid, IGNORE_MISSING); if ($courseid == SITEID) { $context = context_system::instance(); } else { $context = $coursecontext; } try { self::validate_context($context); } catch (Exception $e) { $exceptionparam = new stdClass(); $exceptionparam->message = $e->getMessage(); $exceptionparam->courseid = $params['courseid']; throw new moodle_exception('errorcoursecontextnotvalid', 'webservice', '', $exceptionparam); } if ($courseid == SITEID) { require_capability('moodle/site:viewparticipants', $context); } else { require_capability('moodle/course:viewparticipants', $context); } // to overwrite this parameter, you need role:review capability if ($withcapability) { require_capability('moodle/role:review', $coursecontext); } // need accessallgroups capability if you want to overwrite this option if (!empty($groupid) && !groups_is_member($groupid)) { require_capability('moodle/site:accessallgroups', $coursecontext); } // to overwrite this option, you need course:enrolereview permission if ($onlyactive) { require_capability('moodle/course:enrolreview', $coursecontext); } list($enrolledsql, $enrolledparams) = get_enrolled_sql($coursecontext, $withcapability, $groupid, $onlyactive); $ctxselect = ', ' . context_helper::get_preload_record_columns_sql('ctx'); $ctxjoin = "LEFT JOIN {context} ctx ON (ctx.instanceid = u.id AND ctx.contextlevel = :contextlevel)"; $enrolledparams['contextlevel'] = CONTEXT_USER; $groupjoin = ''; if (empty($groupid) && groups_get_course_groupmode($course) == SEPARATEGROUPS && !has_capability('moodle/site:accessallgroups', $coursecontext)) { // Filter by groups the user can view. $usergroups = groups_get_user_groups($course->id); if (!empty($usergroups['0'])) { list($groupsql, $groupparams) = $DB->get_in_or_equal($usergroups['0'], SQL_PARAMS_NAMED); $groupjoin = "JOIN {groups_members} gm ON (u.id = gm.userid AND gm.groupid {$groupsql})"; $enrolledparams = array_merge($enrolledparams, $groupparams); } else { // User doesn't belong to any group, so he can't see any user. Return an empty array. return array(); } } $sql = "SELECT us.*\n FROM {user} us\n JOIN (\n SELECT DISTINCT u.id {$ctxselect}\n FROM {user} u {$ctxjoin} {$groupjoin}\n WHERE u.id IN ({$enrolledsql})\n ) q ON q.id = us.id\n ORDER BY {$sortby} {$sortdirection}"; $enrolledparams = array_merge($enrolledparams, $sortparams); $enrolledusers = $DB->get_recordset_sql($sql, $enrolledparams, $limitfrom, $limitnumber); $users = array(); foreach ($enrolledusers as $user) { context_helper::preload_from_record($user); if ($userdetails = user_get_user_details($user, $course, $userfields)) { $users[] = $userdetails; } } $enrolledusers->close(); return $users; }
/** * Get course participant's details * * @param array $userlist array of user ids and according course ids * @return array An array of arrays describing course participants * @since Moodle 2.2 */ public static function get_course_user_profiles($userlist) { global $CFG, $USER, $DB; require_once $CFG->dirroot . "/user/lib.php"; $params = self::validate_parameters(self::get_course_user_profiles_parameters(), array('userlist' => $userlist)); $userids = array(); $courseids = array(); foreach ($params['userlist'] as $value) { $userids[] = $value['userid']; $courseids[$value['userid']] = $value['courseid']; } // cache all courses $courses = array(); list($cselect, $cjoin) = context_instance_preload_sql('c.id', CONTEXT_COURSE, 'ctx'); list($sqlcourseids, $params) = $DB->get_in_or_equal(array_unique($courseids)); $coursesql = "SELECT c.* {$cselect}\n FROM {course} c {$cjoin}\n WHERE c.id {$sqlcourseids}"; $rs = $DB->get_recordset_sql($coursesql, $params); foreach ($rs as $course) { // adding course contexts to cache context_instance_preload($course); // cache courses $courses[$course->id] = $course; } $rs->close(); list($uselect, $ujoin) = context_instance_preload_sql('u.id', CONTEXT_USER, 'ctx'); list($sqluserids, $params) = $DB->get_in_or_equal($userids); $usersql = "SELECT u.* {$uselect}\n FROM {user} u {$ujoin}\n WHERE u.id {$sqluserids}"; $users = $DB->get_recordset_sql($usersql, $params); $result = array(); foreach ($users as $user) { if (!empty($user->deleted)) { continue; } context_instance_preload($user); $course = $courses[$courseids[$user->id]]; $context = context_course::instance($courseids[$user->id], IGNORE_MISSING); self::validate_context($context); if ($userarray = user_get_user_details($user, $course)) { $result[] = $userarray; } } $users->close(); return $result; }
/** * Get course participants details * @param int $courseid course id * @param array $options options { * 'name' => option name * 'value' => option value * } * @return array An array of users */ public static function get_users_by_courseid($courseid, $options) { global $CFG, $USER, $DB; require_once($CFG->dirroot . "/user/lib.php"); $params = self::validate_parameters( self::get_users_by_courseid_parameters(), array( 'courseid'=>$courseid, 'options'=>$options ) ); $withcapability = ''; $groupid = 0; $onlyactive = false; foreach ($options as $option) { switch ($option['name']) { case 'withcapability': $withcapability = $option['value']; break; case 'groupid': $groupid = (int)$option['value']; break; case 'onlyactive': $onlyactive = !empty($option['value']); break; } } // to overwrite this parameter, you need role:review capability if ($withcapability) { require_capability('moodle/role:review', $coursecontext); } // need accessallgroups capability if you want to overwrite this option if (!empty($groupid) && groups_is_member($groupid)) { require_capability('moodle/site:accessallgroups', $context); } // to overwrite this option, you need course:enrolereview permission if ($onlyactive) { require_capability('moodle/course:enrolreview', $coursecontext); } list($coursectxselect, $coursectxjoin) = context_instance_preload_sql('c.id', CONTEXT_COURSE, 'ctx'); $coursesql = "SELECT c.* $coursectxselect FROM {course} c $coursectxjoin WHERE c.id = $courseid"; $course = $DB->get_record_sql($coursesql); context_instance_preload($course); $coursecontext = get_context_instance(CONTEXT_COURSE, $params['courseid']); if ($courseid == SITEID) { $context = get_system_context(); } else { $context = $coursecontext; } try { self::validate_context($context); } catch (Exception $e) { $exceptionparam = new stdClass(); $exceptionparam->message = $e->getMessage(); $exceptionparam->courseid = $params['courseid']; throw new moodle_exception(get_string('errorcoursecontextnotvalid' , 'webservice', $exceptionparam)); } list($enrolledsql, $enrolledparams) = get_enrolled_sql($coursecontext, $withcapability, $groupid, $onlyactive); list($ctxselect, $ctxjoin) = context_instance_preload_sql('u.id', CONTEXT_USER, 'ctx'); $records = $DB->get_records_sql($enrolledsql, $enrolledparams); $sqlparams['courseid'] = $courseid; $sql = "SELECT u.* $ctxselect FROM {user} u $ctxjoin WHERE u.id IN ($enrolledsql) ORDER BY u.id ASC"; $enrolledusers = $DB->get_recordset_sql($sql, $enrolledparams); $users = array(); foreach ($enrolledusers as $user) { if (!empty($user->deleted)) { continue; } context_instance_preload($user); if ($userdetails = user_get_user_details($user, $course)) { $users[] = $userdetails; } } $enrolledusers->close(); return $users; }
/** * Get course participants details * * @param int $courseid course id * @param array $options options { * 'name' => option name * 'value' => option value * } * @return array An array of users */ public static function get_enrolled_users($courseid, $options = array()) { global $CFG, $USER, $DB; require_once $CFG->dirroot . "/user/lib.php"; $params = self::validate_parameters(self::get_enrolled_users_parameters(), array('courseid' => $courseid, 'options' => $options)); $withcapability = ''; $groupid = 0; $onlyactive = false; $userfields = array(); $limitfrom = 0; $limitnumber = 0; foreach ($options as $option) { switch ($option['name']) { case 'withcapability': $withcapability = $option['value']; break; case 'groupid': $groupid = (int) $option['value']; break; case 'onlyactive': $onlyactive = !empty($option['value']); break; case 'userfields': $thefields = explode(',', $option['value']); foreach ($thefields as $f) { $userfields[] = clean_param($f, PARAM_ALPHANUMEXT); } case 'limitfrom': $limitfrom = clean_param($option['value'], PARAM_INT); break; case 'limitnumber': $limitnumber = clean_param($option['value'], PARAM_INT); break; } } $course = $DB->get_record('course', array('id' => $courseid), '*', MUST_EXIST); $coursecontext = context_course::instance($courseid, IGNORE_MISSING); if ($courseid == SITEID) { $context = get_system_context(); } else { $context = $coursecontext; } try { self::validate_context($context); } catch (Exception $e) { $exceptionparam = new stdClass(); $exceptionparam->message = $e->getMessage(); $exceptionparam->courseid = $params['courseid']; throw new moodle_exception('errorcoursecontextnotvalid', 'webservice', '', $exceptionparam); } if ($courseid == SITEID) { require_capability('moodle/site:viewparticipants', $context); } else { require_capability('moodle/course:viewparticipants', $context); } // to overwrite this parameter, you need role:review capability if ($withcapability) { require_capability('moodle/role:review', $coursecontext); } // need accessallgroups capability if you want to overwrite this option if (!empty($groupid) && groups_is_member($groupid)) { require_capability('moodle/site:accessallgroups', $coursecontext); } // to overwrite this option, you need course:enrolereview permission if ($onlyactive) { require_capability('moodle/course:enrolreview', $coursecontext); } list($enrolledsql, $enrolledparams) = get_enrolled_sql($coursecontext, $withcapability, $groupid, $onlyactive); list($ctxselect, $ctxjoin) = context_instance_preload_sql('u.id', CONTEXT_USER, 'ctx'); $sqlparams['courseid'] = $courseid; $sql = "SELECT u.* {$ctxselect}\n FROM {user} u {$ctxjoin}\n WHERE u.id IN ({$enrolledsql})\n ORDER BY u.id ASC"; $enrolledusers = $DB->get_recordset_sql($sql, $enrolledparams, $limitfrom, $limitnumber); $users = array(); foreach ($enrolledusers as $user) { context_instance_preload($user); if ($userdetails = user_get_user_details($user, $course, $userfields)) { $users[] = $userdetails; } } $enrolledusers->close(); return $users; }
/** * Get course participant's details * * @param array $userlist array of user ids and according course ids * @return array An array of arrays describing course participants * @since Moodle 2.2 */ public static function get_course_user_profiles($userlist) { global $CFG, $USER, $DB; require_once $CFG->dirroot . "/user/lib.php"; $params = self::validate_parameters(self::get_course_user_profiles_parameters(), array('userlist' => $userlist)); $userids = array(); $courseids = array(); foreach ($params['userlist'] as $value) { $userids[] = $value['userid']; $courseids[$value['userid']] = $value['courseid']; } // Cache all courses. $courses = array(); list($sqlcourseids, $params) = $DB->get_in_or_equal(array_unique($courseids), SQL_PARAMS_NAMED); $cselect = ', ' . context_helper::get_preload_record_columns_sql('ctx'); $cjoin = "LEFT JOIN {context} ctx ON (ctx.instanceid = c.id AND ctx.contextlevel = :contextlevel)"; $params['contextlevel'] = CONTEXT_COURSE; $coursesql = "SELECT c.* {$cselect}\n FROM {course} c {$cjoin}\n WHERE c.id {$sqlcourseids}"; $rs = $DB->get_recordset_sql($coursesql, $params); foreach ($rs as $course) { // Adding course contexts to cache. context_helper::preload_from_record($course); // Cache courses. $courses[$course->id] = $course; } $rs->close(); list($sqluserids, $params) = $DB->get_in_or_equal($userids, SQL_PARAMS_NAMED); $uselect = ', ' . context_helper::get_preload_record_columns_sql('ctx'); $ujoin = "LEFT JOIN {context} ctx ON (ctx.instanceid = u.id AND ctx.contextlevel = :contextlevel)"; $params['contextlevel'] = CONTEXT_USER; $usersql = "SELECT u.* {$uselect}\n FROM {user} u {$ujoin}\n WHERE u.id {$sqluserids}"; $users = $DB->get_recordset_sql($usersql, $params); $result = array(); foreach ($users as $user) { if (!empty($user->deleted)) { continue; } context_helper::preload_from_record($user); $course = $courses[$courseids[$user->id]]; $context = context_course::instance($courseids[$user->id], IGNORE_MISSING); self::validate_context($context); if ($userarray = user_get_user_details($user, $course)) { $result[] = $userarray; } } $users->close(); return $result; }
/** * Get the user participating in the given assignment. An error with code 'usernotincourse' * is thrown is the user isn't a participant of the given assignment. * * @param int $assignid the assign instance id * @param int $userid the user id * @param bool $embeduser return user details (only applicable if not blind marking) * @return array of warnings and status result * @since Moodle 3.1 * @throws moodle_exception */ public static function get_participant($assignid, $userid, $embeduser) { global $DB, $CFG; require_once($CFG->dirroot . "/mod/assign/locallib.php"); require_once($CFG->dirroot . "/user/lib.php"); $params = self::validate_parameters(self::get_participant_parameters(), array( 'assignid' => $assignid, 'userid' => $userid, 'embeduser' => $embeduser )); list($assign, $course, $cm, $context) = self::validate_assign($params['assignid']); $assign->require_view_grades(); $participant = $assign->get_participant($params['userid']); // Update assign with override information. $assign->update_effective_access($params['userid']); if (!$participant) { // No participant found so we can return early. throw new moodle_exception('usernotincourse'); } $return = array( 'id' => $participant->id, 'fullname' => $participant->fullname, 'submitted' => $participant->submitted, 'requiregrading' => $participant->requiregrading, 'blindmarking' => $assign->is_blind_marking(), 'allowsubmissionsfromdate' => $assign->get_instance()->allowsubmissionsfromdate, 'duedate' => $assign->get_instance()->duedate, 'cutoffdate' => $assign->get_instance()->cutoffdate, 'duedatestr' => userdate($assign->get_instance()->duedate, get_string('strftimedatetime', 'langconfig')), ); if (!empty($participant->groupid)) { $return['groupid'] = $participant->groupid; } if (!empty($participant->groupname)) { $return['groupname'] = $participant->groupname; } // Skip the expensive lookup of user detail if we're blind marking or the caller // hasn't asked for user details to be embedded. if (!$assign->is_blind_marking() && $embeduser) { $return['user'] = user_get_user_details($participant, $course); } return $return; }
public function test_create_user() { global $DB, $CFG; require_once $CFG->dirroot . '/user/lib.php'; $this->resetAfterTest(true); $generator = $this->getDataGenerator(); $count = $DB->count_records('user'); $this->setCurrentTimeStart(); $user = $generator->create_user(); $this->assertEquals($count + 1, $DB->count_records('user')); $this->assertSame($user->username, clean_param($user->username, PARAM_USERNAME)); $this->assertSame($user->email, clean_param($user->email, PARAM_EMAIL)); $this->assertSame(AUTH_PASSWORD_NOT_CACHED, $user->password); $this->assertNotEmpty($user->firstnamephonetic); $this->assertNotEmpty($user->lastnamephonetic); $this->assertNotEmpty($user->alternatename); $this->assertNotEmpty($user->middlename); $this->assertSame('manual', $user->auth); $this->assertSame('en', $user->lang); $this->assertSame('1', $user->confirmed); $this->assertSame('0', $user->deleted); $this->assertTimeCurrent($user->timecreated); $this->assertSame($user->timecreated, $user->timemodified); $this->assertSame('0.0.0.0', $user->lastip); $record = array('auth' => 'email', 'firstname' => 'Žluťoučký', 'lastname' => 'Koníček', 'firstnamephonetic' => 'Zhlutyoucky', 'lastnamephonetic' => 'Koniiczek', 'middlename' => 'Hopper', 'alternatename' => 'horse', 'idnumber' => 'abc1', 'mnethostid' => (string) $CFG->mnet_localhost_id, 'username' => 'konic666', 'password' => 'password1', 'email' => '*****@*****.**', 'confirmed' => '1', 'lang' => 'cs', 'maildisplay' => '1', 'mailformat' => '0', 'maildigest' => '1', 'autosubscribe' => '0', 'trackforums' => '0', 'deleted' => '0', 'timecreated' => '666'); $user = $generator->create_user($record); $this->assertEquals($count + 2, $DB->count_records('user')); foreach ($record as $k => $v) { if ($k === 'password') { $this->assertTrue(password_verify($v, $user->password)); } else { $this->assertSame($v, $user->{$k}); } } $record = array('firstname' => 'Some', 'lastname' => 'User', 'idnumber' => 'def', 'username' => 'user666', 'email' => '*****@*****.**', 'deleted' => '1'); $user = $generator->create_user($record); $this->assertEquals($count + 3, $DB->count_records('user')); $this->assertSame('', $user->idnumber); $this->assertSame(md5($record['username']), $user->email); $this->assertFalse(context_user::instance($user->id, IGNORE_MISSING)); // Test generating user with interests. $user = $generator->create_user(array('interests' => 'Cats, Dogs')); $userdetails = user_get_user_details($user); $this->assertSame('Cats, Dogs', $userdetails['interests']); }
/** * Search contacts. * * @param string $searchtext query string. * @param bool $onlymycourses limit the search to the user's courses only. * @return external_description * @since 2.5 */ public static function search_contacts($searchtext, $onlymycourses = false) { global $CFG, $USER; require_once($CFG->libdir . '/enrollib.php'); $params = array('searchtext' => $searchtext, 'onlymycourses' => $onlymycourses); $params = self::validate_parameters(self::search_contacts_parameters(), $params); // Extra validation, we do not allow empty queries. if ($params['searchtext'] === '') { throw new moodle_exception('querystringcannotbeempty'); } $courseids = array(); if ($params['onlymycourses']) { $mycourses = enrol_get_my_courses(array('id')); foreach ($mycourses as $mycourse) { $courseids[] = $mycourse->id; } } else { $courseids[] = SITEID; } // Retrieving the users matching the query. $users = message_search_users($courseids, $params['searchtext']); $results = array(); foreach ($users as $user) { $results[$user->id] = $user; } // Reorganising information. foreach ($results as &$user) { $newuser = array( 'id' => $user->id, 'fullname' => fullname($user) ); // Avoid undefined property notice as phone not specified. $user->phone1 = null; $user->phone2 = null; // Try to get the user picture, but sometimes this method can return null. $userdetails = user_get_user_details($user, null, array('profileimageurl', 'profileimageurlsmall')); if (!empty($userdetails)) { $newuser['profileimageurl'] = $userdetails['profileimageurl']; $newuser['profileimageurlsmall'] = $userdetails['profileimageurlsmall']; } $user = $newuser; } return $results; }
/** * Get user information * - This function is matching the permissions of /user/profil.php * - It is also matching some permissions from /user/editadvanced.php for the following fields: * auth, confirmed, idnumber, lang, theme, timezone, mailformat * * @param array $userids array of user ids * @return array An array of arrays describing users * @since Moodle 2.2 */ public static function get_users_by_id($userids) { global $CFG, $USER, $DB; require_once $CFG->dirroot . "/user/lib.php"; //iteramos los parametros y reemplazamos por los ID if (is_array($userids)) { foreach ($userids as $indice => $dni) { $u = $DB->get_record('user', array('username' => $dni)); if (is_object($u)) { $userids[$indice] = $u->id; } } } $params = self::validate_parameters(self::get_users_by_id_parameters(), array('userids' => $userids)); list($uselect, $ujoin) = context_instance_preload_sql('u.id', CONTEXT_USER, 'ctx'); list($sqluserids, $params) = $DB->get_in_or_equal($userids); $usersql = "SELECT u.* {$uselect}\n FROM {user} u {$ujoin}\n WHERE u.id {$sqluserids}"; $users = $DB->get_recordset_sql($usersql, $params); $result = array(); $hasuserupdatecap = has_capability('moodle/user:update', get_system_context()); foreach ($users as $user) { if (!empty($user->deleted)) { continue; } context_instance_preload($user); $usercontext = get_context_instance(CONTEXT_USER, $user->id); self::validate_context($usercontext); $currentuser = $user->id == $USER->id; if ($userarray = user_get_user_details($user)) { //fields matching permissions from /user/editadvanced.php if ($currentuser or $hasuserupdatecap) { $userarray['auth'] = $user->auth; $userarray['confirmed'] = $user->confirmed; $userarray['idnumber'] = $user->idnumber; $userarray['lang'] = $user->lang; $userarray['theme'] = $user->theme; $userarray['timezone'] = $user->timezone; $userarray['mailformat'] = $user->mailformat; } $result[] = $userarray; } } $users->close(); return $result; }
/** * Returns the profile information for a contact for a user. * * @param int $userid The user id * @param int $otheruserid The id of the user whose profile we want to view. * @return \stdClass */ public static function get_profile($userid, $otheruserid) { global $CFG, $DB; require_once $CFG->dirroot . '/user/lib.php'; if ($user = \core_user::get_user($otheruserid)) { // Create the data we are going to pass to the renderable. $userfields = user_get_user_details($user, null, array('city', 'country', 'email', 'profileimageurl', 'profileimageurlsmall', 'lastaccess')); if ($userfields) { $data = new \stdClass(); $data->userid = $userfields['id']; $data->fullname = $userfields['fullname']; $data->city = isset($userfields['city']) ? $userfields['city'] : ''; $data->country = isset($userfields['country']) ? $userfields['country'] : ''; $data->email = isset($userfields['email']) ? $userfields['email'] : ''; $data->profileimageurl = isset($userfields['profileimageurl']) ? $userfields['profileimageurl'] : ''; if (isset($userfields['profileimageurlsmall'])) { $data->profileimageurlsmall = $userfields['profileimageurlsmall']; } else { $data->profileimageurlsmall = ''; } if (isset($userfields['lastaccess'])) { $data->isonline = helper::is_online($userfields['lastaccess']); } else { $data->isonline = false; } } else { // Technically the access checks in user_get_user_details are correct, // but messaging has never obeyed them. In order to keep messaging working // we at least need to return a minimal user record. $data = new \stdClass(); $data->userid = $otheruserid; $data->fullname = fullname($user); $data->city = ''; $data->country = ''; $data->email = ''; $data->profileimageurl = ''; $data->profileimageurlsmall = ''; $data->isonline = false; } // Check if the contact has been blocked. $contact = $DB->get_record('message_contacts', array('userid' => $userid, 'contactid' => $otheruserid)); if ($contact) { $data->isblocked = (bool) $contact->blocked; $data->iscontact = true; } else { $data->isblocked = false; $data->iscontact = false; } return $data; } }
/** * Returns the profile information for a contact for a user. * * @param int $userid The user id * @param int $otheruserid The id of the user whose profile we want to view. * @return \stdClass */ public static function get_profile($userid, $otheruserid) { global $CFG, $DB, $PAGE; require_once $CFG->dirroot . '/user/lib.php'; $user = \core_user::get_user($otheruserid, '*', MUST_EXIST); // Create the data we are going to pass to the renderable. $data = new \stdClass(); $data->userid = $otheruserid; $data->fullname = fullname($user); $data->city = ''; $data->country = ''; $data->email = ''; $data->isonline = null; // Get the user picture data - messaging has always shown these to the user. $userpicture = new \user_picture($user); $userpicture->size = 1; // Size f1. $data->profileimageurl = $userpicture->get_url($PAGE)->out(false); $userpicture->size = 0; // Size f2. $data->profileimageurlsmall = $userpicture->get_url($PAGE)->out(false); $userfields = user_get_user_details($user, null, array('city', 'country', 'email', 'lastaccess')); if ($userfields) { if (isset($userfields['city'])) { $data->city = $userfields['city']; } if (isset($userfields['country'])) { $data->country = $userfields['country']; } if (isset($userfields['email'])) { $data->email = $userfields['email']; } if (isset($userfields['lastaccess'])) { $data->isonline = helper::is_online($userfields['lastaccess']); } } // Check if the contact has been blocked. $contact = $DB->get_record('message_contacts', array('userid' => $userid, 'contactid' => $otheruserid)); if ($contact) { $data->isblocked = (bool) $contact->blocked; $data->iscontact = true; } else { $data->isblocked = false; $data->iscontact = false; } return $data; }
/** * Test user_get_user_details */ public function test_user_get_user_details() { global $DB; $this->resetAfterTest(); // Create user and modify user profile. $teacher = $this->getDataGenerator()->create_user(); $student = $this->getDataGenerator()->create_user(); $studentfullname = fullname($student); $course1 = $this->getDataGenerator()->create_course(); $coursecontext = context_course::instance($course1->id); $teacherrole = $DB->get_record('role', array('shortname' => 'teacher')); $studentrole = $DB->get_record('role', array('shortname' => 'student')); $this->getDataGenerator()->enrol_user($teacher->id, $course1->id); $this->getDataGenerator()->enrol_user($student->id, $course1->id); role_assign($teacherrole->id, $teacher->id, $coursecontext->id); role_assign($studentrole->id, $student->id, $coursecontext->id); accesslib_clear_all_caches_for_unit_testing(); // Get student details as a user with super system capabilities. $result = user_get_user_details($student, $course1); $this->assertEquals($student->id, $result['id']); $this->assertEquals($studentfullname, $result['fullname']); $this->assertEquals($course1->id, $result['enrolledcourses'][0]['id']); $this->setUser($teacher); // Get student details as a user who can only see this user in a course. $result = user_get_user_details($student, $course1); $this->assertEquals($student->id, $result['id']); $this->assertEquals($studentfullname, $result['fullname']); $this->assertEquals($course1->id, $result['enrolledcourses'][0]['id']); // Get student details with required fields. $result = user_get_user_details($student, $course1, array('id', 'fullname')); $this->assertCount(2, $result); $this->assertEquals($student->id, $result['id']); $this->assertEquals($studentfullname, $result['fullname']); // Get exception for invalid required fields. $this->expectException('moodle_exception'); $result = user_get_user_details($student, $course1, array('wrongrequiredfield')); }
/** * Helper function for checking if we should show the user's online status. * * @param \stdClass $user * @return boolean */ public static function show_online_status($user) { global $CFG; require_once $CFG->dirroot . '/user/lib.php'; if ($lastaccess = user_get_user_details($user, null, array('lastaccess'))) { if (isset($lastaccess['lastaccess'])) { return true; } } return false; }