/** * Set fields that need additional manipulation after retrieval. * * @param $User * @throws Exception */ public function setCalculatedFields(&$User) { if ($v = val('Attributes', $User)) { if (is_string($v)) { setValue('Attributes', $User, @unserialize($v)); } } if ($v = val('Permissions', $User)) { if (is_string($v)) { setValue('Permissions', $User, @unserialize($v)); } } if ($v = val('Preferences', $User)) { if (is_string($v)) { setValue('Preferences', $User, @unserialize($v)); } } if ($v = val('Photo', $User)) { if (!isUrl($v)) { $PhotoUrl = Gdn_Upload::url(changeBasename($v, 'n%s')); } else { $PhotoUrl = $v; } setValue('PhotoUrl', $User, $PhotoUrl); } if ($v = val('AllIPAddresses', $User)) { if (is_string($v)) { $IPAddresses = explode(',', $v); foreach ($IPAddresses as $i => $IPAddress) { $IPAddresses[$i] = ForceIPv4($IPAddress); } setValue('AllIPAddresses', $User, $IPAddresses); } } setValue('_CssClass', $User, ''); if ($v = val('Banned', $User)) { setValue('_CssClass', $User, 'Banned'); } $this->EventArguments['User'] =& $User; $this->fireEvent('SetCalculatedFields'); }
/** * Load the basics of the current environment * * The purpose of this method is to consolidate all the various environment information into one * array under a set of common names, thereby removing the tedium of figuring out which superglobal * and key combination contain the requested information each time it is needed. * * @return void */ protected function _LoadEnvironment() { $this->_EnvironmentElement('ConfigWebRoot', Gdn::Config('Garden.WebRoot')); $this->_EnvironmentElement('ConfigStripUrls', Gdn::Config('Garden.StripWebRoot', FALSE)); $this->RequestHost(isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? val('HTTP_X_FORWARDED_HOST', $_SERVER) : (isset($_SERVER['HTTP_HOST']) ? val('HTTP_HOST', $_SERVER) : val('SERVER_NAME', $_SERVER))); $this->RequestMethod(isset($_SERVER['REQUEST_METHOD']) ? val('REQUEST_METHOD', $_SERVER) : 'CONSOLE'); // Request IP // Loadbalancers if ($TestIP = val('HTTP_X_CLUSTER_CLIENT_IP', $_SERVER)) { $IP = $TestIP; } elseif ($TestIP = val('HTTP_CLIENT_IP', $_SERVER)) { $IP = $TestIP; } elseif ($TestIP = val('HTTP_X_FORWARDED_FOR', $_SERVER)) { $IP = $TestIP; } else { $IP = val('REMOTE_ADDR', $_SERVER); } if (strpos($IP, ',') !== FALSE) { $Matched = preg_match_all('/([\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3})(?:, )?/i', $IP, $Matches); // If we found matching IPs if ($Matched) { $IPs = $Matches[1]; $IP = $IPs[0]; // Fallback } else { $IP = $_SERVER['REMOTE_ADDR']; } } // Varnish $OriginalIP = val('HTTP_X_ORIGINALLY_FORWARDED_FOR', $_SERVER, NULL); if (!is_null($OriginalIP)) { $IP = $OriginalIP; } $IP = ForceIPv4($IP); $this->RequestAddress($IP); // Request Scheme $Scheme = 'http'; // Webserver-originated SSL if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') { $Scheme = 'https'; } // Loadbalancer-originated (and terminated) SSL if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') { $Scheme = 'https'; } // Varnish $OriginalProto = val('HTTP_X_ORIGINALLY_FORWARDED_PROTO', $_SERVER, NULL); if (!is_null($OriginalProto)) { $Scheme = $OriginalProto; } $this->RequestScheme($Scheme); if (isset($_SERVER['SERVER_PORT'])) { $Port = $_SERVER['SERVER_PORT']; } elseif ($Scheme === 'https') { $Port = 443; } else { $Port = 80; } $this->Port($Port); if (is_array($_GET)) { $Get = FALSE; if ($Get === FALSE) { $Get =& $_GET; } if (!is_array($Get)) { $Original = array(); parse_str($Get, $Original); SafeParseStr($Get, $Get, $Original); } if (isset($Get['_p'])) { $Path = $Get['_p']; unset($_GET['_p']); } elseif (isset($Get['p'])) { $Path = $Get['p']; unset($_GET['p']); } else { $Path = ''; } $this->RequestURI($Path); } $PossibleScriptNames = array(); if (isset($_SERVER['SCRIPT_NAME'])) { $PossibleScriptNames[] = $_SERVER['SCRIPT_NAME']; } if (isset($_ENV['SCRIPT_NAME'])) { $PossibleScriptNames[] = $_ENV['SCRIPT_NAME']; } if (PHP_SAPI === 'cgi' && isset($_ENV['SCRIPT_URL'])) { $PossibleScriptNames[] = $_ENV['SCRIPT_URL']; } if (isset($_SERVER['SCRIPT_FILENAME'])) { $PossibleScriptNames[] = $_SERVER['SCRIPT_FILENAME']; } if (isset($_SERVER['ORIG_SCRIPT_NAME'])) { $PossibleScriptNames[] = $_SERVER['ORIG_SCRIPT_NAME']; } $this->RequestFolder(''); $TrimURI = trim($this->RequestURI(), '/'); foreach ($PossibleScriptNames as $ScriptName) { $Script = basename($ScriptName); $this->RequestScript($Script); $Folder = substr($ScriptName, 0, 0 - strlen($Script)); $TrimFolder = trim($Folder, '/'); $TrimScript = trim($Script, '/'); if (isset($_SERVER['DOCUMENT_ROOT'])) { $DocumentRoot = $_SERVER['DOCUMENT_ROOT']; } else { $AbsolutePath = str_replace("\\", "/", realpath($Script)); $DocumentRoot = substr($AbsolutePath, 0, strpos($AbsolutePath, $ScriptName)); } if (!$DocumentRoot) { continue; } $TrimRoot = rtrim($DocumentRoot); $RealFolder = str_replace($TrimRoot, '', $Folder); if (!empty($RealFolder)) { $this->RequestFolder(ltrim($RealFolder, '/')); break; } } }