Index: trunk/kernel/units/general/cat_event_handler.php =================================================================== diff -u -N -r3133 -r3154 --- trunk/kernel/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 3133) +++ trunk/kernel/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 3154) @@ -946,55 +946,6 @@ $res = $this->Conn->Query($sql); } - - /** - * Enter description here... - * - * @param kEvent $event - */ - function BuildEnv(&$event) - { - $prefix_special = $event->getPrefixSpecial(); - $url_params = $event->getEventParam('url_params'); - - $query_vars = $this->Application->getUnitOption($event->Prefix, 'QueryString'); - - //if pass events is off and event is not implicity passed - if ( !$event->getEventParam('pass_events') && !isset($url_params[$prefix_special.'_event']) ) - { - $url_params[$prefix_special.'_event'] = ''; // remove event from url if requested - //otherwise it will use value from get_var - } - - if(!$query_vars) - { - $event->setEventParam('env_string', ''); - return true; - - } - - - - - /*$tmp_string = Array(0 => $prefix_special); - foreach($query_vars as $index => $var_name) - { - //if value passed in params use it, otherwise use current from application - $var_name = $prefix_special.'_'.$var_name; - $tmp_string[$index] = isset( $url_params[$var_name] ) ? $url_params[$var_name] : $this->Application->GetVar($var_name); - if ( isset($url_params[$var_name]) ) unset( $url_params[$var_name] ); - } - - $escaped = Array(); - foreach ($tmp_string as $tmp_val) - { - $escaped[] = str_replace( Array('-',':'), Array('\-','\:'), $tmp_val); - } - - $portal_env = $this->Application->getUnitOption($event->Prefix, 'PortalStyleEnv'); - $ret .= $portal_env ? array_shift($escaped).array_shift($escaped).'-'.implode('-',$escaped) : implode('-', $escaped);*/ - - } } ?> \ No newline at end of file Index: trunk/core/kernel/application.php =================================================================== diff -u -N -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'); Index: trunk/core/units/general/cat_event_handler.php =================================================================== diff -u -N -r3133 -r3154 --- trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 3133) +++ trunk/core/units/general/cat_event_handler.php (.../cat_event_handler.php) (revision 3154) @@ -946,55 +946,6 @@ $res = $this->Conn->Query($sql); } - - /** - * Enter description here... - * - * @param kEvent $event - */ - function BuildEnv(&$event) - { - $prefix_special = $event->getPrefixSpecial(); - $url_params = $event->getEventParam('url_params'); - - $query_vars = $this->Application->getUnitOption($event->Prefix, 'QueryString'); - - //if pass events is off and event is not implicity passed - if ( !$event->getEventParam('pass_events') && !isset($url_params[$prefix_special.'_event']) ) - { - $url_params[$prefix_special.'_event'] = ''; // remove event from url if requested - //otherwise it will use value from get_var - } - - if(!$query_vars) - { - $event->setEventParam('env_string', ''); - return true; - - } - - - - - /*$tmp_string = Array(0 => $prefix_special); - foreach($query_vars as $index => $var_name) - { - //if value passed in params use it, otherwise use current from application - $var_name = $prefix_special.'_'.$var_name; - $tmp_string[$index] = isset( $url_params[$var_name] ) ? $url_params[$var_name] : $this->Application->GetVar($var_name); - if ( isset($url_params[$var_name]) ) unset( $url_params[$var_name] ); - } - - $escaped = Array(); - foreach ($tmp_string as $tmp_val) - { - $escaped[] = str_replace( Array('-',':'), Array('\-','\:'), $tmp_val); - } - - $portal_env = $this->Application->getUnitOption($event->Prefix, 'PortalStyleEnv'); - $ret .= $portal_env ? array_shift($escaped).array_shift($escaped).'-'.implode('-',$escaped) : implode('-', $escaped);*/ - - } } ?> \ No newline at end of file Index: trunk/core/units/general/general_config.php =================================================================== diff -u -N -r1566 -r3154 --- trunk/core/units/general/general_config.php (.../general_config.php) (revision 1566) +++ trunk/core/units/general/general_config.php (.../general_config.php) (revision 3154) @@ -2,7 +2,9 @@ $config = Array( 'Prefix' => 'm', - 'hooks' => Array(), + 'EventHandlerClass' => Array('class' => 'MainEventHandler', 'file' => 'main_event_handler.php', 'build_event' => 'OnBuild'), + /*'TagProcessorClass' => Array('class'=>'MainProcessor','file'=>'','build_event'=>'OnBuild'),*/ + 'QueryString' => Array( 1 => 'cat_id', 2 => 'cat_page', Index: trunk/kernel/units/general/general_config.php =================================================================== diff -u -N -r1566 -r3154 --- trunk/kernel/units/general/general_config.php (.../general_config.php) (revision 1566) +++ trunk/kernel/units/general/general_config.php (.../general_config.php) (revision 3154) @@ -2,7 +2,9 @@ $config = Array( 'Prefix' => 'm', - 'hooks' => Array(), + 'EventHandlerClass' => Array('class' => 'MainEventHandler', 'file' => 'main_event_handler.php', 'build_event' => 'OnBuild'), + /*'TagProcessorClass' => Array('class'=>'MainProcessor','file'=>'','build_event'=>'OnBuild'),*/ + 'QueryString' => Array( 1 => 'cat_id', 2 => 'cat_page', Index: trunk/core/kernel/event_handler.php =================================================================== diff -u -N -r2406 -r3154 --- trunk/core/kernel/event_handler.php (.../event_handler.php) (revision 2406) +++ trunk/core/kernel/event_handler.php (.../event_handler.php) (revision 3154) @@ -140,6 +140,55 @@ $child_event->Name = $name; return $child_event; } + + /** + * Created url part for this module + * + * @param kEvent $event + */ + function BuildEnv(&$event) + { + $prefix_special = $event->getPrefixSpecial(); + $url_params = $event->getEventParam('url_params'); + + $query_vars = $this->Application->getUnitOption($event->Prefix, 'QueryString'); + + //if pass events is off and event is not implicity passed + if ( !$event->getEventParam('pass_events') && !isset($url_params[$prefix_special.'_event']) ) + { + $url_params[$prefix_special.'_event'] = ''; // remove event from url if requested + //otherwise it will use value from get_var + } + + if(!$query_vars) + { + $event->setEventParam('env_string', ''); + return true; + + } + + + + + /*$tmp_string = Array(0 => $prefix_special); + foreach($query_vars as $index => $var_name) + { + //if value passed in params use it, otherwise use current from application + $var_name = $prefix_special.'_'.$var_name; + $tmp_string[$index] = isset( $url_params[$var_name] ) ? $url_params[$var_name] : $this->Application->GetVar($var_name); + if ( isset($url_params[$var_name]) ) unset( $url_params[$var_name] ); + } + + $escaped = Array(); + foreach ($tmp_string as $tmp_val) + { + $escaped[] = str_replace( Array('-',':'), Array('\-','\:'), $tmp_val); + } + + $portal_env = $this->Application->getUnitOption($event->Prefix, 'PortalStyleEnv'); + $ret .= $portal_env ? array_shift($escaped).array_shift($escaped).'-'.implode('-',$escaped) : implode('-', $escaped);*/ + + } } Index: trunk/core/units/general/main_event_handler.php =================================================================== diff -u -N --- trunk/core/units/general/main_event_handler.php (revision 0) +++ trunk/core/units/general/main_event_handler.php (revision 3154) @@ -0,0 +1,93 @@ +Conn =& $this->Application->GetADODBConnection(); + } + + /** + * Created url part for this module + * + * @param kEvent $event + */ + function BuildEnv(&$event) + { + $prefix_special = $event->getPrefixSpecial(); + $url_params = $event->getEventParam('url_params'); + + $query_vars = $this->Application->getUnitOption($event->Prefix, 'QueryString'); + + //if pass events is off and event is not implicity passed + if ( !$event->getEventParam('pass_events') && !isset($url_params[$prefix_special.'_event']) ) + { + $url_params[$prefix_special.'_event'] = ''; // remove event from url if requested + //otherwise it will use value from get_var + } + + if(!$query_vars) + { + $event->setEventParam('env_string', ''); + return true; + + } + + $processed_params = Array(); + foreach($query_vars as $index => $var_name) + { + //if value passed in params use it, otherwise use current from application + $var_name = $prefix_special.'_'.$var_name; + $processed_params[$var_name] = isset( $url_params[$var_name] ) ? $url_params[$var_name] : $this->Application->GetVar($var_name); + if ( isset($url_params[$var_name]) ) unset( $url_params[$var_name] ); + } + + $default_language_id = $this->Application->GetDefaultLanguageId(); + if( $processed_params['m_lang'] != $default_language_id ) + { + $ret = $this->Conn->GetOne('SELECT PackName + FROM '.TABLE_PREFIX.'Language + WHERE LanguageId = '.$processed_params['m_lang']).'/'; + } + + $default_theme_id = $this->Application->GetDefaultThemeId(); + if( $processed_params['m_theme'] != $default_theme_id ) + { + $ret .= $this->Conn->GetOne('SELECT Name + FROM '.TABLE_PREFIX.'Theme + WHERE ThemeId = '.$processed_params['m_theme']).'/'; + } + + if( $processed_params['m_cat_id'] > 0 ) + { + $ret .= $this->Conn->GetOne('SELECT NamedParentPath + FROM '.TABLE_PREFIX.'Category + WHERE CategoryId = '.$processed_params['m_cat_id']).'/'; + } + + if( $processed_params['m_cat_page'] > 1 ) $ret .= '_'.$processed_params['m_cat_page'].'/'; + + $ret .= $event->getEventParam('t').'/'; + + $event->setEventParam('url_params', $url_params); + $event->setEventParam('env_string', strtolower($ret) ); + } + } + +?> \ No newline at end of file Index: trunk/kernel/include/category.php =================================================================== diff -u -N -r3145 -r3154 --- trunk/kernel/include/category.php (.../category.php) (revision 3145) +++ trunk/kernel/include/category.php (.../category.php) (revision 3154) @@ -273,7 +273,7 @@ $parent_path = '|'.implode('|', array_reverse($path_parts) ).'|'; $nav_bar = implode('>', array_reverse($nav_parts) ); - $named_path = implode('/', $named_parts); + $named_path = implode('/', array_reverse($named_parts) ); if($this->Get('ParentPath') != $parent_path || $this->Get('CachedNavbar') != $nav_bar || $this->Get('NamedParentPath') != $named_path ) { Index: trunk/admin/category/addcategory.php =================================================================== diff -u -N -r3145 -r3154 --- trunk/admin/category/addcategory.php (.../addcategory.php) (revision 3145) +++ trunk/admin/category/addcategory.php (.../addcategory.php) (revision 3154) @@ -37,6 +37,7 @@ $c->Set("ParentId",$objCatList->CurrentCategoryID()); $c->Set("NewItem",2); //auto $c->Set("Status",2); //pending + $c->Set('AutomaticFilename', 1); $en = 0; $action = "m_add_category"; $objCatList->CreateEmptyEditTable("CategoryId"); Index: trunk/kernel/units/general/main_event_handler.php =================================================================== diff -u -N --- trunk/kernel/units/general/main_event_handler.php (revision 0) +++ trunk/kernel/units/general/main_event_handler.php (revision 3154) @@ -0,0 +1,93 @@ +Conn =& $this->Application->GetADODBConnection(); + } + + /** + * Created url part for this module + * + * @param kEvent $event + */ + function BuildEnv(&$event) + { + $prefix_special = $event->getPrefixSpecial(); + $url_params = $event->getEventParam('url_params'); + + $query_vars = $this->Application->getUnitOption($event->Prefix, 'QueryString'); + + //if pass events is off and event is not implicity passed + if ( !$event->getEventParam('pass_events') && !isset($url_params[$prefix_special.'_event']) ) + { + $url_params[$prefix_special.'_event'] = ''; // remove event from url if requested + //otherwise it will use value from get_var + } + + if(!$query_vars) + { + $event->setEventParam('env_string', ''); + return true; + + } + + $processed_params = Array(); + foreach($query_vars as $index => $var_name) + { + //if value passed in params use it, otherwise use current from application + $var_name = $prefix_special.'_'.$var_name; + $processed_params[$var_name] = isset( $url_params[$var_name] ) ? $url_params[$var_name] : $this->Application->GetVar($var_name); + if ( isset($url_params[$var_name]) ) unset( $url_params[$var_name] ); + } + + $default_language_id = $this->Application->GetDefaultLanguageId(); + if( $processed_params['m_lang'] != $default_language_id ) + { + $ret = $this->Conn->GetOne('SELECT PackName + FROM '.TABLE_PREFIX.'Language + WHERE LanguageId = '.$processed_params['m_lang']).'/'; + } + + $default_theme_id = $this->Application->GetDefaultThemeId(); + if( $processed_params['m_theme'] != $default_theme_id ) + { + $ret .= $this->Conn->GetOne('SELECT Name + FROM '.TABLE_PREFIX.'Theme + WHERE ThemeId = '.$processed_params['m_theme']).'/'; + } + + if( $processed_params['m_cat_id'] > 0 ) + { + $ret .= $this->Conn->GetOne('SELECT NamedParentPath + FROM '.TABLE_PREFIX.'Category + WHERE CategoryId = '.$processed_params['m_cat_id']).'/'; + } + + if( $processed_params['m_cat_page'] > 1 ) $ret .= '_'.$processed_params['m_cat_page'].'/'; + + $ret .= $event->getEventParam('t').'/'; + + $event->setEventParam('url_params', $url_params); + $event->setEventParam('env_string', strtolower($ret) ); + } + } + +?> \ No newline at end of file