function modify($tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, &$operatorValue, $namedParameters, $placement) { $destination = $namedParameters['destination']; switch ($operatorName) { case 'language_switcher': $ini = eZINI::instance(); if (!$ini->hasVariable('RegionalSettings', 'LanguageSwitcherClass')) { return; } // Append original query string if no query string has already been passed in $destination if (strpos($destination, '?') === false) { $destination .= eZSys::queryString(); } $className = $ini->variable('RegionalSettings', 'LanguageSwitcherClass'); $operatorValue = call_user_func(array($className, 'setupTranslationSAList'), $destination); break; } }
/** * Returns a shared instance of the eZUser class pr $id value. * If user can not be fetched, then anonymous user is returned and * a warning trown, if anonymous user can not be fetched, then NoUser * is returned and another warning is thrown. * * @param int|false $id On false: Gets current user id from session * or from {@link eZUser::anonymousId()} if not set. * @return eZUser */ static function instance($id = false) { if (!empty($GLOBALS["eZUserGlobalInstance_{$id}"])) { return $GLOBALS["eZUserGlobalInstance_{$id}"]; } $userId = $id; $currentUser = null; $http = eZHTTPTool::instance(); $anonymousUserID = self::anonymousId(); $sessionHasStarted = eZSession::hasStarted(); // If not specified get the current user if ($userId === false) { if ($sessionHasStarted) { $userId = $http->sessionVariable('eZUserLoggedInID'); if (!is_numeric($userId)) { $userId = $anonymousUserID; eZSession::setUserID($userId); $http->setSessionVariable('eZUserLoggedInID', $userId); } } else { $userId = $anonymousUserID; eZSession::setUserID($userId); } } // Check user cache (this effectivly fetches user from cache) // user not found if !isset( isset( $userCache['info'][$userId] ) ) $userCache = self::getUserCacheByUserId($userId); if (isset($userCache['info'][$userId])) { $userArray = $userCache['info'][$userId]; if (is_numeric($userArray['contentobject_id'])) { $currentUser = new eZUser($userArray); $currentUser->setUserCache($userCache); } } $ini = eZINI::instance(); // Check if: // - the user has not logged out, // - the user is not logged in, // - and if a automatic single sign on plugin is enabled. if (!self::$userHasLoggedOut && is_object($currentUser) && !$currentUser->isRegistered()) { $ssoHandlerArray = $ini->variable('UserSettings', 'SingleSignOnHandlerArray'); if (!empty($ssoHandlerArray)) { $ssoUser = false; foreach ($ssoHandlerArray as $ssoHandler) { $className = 'eZ' . $ssoHandler . 'SSOHandler'; if (class_exists($className)) { $impl = new $className(); $ssoUser = $impl->handleSSOLogin(); // If a user was found via SSO, then use it if ($ssoUser !== false) { $currentUser = $ssoUser; $userId = $currentUser->attribute('contentobject_id'); $userInfo = array(); $userInfo[$userId] = array('contentobject_id' => $userId, 'login' => $currentUser->attribute('login'), 'email' => $currentUser->attribute('email'), 'password_hash' => $currentUser->attribute('password_hash'), 'password_hash_type' => $currentUser->attribute('password_hash_type')); eZSession::setUserID($userId); $http->setSessionVariable('eZUserLoggedInID', $userId); eZUser::updateLastVisit($userId); eZUser::setCurrentlyLoggedInUser($currentUser, $userId); eZHTTPTool::redirect(eZSys::wwwDir() . eZSys::indexFile(false) . eZSys::requestURI() . eZSys::queryString(), array(), 302); eZExecution::cleanExit(); } } else { eZDebug::writeError("Undefined ssoHandler class: {$className}", __METHOD__); } } } } if ($userId != $anonymousUserID) { $sessionInactivityTimeout = $ini->variable('Session', 'ActivityTimeout'); if (!isset($GLOBALS['eZSessionIdleTime'])) { eZUser::updateLastVisit($userId); } else { $sessionIdle = $GLOBALS['eZSessionIdleTime']; if ($sessionIdle > $sessionInactivityTimeout) { eZUser::updateLastVisit($userId); } } } if (!$currentUser) { $currentUser = eZUser::fetch(self::anonymousId()); eZDebug::writeWarning('User not found, returning anonymous'); } if (!$currentUser) { $currentUser = new eZUser(array('id' => -1, 'login' => 'NoUser')); eZDebug::writeWarning('Anonymous user not found, returning NoUser'); } $GLOBALS["eZUserGlobalInstance_{$id}"] = $currentUser; return $currentUser; }
/** * Get value for an attribute * * @param string $attr * @return boolean the value for attribute $attr or null if it does not exist. */ public function attribute($attr) { switch ($attr) { case 'element': return $this->element(); break; case 'tail': return $this->elements(); break; case 'base': return $this->base(); break; case 'index': return $this->index(); break; case 'uri': return $this->uriString(); break; case 'original_uri': return $this->originalURIString(); break; case 'query_string': return eZSys::queryString(); break; default: eZDebug::writeError("Attribute '{$attr}' does not exist", __METHOD__); return null; break; } }
$Module->redirectToView('register'); } $userIsNotAllowedToLogin = false; $failedLoginAttempts = false; $maxNumOfFailedLogin = !eZUser::isTrusted() ? eZUser::maxNumberOfFailedLogin() : false; // Should we show message about failed login attempt and max number of failed login if ($loginWarning and isset($GLOBALS['eZFailedLoginAttemptUserID'])) { $showMessageIfExceeded = $ini->hasVariable('UserSettings', 'ShowMessageIfExceeded') ? $ini->variable('UserSettings', 'ShowMessageIfExceeded') == 'true' : false; $failedUserID = $GLOBALS['eZFailedLoginAttemptUserID']; $failedLoginAttempts = eZUser::failedLoginAttemptsByUserID($failedUserID); $canLogin = eZUser::isEnabledAfterFailedLogin($failedUserID); if ($showMessageIfExceeded and !$canLogin) { $userIsNotAllowedToLogin = true; } } $tpl = eZTemplate::factory(); $tpl->setVariable('login', $userLogin, 'User'); $tpl->setVariable('post_data', $postData, 'User'); $tpl->setVariable('password', $userPassword, 'User'); $tpl->setVariable('redirect_uri', $userRedirectURI . eZSys::queryString(), 'User'); $tpl->setVariable('warning', array('bad_login' => $loginWarning), 'User'); $tpl->setVariable('site_access', array('allowed' => $siteAccessAllowed, 'name' => $siteAccessName)); $tpl->setVariable('user_is_not_allowed_to_login', $userIsNotAllowedToLogin, 'User'); $tpl->setVariable('failed_login_attempts', $failedLoginAttempts, 'User'); $tpl->setVariable('max_num_of_failed_login', $maxNumOfFailedLogin, 'User'); $Result = array(); $Result['content'] = $tpl->fetch('design:user/login.tpl'); $Result['path'] = array(array('text' => ezpI18n::tr('kernel/user', 'User'), 'url' => false), array('text' => ezpI18n::tr('kernel/user', 'Login'), 'url' => false)); if ($ini->variable('SiteSettings', 'LoginPage') == 'custom') { $Result['pagelayout'] = 'loginpagelayout.tpl'; }
/** * Performs a redirection */ protected function redirect() { $GLOBALS['eZRedirection'] = true; $ini = eZINI::instance(); $automaticRedirect = true; if ($GLOBALS['eZDebugAllowed'] && ($redirUri = $ini->variable('DebugSettings', 'DebugRedirection')) !== 'disabled') { if ($redirUri == "enabled") { $automaticRedirect = false; } else { $uri = eZURI::instance(eZSys::requestURI()); $uri->toBeginning(); foreach ($ini->variableArray("DebugSettings", "DebugRedirection") as $redirUri) { $redirUri = new eZURI($redirUri); if ($redirUri->matchBase($uri)) { $automaticRedirect = false; break; } } } } $redirectURI = eZSys::indexDir(); $moduleRedirectUri = $this->module->redirectURI(); if ($ini->variable('URLTranslator', 'Translation') === 'enabled' && eZURLAliasML::urlTranslationEnabledByUri(new eZURI($moduleRedirectUri))) { $translatedModuleRedirectUri = $moduleRedirectUri; if (eZURLAliasML::translate($translatedModuleRedirectUri, true)) { $moduleRedirectUri = $translatedModuleRedirectUri; if (strlen($moduleRedirectUri) > 0 && $moduleRedirectUri[0] !== '/') { $moduleRedirectUri = '/' . $moduleRedirectUri; } } } if (preg_match('#^(\\w+:)|^//#', $moduleRedirectUri)) { $redirectURI = $moduleRedirectUri; } else { $leftSlash = strlen($redirectURI) > 0 && $redirectURI[strlen($redirectURI) - 1] === '/'; $rightSlash = strlen($moduleRedirectUri) > 0 && $moduleRedirectUri[0] === '/'; if (!$leftSlash && !$rightSlash) { // Both are without a slash, so add one $moduleRedirectUri = '/' . $moduleRedirectUri; } else { if ($leftSlash && $rightSlash) { // Both are with a slash, so we remove one $moduleRedirectUri = substr($moduleRedirectUri, 1); } } // In some cases $moduleRedirectUri can already contain $redirectURI (including the siteaccess). if (!empty($redirectURI) && strpos($moduleRedirectUri, $redirectURI) === 0) { $redirectURI = $moduleRedirectUri; } else { $redirectURI .= $moduleRedirectUri; } } // After the module redirect url is completed, add the queryString params so they carry over the redirect operation $redirectURI .= eZSys::queryString(); if ($ini->variable('ContentSettings', 'StaticCache') == 'enabled') { $staticCacheHandlerClassName = $ini->variable('ContentSettings', 'StaticCacheHandler'); $staticCacheHandlerClassName::executeActions(); } eZDB::checkTransactionCounter(); if (!$automaticRedirect) { // Make sure any errors or warnings are reported if ($ini->variable('DebugSettings', 'DisplayDebugWarnings') === 'enabled') { if (isset($GLOBALS['eZDebugError']) && $GLOBALS['eZDebugError']) { eZAppendWarningItem(array('error' => array('type' => 'error', 'number' => 1, 'count' => $GLOBALS['eZDebugErrorCount']), 'identifier' => 'ezdebug-first-error', 'text' => ezpI18n::tr('index.php', 'Some errors occurred, see debug for more information.'))); } if (isset($GLOBALS['eZDebugWarning']) && $GLOBALS['eZDebugWarning']) { eZAppendWarningItem(array('error' => array('type' => 'warning', 'number' => 1, 'count' => $GLOBALS['eZDebugWarningCount']), 'identifier' => 'ezdebug-first-warning', 'text' => ezpI18n::tr('index.php', 'Some general warnings occured, see debug for more information.'))); } } $tpl = eZTemplate::factory(); $tpl->setVariable('site', $this->site); $tpl->setVariable('warning_list', !empty($this->warningList) ? $this->warningList : false); $tpl->setVariable('redirect_uri', eZURI::encodeURL($redirectURI)); $templateResult = $tpl->fetch('design:redirect.tpl'); eZDebug::addTimingPoint("Script end"); eZDisplayResult($templateResult); eZExecution::cleanExit(); } return eZHTTPTool::redirect($redirectURI, array(), $this->module->redirectStatus(), true, true); }
/** * \static * \param $inSSL The desired access mode. * * Change access mode (HTTP/HTTPS): * - If previous mode was HHTP but $inSSL is true, we switch to SSL. * - If previous mode was SSL but $inSSL is false, we switch to HTTP. * - Otherwise no mode change is occured. * * Mode change is done by redirect to the same URL, but with changed * protocol (http/https) and TCP port. * * In case of mode change this method does not return (exit() is called). */ static function switchIfNeeded($inSSL) { // if it's undefined whether we should redirect we do nothing if (!isset($inSSL)) { return; } // $nowSSl is true if current access mode is HTTPS. $nowSSL = eZSys::isSSLNow(); $requestURI = eZSys::requestURI(); $indexDir = eZSys::indexDir(false); // If there are any $_GET parameters, those should be passed into the new URI $getString = eZSys::queryString(); $sslZoneRedirectionURL = false; if ($nowSSL && !$inSSL) { // switch to plain HTTP $ini = eZINI::instance(); $host = $ini->variable('SiteSettings', 'SiteURL'); $port = parse_url("http://{$host}", PHP_URL_PORT); $host = eZSys::serverVariable('HTTP_HOST'); $host = preg_replace('/:\\d+$/', '', $host); if ($port && $port != 80) { $host .= ":{$port}"; } $sslZoneRedirectionURL = "http://" . $host . $indexDir . $requestURI . $getString; } elseif (!$nowSSL && $inSSL) { // switch to HTTPS $host = eZSys::serverVariable('HTTP_HOST'); $host = preg_replace('/:\\d+$/', '', $host); $ini = eZINI::instance(); $sslPort = $ini->variable('SiteSettings', 'SSLPort'); $sslPortString = $sslPort == eZSSLZone::DEFAULT_SSL_PORT ? '' : ":{$sslPort}"; $sslZoneRedirectionURL = "https://" . $host . $sslPortString . $indexDir . $requestURI . $getString; } if ($sslZoneRedirectionURL) { eZDebugSetting::writeDebug('kernel-ssl-zone', "redirecting to [{$sslZoneRedirectionURL}]"); eZHTTPTool::redirect($sslZoneRedirectionURL, array(), false, false); eZExecution::cleanExit(); } }