Example #1
0
 public function __construct(array $settings = array())
 {
     $this->settings = $settings + array('use-cache-headers' => true, 'max-age' => 86400, 'siteaccess' => null, 'use-exceptions' => false);
     unset($settings);
     require_once __DIR__ . '/treemenu_functions.php';
     $this->setUseExceptions($this->settings['use-exceptions']);
     header('X-Powered-By: ' . eZPublishSDK::EDITION . ' (index_treemenu)');
     if ($this->settings['use-cache-headers'] === true) {
         define('MAX_AGE', $this->settings['max-age']);
         if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
             header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified');
             header('Expires: ' . gmdate('D, d M Y H:i:s', time() + MAX_AGE) . ' GMT');
             header('Cache-Control: max-age=' . MAX_AGE);
             header('Last-Modified: ' . gmdate('D, d M Y H:i:s', strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) . ' GMT');
             header('Pragma: ');
             exit;
         }
     }
     // Tweaks ini filetime checks if not defined!
     // This makes ini system not check modified time so
     // that index_treemenu.php can assume that index.php does
     // this regular enough, set in config.php to override.
     if (!defined('EZP_INI_FILEMTIME_CHECK')) {
         define('EZP_INI_FILEMTIME_CHECK', false);
     }
     eZExecution::addFatalErrorHandler(function () {
         header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error');
     });
     eZDebug::setHandleType(eZDebug::HANDLE_FROM_PHP);
     // Trick to get eZSys working with a script other than index.php (while index.php still used in generated URLs):
     $_SERVER['SCRIPT_FILENAME'] = str_replace('/index_treemenu.php', '/index.php', $_SERVER['SCRIPT_FILENAME']);
     $_SERVER['PHP_SELF'] = str_replace('/index_treemenu.php', '/index.php', $_SERVER['PHP_SELF']);
     $ini = eZINI::instance();
     $timezone = $ini->variable('TimeZoneSettings', 'TimeZone');
     if ($timezone) {
         putenv("TZ={$timezone}");
     }
     // init uri code
     $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable('REQUEST_URI');
     eZSys::init('index.php', $ini->variable('SiteAccessSettings', 'ForceVirtualHost') === 'true');
     $this->uri = eZURI::instance(eZSys::requestURI());
     $GLOBALS['eZRequestedURI'] = $this->uri;
     // Check for extension
     eZExtension::activateExtensions('default');
     // load siteaccess
     // Use injected siteaccess if available or match it internally.
     $this->access = isset($this->settings['siteaccess']) ? $this->settings['siteaccess'] : eZSiteAccess::match($this->uri, eZSys::hostname(), eZSys::serverPort(), eZSys::indexFile());
     eZSiteAccess::change($this->access);
     // Check for new extension loaded by siteaccess
     eZExtension::activateExtensions('access');
 }
 /**
  * Filters cache keys when needed.
  * Useful to avoid having current URI as a cache key if an error has occurred and has been caught by error module.
  *
  * @param array $keys
  */
 private static function filterKeys(array &$keys)
 {
     if (isset($GLOBALS['eZRequestError']) && $GLOBALS['eZRequestError'] === true) {
         $requestUri = eZSys::requestURI();
         foreach ($keys as $i => &$key) {
             if (is_array($key)) {
                 self::filterKeys($key);
             } else {
                 if ($key === $requestUri) {
                     unset($keys[$i]);
                 }
             }
         }
     }
 }
// Trick to get eZSys working with a script other than index.php (while index.php still used in generated URLs):
$_SERVER['SCRIPT_FILENAME'] = str_replace( '/index_treemenu.php', '/index.php', $_SERVER['SCRIPT_FILENAME'] );
$_SERVER['PHP_SELF'] = str_replace( '/index_treemenu.php', '/index.php', $_SERVER['PHP_SELF'] );

$ini = eZINI::instance();
$timezone = $ini->variable( 'TimeZoneSettings', 'TimeZone' );
if ( $timezone )
{
    putenv( "TZ=$timezone" );
}

