public function __fav_user_login($user) { global $CFG, $USER; // regenerate session id and delete old session, // this helps prevent session fixation attacks from the same domain session_regenerate_id(true); // let enrol plugins deal with new enrolments if necessary enrol_check_plugins($user); // check enrolments, load caps and setup $USER object session_set_user($user); // reload preferences from DB unset($USER->preference); check_user_preferences_loaded($USER); // update login times update_user_login_times(); // extra session prefs init set_login_session_preferences(); if (isguestuser()) { // no need to continue when user is THE guest return $USER; } return $USER; }
public function test_check_user_preferences_loaded() { global $DB; $this->resetAfterTest(); $otheruser = $this->getDataGenerator()->create_user(); $otheruserid = $otheruser->id; $DB->delete_records('user_preferences', array('userid' => $otheruserid)); set_cache_flag('userpreferenceschanged', $otheruserid, null); $user = new stdClass(); $user->id = $otheruserid; // Load. check_user_preferences_loaded($user); $this->assertTrue(isset($user->preference)); $this->assertTrue(is_array($user->preference)); $this->assertArrayHasKey('_lastloaded', $user->preference); $this->assertCount(1, $user->preference); // Add preference via direct call. $DB->insert_record('user_preferences', array('name' => 'xxx', 'value' => 'yyy', 'userid' => $user->id)); // No cache reload yet. check_user_preferences_loaded($user); $this->assertCount(1, $user->preference); // Forced reloading of cache. unset($user->preference); check_user_preferences_loaded($user); $this->assertCount(2, $user->preference); $this->assertSame('yyy', $user->preference['xxx']); // Add preference via direct call. $DB->insert_record('user_preferences', array('name' => 'aaa', 'value' => 'bbb', 'userid' => $user->id)); // Test timeouts and modifications from different session. set_cache_flag('userpreferenceschanged', $user->id, 1, time() + 1000); $user->preference['_lastloaded'] = $user->preference['_lastloaded'] - 20; check_user_preferences_loaded($user); $this->assertCount(2, $user->preference); check_user_preferences_loaded($user, 10); $this->assertCount(3, $user->preference); $this->assertSame('bbb', $user->preference['aaa']); set_cache_flag('userpreferenceschanged', $user->id, null); }
/** * Get a complete user record, which includes all the info in the user record. * * Intended for setting as $USER session variable * * @param string $field The user field to be checked for a given value. * @param string $value The value to match for $field. * @param int $mnethostid * @return mixed False, or A {@link $USER} object. */ function get_complete_user_data($field, $value, $mnethostid = null) { global $CFG, $DB; if (!$field || !$value) { return false; } // Build the WHERE clause for an SQL query. $params = array('fieldval' => $value); $constraints = "{$field} = :fieldval AND deleted <> 1"; // If we are loading user data based on anything other than id, // we must also restrict our search based on mnet host. if ($field != 'id') { if (empty($mnethostid)) { // If empty, we restrict to local users. $mnethostid = $CFG->mnet_localhost_id; } } if (!empty($mnethostid)) { $params['mnethostid'] = $mnethostid; $constraints .= " AND mnethostid = :mnethostid"; } // Get all the basic user data. if (!($user = $DB->get_record_select('user', $constraints, $params))) { return false; } // Get various settings and preferences. // Preload preference cache. check_user_preferences_loaded($user); // Load course enrolment related stuff. $user->lastcourseaccess = array(); // During last session. $user->currentcourseaccess = array(); // During current session. if ($lastaccesses = $DB->get_records('user_lastaccess', array('userid' => $user->id))) { foreach ($lastaccesses as $lastaccess) { $user->lastcourseaccess[$lastaccess->courseid] = $lastaccess->timeaccess; } } $sql = "SELECT g.id, g.courseid\n FROM {groups} g, {groups_members} gm\n WHERE gm.groupid=g.id AND gm.userid=?"; // This is a special hack to speedup calendar display. $user->groupmember = array(); if (!isguestuser($user)) { if ($groups = $DB->get_records_sql($sql, array($user->id))) { foreach ($groups as $group) { if (!array_key_exists($group->courseid, $user->groupmember)) { $user->groupmember[$group->courseid] = array(); } $user->groupmember[$group->courseid][$group->id] = $group->id; } } } // Add the custom profile fields to the user record. $user->profile = array(); if (!isguestuser($user)) { require_once $CFG->dirroot . '/user/profile/lib.php'; profile_load_custom_fields($user); } // Rewrite some variables if necessary. if (!empty($user->description)) { // No need to cart all of it around. $user->description = true; } if (isguestuser($user)) { // Guest language always same as site. $user->lang = $CFG->lang; // Name always in current language. $user->firstname = get_string('guestuser'); $user->lastname = ' '; } return $user; }
public function test_check_user_preferences_loaded() { global $DB; if (!($otheruserid = $this->get_fake_preference_test_userid())) { $this->fail('Can not find unused user id for the preferences test'); return; } $DB->delete_records('user_preferences', array('userid' => $otheruserid)); set_cache_flag('userpreferenceschanged', $otheruserid, NULL); $user = new stdClass(); $user->id = $otheruserid; // load check_user_preferences_loaded($user); $this->assertTrue(isset($user->preference)); $this->assertTrue(is_array($user->preference)); $this->assertTrue(isset($user->preference['_lastloaded'])); $this->assertEqual(count($user->preference), 1); // add preference via direct call $DB->insert_record('user_preferences', array('name' => 'xxx', 'value' => 'yyy', 'userid' => $user->id)); // no cache reload yet check_user_preferences_loaded($user); $this->assertEqual(count($user->preference), 1); // forced reloading of cache unset($user->preference); check_user_preferences_loaded($user); $this->assertEqual(count($user->preference), 2); $this->assertEqual($user->preference['xxx'], 'yyy'); // add preference via direct call $DB->insert_record('user_preferences', array('name' => 'aaa', 'value' => 'bbb', 'userid' => $user->id)); // test timeouts and modifications from different session set_cache_flag('userpreferenceschanged', $user->id, 1, time() + 1000); $user->preference['_lastloaded'] = $user->preference['_lastloaded'] - 20; check_user_preferences_loaded($user); $this->assertEqual(count($user->preference), 2); check_user_preferences_loaded($user, 10); $this->assertEqual(count($user->preference), 3); $this->assertEqual($user->preference['aaa'], 'bbb'); set_cache_flag('userpreferenceschanged', $user->id, null); }
/** * Used to fetch user preference(s) * * If no arguments are supplied this function will return * all of the current user preferences as an array. * * If a name is specified then this function * attempts to return that particular preference value. If * none is found, then the optional value $default is returned, * otherwise NULL. * * @global object * @global object * @param string $name Name of the key to use in finding a preference value * @param string $default Value to be returned if the $name key is not set in the user preferences * @param int $otheruserid A moodle user ID * @return string */ function get_user_preferences($name = NULL, $default = NULL, $otheruserid = NULL) { global $USER, $DB; if (empty($otheruserid) || !empty($USER->id) && $USER->id == $otheruserid) { check_user_preferences_loaded(); if (empty($name)) { return $USER->preference; // All values } else { if (array_key_exists($name, $USER->preference)) { return $USER->preference[$name]; // The single value } else { return $default; // Default value (or NULL) } } } else { if (empty($name)) { return $DB->get_records_menu('user_preferences', array('userid' => $otheruserid), '', 'name,value'); // All values } else { if ($value = $DB->get_field('user_preferences', 'value', array('userid' => $otheruserid, 'name' => $name))) { return $value; // The single value } else { return $default; // Default value (or NULL) } } } }