Index: trunk/core/kernel/application.php =================================================================== diff -u -r3145 -r3154 --- trunk/core/kernel/application.php (.../application.php) (revision 3145) +++ trunk/core/kernel/application.php (.../application.php) (revision 3154) @@ -238,19 +238,34 @@ function GetDefaultLanguageId() { + static $language_id = 0; + + if($language_id > 0) return $language_id; + $table = $this->getUnitOption('lang','TableName'); $id_field = $this->getUnitOption('lang','IDField'); - return $this->DB->GetOne('SELECT '.$id_field.' FROM '.$table.' WHERE PrimaryLang = 1'); + $language_id = $this->DB->GetOne('SELECT '.$id_field.' FROM '.$table.' WHERE PrimaryLang = 1'); + + return $language_id; } function GetDefaultThemeId() { - if (defined('DBG_FORCE_THEME') && DBG_FORCE_THEME){ - return DBG_FORCE_THEME; + static $theme_id = 0; + + if($theme_id > 0) return $theme_id; + + if (defined('DBG_FORCE_THEME') && DBG_FORCE_THEME) + { + $theme_id = DBG_FORCE_THEME; } - $table = $this->getUnitOption('theme','TableName'); - $id_field = $this->getUnitOption('theme','IDField'); - return $this->DB->GetOne('SELECT '.$id_field.' FROM '.$table.' WHERE PrimaryTheme = 1'); + else + { + $table = $this->getUnitOption('theme','TableName'); + $id_field = $this->getUnitOption('theme','IDField'); + $theme_id = $this->DB->GetOne('SELECT '.$id_field.' FROM '.$table.' WHERE PrimaryTheme = 1'); + } + return $theme_id; } function GetPrimaryCurrency() @@ -314,7 +329,7 @@ $this->registerClass('TemplateParser',KERNEL_PATH.'/parser/template_parser.php'); $this->registerClass('MainProcessor', KERNEL_PATH.'/processors/main_processor.php','m_TagProcessor'); - + $this->registerClass('kMultipleFilter', KERNEL_PATH.'/utility/filters.php'); $this->registerClass('kDBList', KERNEL_PATH.'/db/dblist.php'); $this->registerClass('kDBItem', KERNEL_PATH.'/db/dbitem.php'); @@ -757,13 +772,10 @@ if ( $this->RewriteURLs() ) { - $env = $this->BuildEnv('', $params, $pass, $pass_events, false); - $env = ltrim($env, ':-'); - $session =& $this->recallObject('Session'); - $sid = $session->NeedQueryString() ? '?sid='.$this->GetSID() : ''; -// $env = str_replace(':', '/', $env); - $ret = rtrim($this->BaseURL($prefix, $ssl).$t.'.html/'.$env.'/'.$sid.$map_link, '/'); + if( $session->NeedQueryString() ) $params['sid'] = $this->GetSID(); + $url = $this->BuildEnv_NEW($t, $params, $pass, $pass_events, false); + $ret = $this->BaseURL($prefix, $ssl).$url.$map_link; } else @@ -774,7 +786,63 @@ return $ret; } + + function BuildEnv_NEW($t, $params, $pass='all', $pass_events=false, $env_var=true) + { + $session =& $this->recallObject('Session'); + $force_admin = getArrayValue($params,'admin') || $this->GetVar('admin'); + + if($force_admin) $sid = $this->GetSID(); + $ret = ''; + /*if ($env_var) { + $ret = ENV_VAR_NAME.'='; + } + $ret .= defined('INPORTAL_ENV') ? $sid.'-'.$t : $sid.':'.$t; + */ + + $encode = false; + if (isset($params['__URLENCODE__'])) + { + $encode = $params['__URLENCODE__']; + unset($params['__URLENCODE__']); + } + + $pass = str_replace('all', trim($this->GetVar('passed'), ','), $pass); + + if(strlen($pass) > 0) + { + $pass_info = array_unique( explode(',',$pass) ); // array( prefix[.special], prefix[.special] ... + $event_params = Array('t' => $t, 'pass_events' => $pass_events); + foreach($pass_info as $pass_element) + { + $event_params['url_params'] = $params; + $event = new kEvent($pass_element.':BuildEnv', $event_params); + $this->HandleEvent($event); + $ret .= '/'.$event->getEventParam('env_string'); + $params = $event->getEventParam('url_params'); // save back unprocessed parameters + } + $ret = trim($ret, '/').'.html'; + } + + unset($params['pass'], $params['opener'], $params['m_event']); + if ($force_admin) $params['admin'] = 1; + + if( getArrayValue($params,'escape') ) + { + $ret = addslashes($ret); + unset($params['escape']); + } + + foreach ($params as $param => $value) + { + $ret .= '&'.$param.'='.$value; + } + + if ($encode) $ret = str_replace('\\', '%5C', $ret); + return $ret; + } + function BuildEnv($t, $params, $pass='all', $pass_events=false, $env_var=true) { $session =& $this->recallObject('Session');