// init uri code
$GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable( 'REQUEST_URI' );
eZSys::init( 'index.php', $ini->variable( 'SiteAccessSettings', 'ForceVirtualHost' ) === 'true' );
$uri = eZURI::instance( eZSys::requestURI() );

$GLOBALS['eZRequestedURI'] = $uri;

// Check for extension
eZExtension::activateExtensions( 'default' );

// load siteaccess
$access = eZSiteAccess::match( $uri,
                      eZSys::hostname(),
                      eZSys::serverPort(),
                      eZSys::indexFile() );
$access = eZSiteAccess::change( $access );
$GLOBALS['eZCurrentAccess'] = $access;

// Check for new extension loaded by siteaccess
 /**
  * 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;
 }
 /**
  * @param array $settings
  * @param null $responseWriterClass Name of the ezpRestHttpResponseWriter implementation to use during request
  */
 public function __construct(array $settings = array(), $responseWriterClass = null)
 {
     $this->responseWriterClass = $responseWriterClass;
     if (isset($settings['injected-settings'])) {
         $injectedSettings = array();
         foreach ($settings['injected-settings'] as $keySetting => $injectedSetting) {
             list($file, $section, $setting) = explode('/', $keySetting);
             $injectedSettings[$file][$section][$setting] = $injectedSetting;
         }
         // Those settings override anything else in local .ini files and their overrides
         eZINI::injectSettings($injectedSettings);
     }
     if (isset($settings['injected-merge-settings'])) {
         $injectedSettings = array();
         foreach ($settings['injected-merge-settings'] as $keySetting => $injectedSetting) {
             list($file, $section, $setting) = explode('/', $keySetting);
             $injectedSettings[$file][$section][$setting] = $injectedSetting;
         }
         // Those settings override anything else in local .ini files and their overrides
         eZINI::injectMergeSettings($injectedSettings);
     }
     $this->settings = $settings + array('use-cache-headers' => true, 'max-age' => 86400, 'siteaccess' => null, 'use-exceptions' => false);
     unset($settings, $injectedSettings, $file, $section, $setting, $keySetting, $injectedSetting);
     // lazy loaded database driver
     include __DIR__ . '/lazy.php';
     $this->setUseExceptions($this->settings['use-exceptions']);
     // Tweaks ini filetime checks if not defined!
     // This makes ini system not check modified time so
     // that index_treemenu.php can assume that index.php does
     // this regular enough, set in config.php to override.
     if (!defined('EZP_INI_FILEMTIME_CHECK')) {
         define('EZP_INI_FILEMTIME_CHECK', false);
     }
     eZExecution::addFatalErrorHandler(function () {
         if (!headers_sent()) {
             header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error');
         }
     });
     eZDebug::setHandleType(eZDebug::HANDLE_FROM_PHP);
     // Trick to get eZSys working with a script other than index.php (while index.php still used in generated URLs):
     $_SERVER['SCRIPT_FILENAME'] = str_replace('/index_rest.php', '/index.php', $_SERVER['SCRIPT_FILENAME']);
     $_SERVER['PHP_SELF'] = str_replace('/index_rest.php', '/index.php', $_SERVER['PHP_SELF']);
     $ini = eZINI::instance();
     $timezone = $ini->variable('TimeZoneSettings', 'TimeZone');
     if ($timezone) {
         putenv("TZ={$timezone}");
     }
     eZDebug::setHandleType(eZDebug::HANDLE_NONE);
     $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable('REQUEST_URI');
     $ini = eZINI::instance();
     eZSys::init('index_rest.php', $ini->variable('SiteAccessSettings', 'ForceVirtualHost') == 'true');
     $uri = eZURI::instance(eZSys::requestURI());
     $GLOBALS['eZRequestedURI'] = $uri;
     // load extensions
     eZExtension::activateExtensions('default');
     require_once __DIR__ . '/restkernel_functions.php';
     // set siteaccess from X-Siteaccess header if given and exists
     if (isset($_SERVER['HTTP_X_SITEACCESS']) && eZSiteAccess::exists($_SERVER['HTTP_X_SITEACCESS'])) {
         $access = array('name' => $_SERVER['HTTP_X_SITEACCESS'], 'type' => eZSiteAccess::TYPE_STATIC);
     } else {
         $access = eZSiteAccess::match($uri, eZSys::hostname(), eZSys::serverPort(), eZSys::indexFile());
     }
     eZSiteAccess::change($access);
     // load siteaccess extensions
     eZExtension::activateExtensions('access');
     // Now that all extensions are activated and siteaccess has been changed, reset
     // all eZINI instances as they may not take into account siteaccess specific settings.
     eZINI::resetAllInstances(false);
     if (ezpRestDebug::isDebugEnabled()) {
         $debug = ezpRestDebug::getInstance();
         $debug->updateDebugSettings();
     }
 }
