/** * Returns appropriate user info for the owner of this session. * * @return array Array of user information. */ function &fetch_userinfo() { if ($this->userinfo) { // we already calculated this return $this->userinfo; } else { if ($this->vars['userid'] and !defined('SKIP_USERINFO')) { // user is logged in $useroptions = (defined('IN_CONTROL_PANEL') ? FETCH_USERINFO_ADMIN : 0) + (defined('AVATAR_ON_NAVBAR') ? FETCH_USERINFO_AVATAR : 0); $this->userinfo = fetch_userinfo($this->vars['userid'], $useroptions, $this->vars['languageid']); return $this->userinfo; } else { // guest setup $this->userinfo = array('userid' => 0, 'usergroupid' => 1, 'username' => !empty($_REQUEST['username']) ? htmlspecialchars_uni($_REQUEST['username']) : '', 'password' => '', 'email' => '', 'styleid' => $this->vars['styleid'], 'languageid' => $this->vars['languageid'], 'lastactivity' => $this->vars['lastactivity'], 'daysprune' => 0, 'timezoneoffset' => $this->registry->options['timeoffset'], 'dstonoff' => $this->registry->options['dstonoff'], 'showsignatures' => 1, 'showavatars' => 1, 'showimages' => 1, 'showusercss' => 1, 'dstauto' => 0, 'maxposts' => -1, 'startofweek' => 1, 'threadedmode' => $this->registry->options['threadedmode'], 'securitytoken' => 'guest', 'securitytoken_raw' => 'guest'); $this->userinfo['options'] = $this->registry->bf_misc_useroptions['showsignatures'] | $this->registry->bf_misc_useroptions['showavatars'] | $this->registry->bf_misc_useroptions['showimages'] | $this->registry->bf_misc_useroptions['dstauto'] | $this->registry->bf_misc_useroptions['showusercss']; if (!defined('SKIP_USERINFO')) { // get default language $phraseinfo = $this->registry->db->query_first_slave("\n\t\t\t\t\tSELECT languageid" . fetch_language_fields_sql(0) . "\n\t\t\t\t\tFROM " . TABLE_PREFIX . "language\n\t\t\t\t\tWHERE languageid = " . (!empty($this->vars['languageid']) ? $this->vars['languageid'] : intval($this->registry->options['languageid'])) . "\n\t\t\t\t"); if (empty($phraseinfo)) { // can't phrase this since we can't find the language trigger_error('The requested language does not exist, reset via tools.php.', E_USER_ERROR); } foreach ($phraseinfo as $_arrykey => $_arryval) { $this->userinfo["{$_arrykey}"] = $_arryval; } unset($phraseinfo); } return $this->userinfo; } } }
/** * Fetches an array containing info for the specified user, or false if user is not found * * Values for Option parameter: * 1 - Nothing ... * 2 - Get avatar * 4 - Process user's online location * 8 - Join the customprofilpic table to get the userid just to check if we have a picture * 16 - Join the administrator table to get various admin options * 32 - Join the sigpic table to get the userid just to check if we have a picture * 64 - Get user's custom CSS * 128 - Is the logged in User a friend of this person? * Therefore: Option = 6 means 'Get avatar' and 'Process online location' * See fetch_userinfo() in the do=getinfo section of member.php if you are still confused * * @param integer (ref) User ID * @param integer Bitfield Option (see description) * * @return array The information for the requested user */ function fetch_userinfo(&$userid, $option = 0, $languageid = 0) { global $vbulletin, $usercache, $vbphrase; if ($userid == $vbulletin->userinfo['userid'] AND $option != 0 AND isset($usercache["$userid"])) { // clear the cache if we are looking at ourself and need to add one of the JOINS to our information. unset($usercache["$userid"]); } $userid = intval($userid); // return the cached result if it exists if (isset($usercache["$userid"])) { return $usercache["$userid"]; } $hook_query_fields = $hook_query_joins = ''; ($hook = vBulletinHook::fetch_hook('fetch_userinfo_query')) ? eval($hook) : false; // no cache available - query the user $user = $vbulletin->db->query_first_slave(" SELECT " . iif(($option & FETCH_USERINFO_ADMIN), ' administrator.*, ') . " userfield.*, usertextfield.*, user.*, UNIX_TIMESTAMP(passworddate) AS passworddate, user.languageid AS saved_languageid, IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid" . iif(($option & FETCH_USERINFO_AVATAR) AND $vbulletin->options['avatarenabled'], ', avatar.avatarpath, NOT ISNULL(customavatar.userid) AS hascustomavatar, customavatar.dateline AS avatardateline, customavatar.width AS avwidth, customavatar.height AS avheight, customavatar.height_thumb AS avheight_thumb, customavatar.width_thumb AS avwidth_thumb, customavatar.filedata_thumb'). iif(($option & FETCH_USERINFO_PROFILEPIC), ', customprofilepic.userid AS profilepic, customprofilepic.dateline AS profilepicdateline, customprofilepic.width AS ppwidth, customprofilepic.height AS ppheight') . iif(($option & FETCH_USERINFO_SIGPIC), ', sigpic.userid AS sigpic, sigpic.dateline AS sigpicdateline, sigpic.width AS sigpicwidth, sigpic.height AS sigpicheight') . (($option & FETCH_USERINFO_USERCSS) ? ', usercsscache.cachedcss, IF(usercsscache.cachedcss IS NULL, 0, 1) AS hascachedcss, usercsscache.buildpermissions AS cssbuildpermissions' : '') . (isset($vbphrase) ? '' : fetch_language_fields_sql()) . (($vbulletin->userinfo['userid'] AND ($option & FETCH_USERINFO_ISFRIEND)) ? ", IF(userlist1.friend = 'yes', 1, 0) AS isfriend, IF (userlist1.friend = 'pending' OR userlist1.friend = 'denied', 1, 0) AS ispendingfriend" . ", IF(userlist1.userid IS NOT NULL, 1, 0) AS u_iscontact_of_bbuser, IF (userlist2.friend = 'pending', 1, 0) AS requestedfriend" . ", IF(userlist2.userid IS NOT NULL, 1, 0) AS bbuser_iscontact_of_user" : "") . " $hook_query_fields FROM " . TABLE_PREFIX . "user AS user LEFT JOIN " . TABLE_PREFIX . "userfield AS userfield ON (user.userid = userfield.userid) LEFT JOIN " . TABLE_PREFIX . "usertextfield AS usertextfield ON (usertextfield.userid = user.userid) " . iif(($option & FETCH_USERINFO_AVATAR) AND $vbulletin->options['avatarenabled'], "LEFT JOIN " . TABLE_PREFIX . "avatar AS avatar ON (avatar.avatarid = user.avatarid) LEFT JOIN " . TABLE_PREFIX . "customavatar AS customavatar ON (customavatar.userid = user.userid) ") . iif(($option & FETCH_USERINFO_PROFILEPIC), "LEFT JOIN " . TABLE_PREFIX . "customprofilepic AS customprofilepic ON (user.userid = customprofilepic.userid) ") . iif(($option & FETCH_USERINFO_ADMIN), "LEFT JOIN " . TABLE_PREFIX . "administrator AS administrator ON (administrator.userid = user.userid) ") . iif(($option & FETCH_USERINFO_SIGPIC), "LEFT JOIN " . TABLE_PREFIX . "sigpic AS sigpic ON (user.userid = sigpic.userid) ") . (($option & FETCH_USERINFO_USERCSS) ? 'LEFT JOIN ' . TABLE_PREFIX . 'usercsscache AS usercsscache ON (user.userid = usercsscache.userid)' : '') . iif(!isset($vbphrase), "LEFT JOIN " . TABLE_PREFIX . "language AS language ON (language.languageid = " . (!empty($languageid) ? $languageid : "IF(user.languageid = 0, " . intval($vbulletin->options['languageid']) . ", user.languageid)") . ") ") . (($vbulletin->userinfo['userid'] AND ($option & FETCH_USERINFO_ISFRIEND)) ? "LEFT JOIN " . TABLE_PREFIX . "userlist AS userlist1 ON (userlist1.relationid = user.userid AND userlist1.type = 'buddy' AND userlist1.userid = " . $vbulletin->userinfo['userid'] . ")" . "LEFT JOIN " . TABLE_PREFIX . "userlist AS userlist2 ON (userlist2.userid = user.userid AND userlist2.type = 'buddy' AND userlist2.relationid = " . $vbulletin->userinfo['userid'] . ")" : "") . " $hook_query_joins WHERE user.userid = $userid "); if (!$user) { return false; } if (!isset($vbphrase) AND $user['lang_options'] === null) { trigger_error('The requested language does not exist, reset via tools.php.', E_USER_ERROR); } $user['languageid'] = (!empty($languageid) ? $languageid : $user['languageid']); // decipher 'options' bitfield $user['options'] = intval($user['options']); foreach ($vbulletin->bf_misc_useroptions AS $optionname => $optionval) { $user["$optionname"] = ($user['options'] & $optionval ? 1 : 0); //DEVDEBUG("$optionname = $user[$optionname]"); } foreach($vbulletin->bf_misc_adminoptions AS $optionname => $optionval) { $user["$optionname"] = ($user['adminoptions'] & $optionval ? 1 : 0); } // make a username variable that is safe to pass through URL links $user['urlusername'] = urlencode(unhtmlspecialchars($user['username'])); fetch_musername($user); // get the user's real styleid (not the cookie value) $user['realstyleid'] = $user['styleid']; $user['securitytoken_raw'] = sha1($user['userid'] . sha1($user['salt']) . sha1(COOKIE_SALT)); $user['securitytoken'] = TIMENOW . '-' . sha1(TIMENOW . $user['securitytoken_raw']); $user['logouthash'] =& $user['securitytoken']; if ($option & FETCH_USERINFO_LOCATION) { // Process Location info for this user require_once(DIR . '/includes/functions_online.php'); $user = fetch_user_location_array($user); } ($hook = vBulletinHook::fetch_hook('fetch_userinfo')) ? eval($hook) : false; $usercache["$userid"] = $user; return $usercache["$userid"]; }