Example #6
0
 /**
  * Returns a shared instance of the eZURI class IF $uri is false or the same as current
  * request uri, if not then a new non shared instance is created.
  *
  * @param bool|string $uri Shared uri instance if false
  * @return eZURI
  */
 public static function instance($uri = false)
 {
     // If $uri is false we assume the caller wants eZSys::requestURI()
     if ($uri === false or $uri == eZSys::requestURI()) {
         if (!isset($GLOBALS['eZURIRequestInstance'])) {
             $GLOBALS['eZURIRequestInstance'] = new eZURI(eZSys::requestURI());
         }
         return $GLOBALS['eZURIRequestInstance'];
     }
     return new eZURI($uri);
 }
 protected function requestInit()
 {
     if ($this->isInitialized) {
         return;
     }
     eZExecution::setCleanExit(false);
     $scriptStartTime = microtime(true);
     $GLOBALS['eZRedirection'] = false;
     $this->access = eZSiteAccess::current();
     eZDebug::setScriptStart($scriptStartTime);
     eZDebug::addTimingPoint("Script start");
     $this->uri = eZURI::instance(eZSys::requestURI());
     $GLOBALS['eZRequestedURI'] = $this->uri;
     // Be able to do general events early in process
     ezpEvent::getInstance()->notify('request/preinput', array($this->uri));
     // Initialize module loading
     $this->siteBasics['module-repositories'] = eZModule::activeModuleRepositories();
     eZModule::setGlobalPathList($this->siteBasics['module-repositories']);
     // make sure we get a new $ini instance now that it has been reset
     $ini = eZINI::instance();
     // start: eZCheckValidity
     // pre check, setup wizard related so needs to be before session/db init
     // TODO: Move validity check in the constructor? Setup is not meant to be launched at each (sub)request is it?
     if ($ini->variable('SiteAccessSettings', 'CheckValidity') === 'true') {
         $this->check = array('module' => 'setup', 'function' => 'init');
         // Turn off some features that won't bee needed yet
         $this->siteBasics['policy-check-omit-list'][] = 'setup';
         $this->siteBasics['show-page-layout'] = $ini->variable('SetupSettings', 'PageLayout');
         $this->siteBasics['validity-check-required'] = true;
         $this->siteBasics['session-required'] = $this->siteBasics['user-object-required'] = false;
         $this->siteBasics['db-required'] = $this->siteBasics['no-cache-adviced'] = $this->siteBasics['url-translator-allowed'] = false;
         $this->siteBasics['site-design-override'] = $ini->variable('SetupSettings', 'OverrideSiteDesign');
         $this->access = eZSiteAccess::change(array('name' => 'setup', 'type' => eZSiteAccess::TYPE_URI));
         eZTranslatorManager::enableDynamicTranslations();
     }
     // stop: eZCheckValidity
     if ($this->siteBasics['session-required']) {
         // Check if this should be run in a cronjob
         if ($ini->variable('Session', 'BasketCleanup') !== 'cronjob') {
             eZSession::addCallback('destroy_pre', function (eZDBInterface $db, $key, $escapedKey) {
                 $basket = eZBasket::fetch($key);
                 if ($basket instanceof eZBasket) {
                     $basket->remove();
                 }
             });
             eZSession::addCallback('gc_pre', function (eZDBInterface $db, $time) {
                 eZBasket::cleanupExpired($time);
             });
             eZSession::addCallback('cleanup_pre', function (eZDBInterface $db) {
                 eZBasket::cleanup();
             });
         }
         // addCallBack to update session id for shop basket on session regenerate
         eZSession::addCallback('regenerate_post', function (eZDBInterface $db, $escNewKey, $escOldKey) {
             $db->query("UPDATE ezbasket SET session_id='{$escNewKey}' WHERE session_id='{$escOldKey}'");
         });
         // TODO: Session starting should be made only once in the constructor
         $this->sessionInit();
     }
     // if $this->siteBasics['db-required'], open a db connection and check that db is connected
     if ($this->siteBasics['db-required'] && !eZDB::instance()->isConnected()) {
         $this->warningList[] = array('error' => array('type' => 'kernel', 'number' => eZError::KERNEL_NO_DB_CONNECTION), 'text' => 'No database connection could be made, the system might not behave properly.');
     }
     // eZCheckUser: pre check, RequireUserLogin & FORCE_LOGIN related so needs to be after session init
     if (!isset($this->check)) {
         $this->check = eZUserLoginHandler::preCheck($this->siteBasics, $this->uri);
     }
     ezpEvent::getInstance()->notify('request/input', array($this->uri));
     // Initialize with locale settings
     // TODO: Move to constructor? Is it relevant to init the locale/charset for each (sub)requests?
     $this->languageCode = eZLocale::instance()->httpLocaleCode();
     $phpLocale = trim($ini->variable('RegionalSettings', 'SystemLocale'));
     if ($phpLocale != '') {
         setlocale(LC_ALL, explode(',', $phpLocale));
     }
     $this->httpCharset = eZTextCodec::httpCharset();
     // TODO: are these parameters supposed to vary across potential sub-requests?
     $this->site = array('title' => $ini->variable('SiteSettings', 'SiteName'), 'design' => $ini->variable('DesignSettings', 'SiteDesign'), 'http_equiv' => array('Content-Type' => 'text/html; charset=' . $this->httpCharset, 'Content-language' => $this->languageCode));
     // Read role settings
     $this->siteBasics['policy-check-omit-list'] = array_merge($this->siteBasics['policy-check-omit-list'], $ini->variable('RoleSettings', 'PolicyOmitList'));
     $this->isInitialized = true;
 }
Example #8
0
    $moduleResult['ui_context'] = $module->uiContextName();
}
$moduleResult['ui_component'] = $module->uiComponentName();
$moduleResult['is_mobile_device'] = $mobileDeviceDetect->isMobileDevice();
$moduleResult['mobile_device_alias'] = $mobileDeviceDetect->getUserAgentAlias();
$templateResult = null;
eZDebug::setUseExternalCSS($use_external_css);
if ($show_page_layout) {
    $tpl = eZTemplate::factory();
    if ($tpl->hasVariable('node')) {
        $tpl->unsetVariable('node');
    }
    if (!isset($moduleResult['path'])) {
        $moduleResult['path'] = false;
    }
    $moduleResult['uri'] = eZSys::requestURI();
    $tpl->setVariable("module_result", $moduleResult);
    $meta = $ini->variable('SiteSettings', 'MetaDataArray');
    if (!isset($meta['description'])) {
        $metaDescription = "";
        if (isset($moduleResult['path']) and is_array($moduleResult['path'])) {
            foreach ($moduleResult['path'] as $pathPart) {
                if (isset($pathPart['text'])) {
                    $metaDescription .= $pathPart['text'] . " ";
                }
            }
        }
        $meta['description'] = $metaDescription;
    }
    $site['uri'] = $oldURI;
    $site['redirect'] = false;
Example #9
0
 static function init($index = "index.php", $force_VirtualHost = false)
 {
     $isCGI = substr(php_sapi_name(), 0, 3) == 'cgi';
     $instance = eZSys::instance();
     if (eZSys::isDebugEnabled()) {
         eZDebug::writeNotice(eZSys::serverVariable('PHP_SELF'), 'PHP_SELF');
         eZDebug::writeNotice(eZSys::serverVariable('SCRIPT_FILENAME'), 'SCRIPT_FILENAME');
         eZDebug::writeNotice(eZSys::serverVariable('DOCUMENT_ROOT'), 'DOCUMENT_ROOT');
         eZDebug::writeNotice(eZSys::serverVariable('REQUEST_URI'), 'REQUEST_URI');
         eZDebug::writeNotice(eZSys::serverVariable('QUERY_STRING'), 'QUERY_STRING');
         eZDebug::writeNotice(ini_get('include_path'), 'include_path');
     }
     $phpSelf = eZSys::serverVariable('PHP_SELF');
     // Find out, where our files are.
     if (preg_match("!(.*/){$index}\$!", eZSys::serverVariable('SCRIPT_FILENAME'), $regs)) {
         $siteDir = $regs[1];
         $index = "/{$index}";
     } elseif (preg_match("!(.*/){$index}/?!", $phpSelf, $regs)) {
         // Some people using CGI have their $_SERVER['SCRIPT_FILENAME'] not right... so we are trying this.
         $siteDir = eZSys::serverVariable('DOCUMENT_ROOT') . $regs[1];
         $index = "/{$index}";
     } else {
         // Fallback... doesn't work with virtual-hosts, but better than nothing
         $siteDir = "./";
         $index = "/{$index}";
     }
     if ($isCGI and !$force_VirtualHost) {
         $index .= '?';
     }
     // Setting the right include_path
     $includePath = ini_get("include_path");
     if (trim($includePath) != "") {
         $includePath = $includePath . $instance->envSeparator() . $siteDir;
     } else {
         $includePath = $siteDir;
     }
     ini_set("include_path", $includePath);
     $scriptName = eZSys::serverVariable('SCRIPT_NAME');
     // Get the webdir.
     $wwwDir = "";
     if ($force_VirtualHost) {
         $wwwDir = "";
     } else {
         if (preg_match("!(.*){$index}\$!", $scriptName, $regs)) {
             $wwwDir = $regs[1];
         }
         if (preg_match("!(.*){$index}\$!", $phpSelf, $regs)) {
             $wwwDir = $regs[1];
         }
     }
     if (!$isCGI || $force_VirtualHost) {
         $requestURI = eZSys::serverVariable('REQUEST_URI');
     } else {
         $requestURI = eZSys::serverVariable('QUERY_STRING');
         /* take out PHPSESSID, if url-encoded */
         if (preg_match("/(.*)&PHPSESSID=[^&]+(.*)/", $requestURI, $matches)) {
             $requestURI = $matches[1] . $matches[2];
         }
     }
     // Fallback... Finding the paths above failed, so $_SERVER['PHP_SELF'] is not set right.
     if ($siteDir == "./") {
         $phpSelf = $requestURI;
     }
     if (!$isCGI) {
         $index_reg = str_replace(".", "\\.", $index);
         // Trick: Rewrite setup doesn't have index.php in $_SERVER['PHP_SELF'], so we don't want an $index
         if (!preg_match("!.*{$index_reg}.*!", $phpSelf) || $force_VirtualHost) {
             $index = "";
         } else {
             if (eZSys::isDebugEnabled()) {
                 eZDebug::writeNotice("{$wwwDir}{$index}", '$wwwDir$index');
             }
             // Get the right $_SERVER['REQUEST_URI'], when using nVH setup.
             if (preg_match("!^{$wwwDir}{$index}(.*)!", $phpSelf, $req)) {
                 if (!$req[1]) {
                     if ($phpSelf != "{$wwwDir}{$index}" and preg_match("!^{$wwwDir}(.*)!", $requestURI, $req)) {
                         $requestURI = $req[1];
                         $index = '';
                     } elseif ($phpSelf == "{$wwwDir}{$index}" and (preg_match("!^{$wwwDir}{$index}(.*)!", $requestURI, $req) or preg_match("!^{$wwwDir}(.*)!", $requestURI, $req))) {
                         $requestURI = $req[1];
                     }
                 } else {
                     $requestURI = $req[1];
                 }
             }
         }
     }
     if ($isCGI and $force_VirtualHost) {
         $index = '';
     }
     // Remove url parameters
     if ($isCGI and !$force_VirtualHost) {
         $pattern = "!(\\/[^&]+)!";
     } else {
         $pattern = "!([^?]+)!";
     }
     if (preg_match($pattern, $requestURI, $regs)) {
         $requestURI = $regs[1];
     }
     // Remove internal links
     if (preg_match("!([^#]+)!", $requestURI, $regs)) {
         $requestURI = $regs[1];
     }
     if (!$isCGI) {
         $currentPath = substr(eZSys::serverVariable('SCRIPT_FILENAME'), 0, -strlen('index.php'));
         if (strpos($currentPath, eZSys::serverVariable('DOCUMENT_ROOT')) === 0) {
             $prependRequest = substr($currentPath, strlen(eZSys::serverVariable('DOCUMENT_ROOT')));
             if (strpos($requestURI, $prependRequest) === 0) {
                 $requestURI = substr($requestURI, strlen($prependRequest) - 1);
                 $wwwDir = substr($prependRequest, 0, -1);
             }
         }
     }
     $instance->AccessPath = array('siteaccess' => array('name' => '', 'url' => array()), 'path' => array('name' => '', 'url' => array()));
     $instance->SiteDir = $siteDir;
     $instance->WWWDir = $wwwDir;
     $instance->IndexFile = $index;
     $instance->RequestURI = $requestURI;
     if (eZSys::isDebugEnabled()) {
         eZDebug::writeNotice($instance->SiteDir, 'SiteDir');
         eZDebug::writeNotice($instance->WWWDir, 'WWWDir');
         eZDebug::writeNotice($instance->IndexFile, 'IndexFile');
         eZDebug::writeNotice(eZSys::requestURI(), 'eZSys::requestURI()');
     }
 }
 /**
  * Handles redirection to the mobile optimized interface
  *
  */
 public function redirect()
 {
     $http = eZHTTPTool::instance();
     $currentSiteAccess = eZSiteAccess::current();
     if ($http->hasGetVariable('notmobile')) {
         setcookie('eZMobileDeviceDetect', 1, time() + (int) eZINI::instance()->variable('SiteAccessSettings', 'MobileDeviceDetectCookieTimeout'), '/');
         $http->redirect(eZSys::indexDir());
         eZExecution::cleanExit();
     }
     if (!isset($_COOKIE['eZMobileDeviceDetect']) && !in_array($currentSiteAccess['name'], eZINI::instance()->variable('SiteAccessSettings', 'MobileSiteAccessList'))) {
         $currentUrl = eZSys::serverURL() . eZSys::requestURI();
         $redirectUrl = eZINI::instance()->variable('SiteAccessSettings', 'MobileSiteAccessURL');
         // Do not redirect if already on the redirect url
         if (strpos($currentUrl, $redirectUrl) !== 0) {
             // Default siteaccess name needs to be removed from the uri when redirecting
             $uri = explode('/', ltrim(eZSys::requestURI(), '/'));
             if (array_shift($uri) == $currentSiteAccess['name']) {
                 $http->redirect($redirectUrl . '/' . implode('/', $uri));
             } else {
                 $http->redirect($redirectUrl . eZSys::requestURI());
             }
         }
         eZExecution::cleanExit();
     }
 }
Example #11
0
 /**
  * \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();
     }
 }
 private function generateViewParametersString($preSeparator = '', $postSeparator = '')
 {
     // taking view parameters and generate a string with them
     $eZURI = eZURI::instance(eZSys::requestURI());
     $viewParametersString = '';
     foreach ($eZURI->UserArray as $paramName => $paramValue) {
         $viewParametersString .= $preSeparator . $paramName . $postSeparator . $paramValue;
     }
     return $viewParametersString;
 }
 public function customClassAttributeHTTPAction($http, $action, $classAttribute)
 {
     $object = false;
     preg_match("#^(.*)_([0-9]+)\$#", $action, $matches);
     if (count($matches) === 3) {
         $action = $matches[1];
         $object = eZContentObject::fetch($matches[2]);
     }
     $skipUserIDs = $classAttribute->attribute(self::$definition['skip_user_ids']['field']);
     $skipUserIDs = explode(',', $skipUserIDs);
     switch ($action) {
         case 'browse_user':
             $ini = eZINI::instance();
             $id = $classAttribute->attribute('id');
             $uri = eZURI::instance(eZSys::requestURI());
             $userClass = eZContentClass::fetch($ini->variable('UserSettings', 'UserClassID'));
             if ($userClass instanceof eZContentClass === false) {
                 break;
             }
             $browseParameters = array('action_name' => 'AddRelatedObjectToDataType', 'browse_custom_action' => array('name' => 'CustomActionButton[' . $id . '_add_user]', 'value' => 'add_user'), 'persistent_data' => array('ContentClassHasInput' => 0), 'from_page' => $uri->originalURIString(), 'start_node' => 5, 'class_array' => array($userClass->attribute('identifier')));
             $module = null;
             $browseURL = eZContentBrowse::browse($browseParameters, $module);
             eZURI::transformURI($browseURL);
             $http->redirect($browseURL);
             break;
         case 'add_user':
             if ($http->hasPostVariable('SelectedObjectIDArray') && $http->hasPostVariable('BrowseCancelButton') === false) {
                 $selectedObjectIDs = $http->postVariable('SelectedObjectIDArray');
                 $selectedObjectID = $selectedObjectIDs[0];
             }
             if (in_array($selectedObjectID, $skipUserIDs) === false) {
                 $skipUserIDs[] = $selectedObjectID;
                 $classAttribute->setAttribute(self::$definition['skip_user_ids']['field'], implode(',', $skipUserIDs));
             }
             break;
         case 'remove_skip_user':
             if ($object instanceof eZContentObject) {
                 foreach ($skipUserIDs as $key => $userID) {
                     if ($userID == $object->attribute('id')) {
                         unset($skipUserIDs[$key]);
                         break;
                     }
                 }
                 $classAttribute->setAttribute(self::$definition['skip_user_ids']['field'], implode(',', $skipUserIDs));
             }
             break;
     }
 }
    /**
     * \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 );

        $sslZoneRedirectionURL = false;
        if ( $nowSSL && !$inSSL )
        {
            // switch to plain HTTP
            $ini = eZINI::instance();
            $host = $ini->variable( 'SiteSettings', 'SiteURL' );
            $sslZoneRedirectionURL = "http://" . $host . $indexDir . $requestURI;
        }
        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;
        }

        if ( $sslZoneRedirectionURL ) // if a redirection URL is found
        {
            eZDebugSetting::writeDebug( 'kernel-ssl-zone', "redirecting to [$sslZoneRedirectionURL]" );
            eZHTTPTool::redirect( $sslZoneRedirectionURL, array(), false, false );
            eZExecution::cleanExit();
        }
    }
 function modify($tpl, $operatorName, $operatorParameters, &$rootNamespace, &$currentNamespace, &$operatorValue, &$namedParameters)
 {
     $ini = eZINI::instance('xrowmetadata.ini');
     $page_limit = $ini->variable('EditorInputSettings', 'MaxPageLimit');
     $uri = eZURI::instance(eZSys::requestURI());
     $viewParameters = $uri->UserParameters();
     if (count($viewParameters) == 0) {
         $page_offset = 0;
     } else {
         $page_offset = $viewParameters['offset'];
     }
     switch ($operatorName) {
         case 'metadata':
             if (isset($namedParameters['node_id'])) {
                 $node = eZContentObjectTreeNode::fetch($namedParameters['node_id']);
                 if ($node instanceof eZContentObjectTreeNode) {
                     $cur_parent = $node->fetchParent();
                     $obj_name = $node->getName();
                     $obj_count = $node->subTreeCount(array('IgnoreVisibility' => true));
                     $localbusiness_count = $node->subTreeCount(array('IgnoreVisibility' => true, 'ClassFilterType' => 'include', 'ClassFilterArray' => array('localbusiness')));
                     $path_array_temp = array_reverse(explode('/', $node->pathWithNames()));
                     $obj_path = implode(' | ', $path_array_temp);
                     $obj_parentname = $cur_parent->Name;
                     $page_count = ceil($localbusiness_count / $page_limit);
                     $page_nr = $page_offset / $page_limit + 1;
                     $page_count_value = ezpI18n::tr('kernel/classes/datatypes', 'page') . " " . $page_nr . "/" . $page_count;
                     $operatorValue = xrowMetaDataFunctions::fetchByObject($node->attribute('object'));
                     if ($operatorValue !== false) {
                         if (isset($operatorValue->title)) {
                             $search_title = $operatorValue->title;
                             $placeholder_title_array = self::getPlaceholders($search_title);
                             if (count($placeholder_title_array) !== 0) {
                                 foreach ($placeholder_title_array as $placeholder_title) {
                                     switch ($placeholder_title) {
                                         case "count":
                                             $meta_title = str_replace("[count]", $obj_count, $search_title);
                                             continue;
                                         case "name":
                                             $meta_title = str_replace("[name]", $obj_name, $search_title);
                                             continue;
                                         case "path":
                                             $meta_title = str_replace("[path]", $obj_path, $search_title);
                                             continue;
                                         case "parentname":
                                             $meta_title = str_replace("[parentname]", $obj_parentname, $search_title);
                                             continue;
                                         case "count:localbusiness":
                                             $meta_title = str_replace("[count:localbusiness]", $localbusiness_count, $search_title);
                                             continue;
                                         case "pagecount":
                                             $meta_title = str_replace("[pagecount]", $page_count_value, $search_title);
                                             continue;
                                     }
                                     $search_title = $meta_title;
                                 }
                                 $operatorValue->title = $search_title;
                                 unset($search_title);
                             }
                         }
                         if (isset($operatorValue->description)) {
                             $search_description = $operatorValue->description;
                             $placeholder_title_description = self::getPlaceholders($search_description);
                             if (count($placeholder_title_description) !== 0) {
                                 foreach ($placeholder_title_description as $placeholder_description) {
                                     switch ($placeholder_description) {
                                         case "count":
                                             $meta_description = str_replace("[count]", $obj_count, $search_description);
                                             continue;
                                         case "name":
                                             $meta_description = str_replace("[name]", $obj_name, $search_description);
                                             continue;
                                         case "path":
                                             $meta_description = str_replace("[path]", $obj_path, $search_description);
                                             continue;
                                         case "parentname":
                                             $meta_description = str_replace("[parentname]", $obj_parentname, $search_description);
                                             continue;
                                         case "count:localbusiness":
                                             $meta_description = str_replace("[count:localbusiness]", $localbusiness_count, $search_description);
                                             continue;
                                         case "pagecount":
                                             $meta_description = str_replace("[pagecount]", $page_count_value, $search_description);
                                             continue;
                                     }
                                     $search_description = $meta_description;
                                 }
                                 $operatorValue->description = $search_description;
                                 unset($search_description);
                             }
                         }
                     }
                 } else {
                     $operatorValue = false;
                 }
             } else {
                 $operatorValue = false;
             }
             break;
     }
 }
Example #16
0
 /**
  *  Generate cache  key array based on current user roles, requested url, layout
  *
  * @param $userKeys Array
  * @return array
  */
 public function getCacheKeysArray($userKeys)
 {
     if (!is_array($userKeys)) {
         $userKeys = array($userKeys);
     }
     $user = eZUser::currentUser();
     $limitedAssignmentValueList = $user->limitValueList();
     $roleList = $user->roleIDList();
     $discountList = eZUserDiscountRule::fetchIDListByUserID($user->attribute('contentobject_id'));
     $currentSiteAccess = isset($GLOBALS['eZCurrentAccess']['name']) ? $GLOBALS['eZCurrentAccess']['name'] : false;
     $res = eZTemplateDesignResource::instance();
     $keys = $res->keys();
     $layout = isset($keys['layout']) ? $keys['layout'] : false;
     $uri = eZURI::instance(eZSys::requestURI());
     $actualRequestedURI = $uri->uriString();
     $userParameters = $uri->userParameters();
     $cacheKeysArray = array('spdf2png', $currentSiteAccess, $layout, $actualRequestedURI, implode('.', $userParameters), implode('.', $roleList), implode('.', $limitedAssignmentValueList), implode('.', $discountList), implode('.', $userKeys));
     return $cacheKeysArray;
 }