Index: trunk/core/kernel/utility/http_query.php =================================================================== diff -u -N -r4645 -r4758 --- trunk/core/kernel/utility/http_query.php (.../http_query.php) (revision 4645) +++ trunk/core/kernel/utility/http_query.php (.../http_query.php) (revision 4758) @@ -89,7 +89,7 @@ function Init($prefix, $special) { $this->AddAllVars(); - + $this->specialsToRemove = $this->Get('remove_specials'); if($this->specialsToRemove) { @@ -158,6 +158,13 @@ } } +// $this->AfterInit(); + } + function AfterInit() + { +// $this->processQueryString(); +// $this->convertPostEvents(); + // if ($this->Application->RewriteURLs()) { if ($this->Application->RewriteURLs() || $this->Get('_mod_rw_url_')) { if( $this->Application->isDebugMode() ) { @@ -288,8 +295,9 @@ foreach ($passed as $passed_prefix) { $event_manger->setQueryMap($passed_prefix); } + $this->Set('passed', implode(',', array_keys($event_manger->queryMaps))); } - + // get joined version (env var + mod rewrite parsed) $passed = $this->Application->GetVar('passed'); $env = $this->Application->BuildEnv( $this->Get('t'), $module_params, $passed, false, false ); @@ -299,297 +307,8 @@ function processRewriteURL() { - // directory_1_2_3/sc1/inlink/detail/3/l1_ka_asd.html - - $url = $this->Get('_mod_rw_url_'); - if( substr($url, -5) == '.html' ) $url = substr($url, 0, strlen($url) - 5 ); - - $url_parts = $url ? explode('/', $url) : Array(); - - $process_module = true; - if($this->Get('rewrite') == 'on' || !$url_parts) - { - // set default values - $defaults = Array('m_cat_id' => 0, 'm_cat_page' => 1, 'm_opener' => 's'); - foreach ($defaults as $default_key => $default_value) - { - if ($this->Get($default_key) == null) { - $this->Set($default_key, $default_value); - } - } - } - - if(!$url_parts) - { - $this->Application->Phrases = new PhrasesCache(); - $this->Application->VerifyLanguageId(); - $this->Application->Phrases->Init('phrases'); - $this->Application->VerifyThemeId(); - - $this->Set('t', $this->getDefaultTemplate('') ); - $this->finalizeParsing(Array('m')); - return false; - } - else - { - $this->Set('t', ''); - } - - $url_part = array_shift($url_parts); - - // match language - $sql = 'SELECT LanguageId FROM '.TABLE_PREFIX.'Language WHERE LOWER(PackName) = '.$this->Conn->qstr($url_part).' AND Enabled = 1'; - $language_id = $this->Conn->GetOne($sql); - $this->Application->Phrases = new PhrasesCache(); - if($language_id) - { - $this->Set('m_lang', $language_id); - $url_part = $url_parts ? array_shift($url_parts) : ''; // prepare next url part for parsing - } - - $this->Application->VerifyLanguageId(); - - // $this->Get('m_lang') ); - - // match theme - if($url_part) - { - $sql = 'SELECT ThemeId FROM '.TABLE_PREFIX.'Theme WHERE LOWER(Name) = '.$this->Conn->qstr($url_part).' AND Enabled = 1'; - $theme_id = $this->Conn->GetOne($sql); - if($theme_id) - { - $this->Set('m_theme', $theme_id); - $url_part = $url_parts ? array_shift($url_parts) : ''; // prepare next url part for parsing - } - } - $this->Application->VerifyThemeId(); // verify anyway - will set default if not found!!! - - // match category - $category_id = 0; - if($url_part) - { - $category_stack = Array(); - $category_found = false; - $category_path = ''; - $rets = Array(); // just in case someone has used this variable before - do - { - $category_path = trim($category_path.'/'.$url_part, '/'); - - if( preg_match('/(.*)_([\d]+)$/', $category_path, $rets) ) - { - $category_path = $rets[1]; - $this->Set('m_cat_page', $rets[2]); - } - - $sql = 'SELECT CategoryId - FROM '.TABLE_PREFIX.'Category - WHERE NamedParentPath = '.$this->Conn->qstr($category_path); - array_push($category_stack, $this->Conn->GetOne($sql) ); - $category_found = end($category_stack); - if($category_found) $url_part = array_shift($url_parts); - - }while ($category_found && $url_part); - - if (count($category_stack)) { - $category_id = array_pop($category_stack); // remove last not found category - if($category_id === false) - { - $category_id = array_pop($category_stack); - } - if($category_id) - { - $this->Set('m_cat_id', $category_id); - } - } - elseif (!$category_found && getArrayValue($rets, 2)) { - $url_part = array_shift($url_parts); - } - } - - - if (!$url_part) { - // no more parts left in url - $process_module = false; - $sql = 'SELECT CachedCategoryTemplate - FROM '.TABLE_PREFIX.'Category - WHERE CategoryId = '.$category_id; - $category_template = $this->Conn->GetOne($sql); - if ($category_template) { - $category_template = explode('/', $category_template); - $url_part = array_shift($category_template); - $url_parts = $category_template; - } - else { - $url_part = 'index'; - } - } - elseif ($url_part && count($url_parts) <= 1 && $category_id) { - // only filename left, no other parts - $process_module = false; - $sql = 'SELECT ParentPath, CachedItemTemplate, CachedCategoryTemplate - FROM '.TABLE_PREFIX.'Category - WHERE CategoryId = '.$category_id; - $category_data = $this->Conn->GetRow($sql); - - $root_category_id = array_shift( explode('|', substr($category_data['ParentPath'], 1, -1)) ); - $module_info = $this->Application->findModule('RootCat', $root_category_id); - if ($module_info) { - $module_prefix = $module_info['Var']; - $module_event = new kEvent($module_prefix.':ParseEnv', Array('url_parts' => array_merge(Array($url_part), $url_parts)) ); - $this->Application->HandleEvent($module_event); - - if ($module_event->status == erSUCCESS && $this->Get($module_prefix.'_id')) { - $item_template = $category_data['CachedItemTemplate']; - if ($item_template) { - $url_parts = explode('/', $item_template); - array_push($url_parts, $url_part); // save item's filename as not processed - $url_part = array_shift($url_parts); - } - } - elseif (!$module_event->getEventParam('url_parts')) { - // parseEnv has processed that param - $url_part = ''; - $category_template = $category_data['CachedCategoryTemplate']; - if ($category_template) { - $category_template = explode('/', $category_template); - $url_part = array_shift($category_template); - $url_parts = $category_template; - } - else { - $url_part = 'index'; - } - } - } - } - - // match module - $next_template = $this->Get('next_template'); - if($url_part || $next_template) - { - if($next_template) - { - $next_template_parts = explode('/', $next_template); - $module_folder = array_shift($next_template_parts); - } - else - { - $module_folder = $url_part; - } - - foreach ($this->Application->ModuleInfo as $module_name => $module_data) - { - if( trim($module_data['TemplatePath'], '/') == $module_folder ) - { - $module_prefix = $module_data['Var']; - break; - } - } - } - - // match template - $template_path = ''; - $template_found = false; - if($url_part) - { - // search for template in real template records - array_unshift($url_parts, $url_part); - $template_parts = $url_parts; - $url_parts = Array(); - do - { - $template_path = implode('/', $template_parts); - - $t_parts['path'] = dirname($template_path) == '.' ? '' : '/'.dirname($template_path); - $t_parts['file'] = basename($template_path); - - $sql = 'SELECT FileId - FROM '.TABLE_PREFIX.'ThemeFiles - WHERE (FilePath = '.$this->Conn->qstr($t_parts['path']).') AND - (FileName = '.$this->Conn->qstr($t_parts['file'].'.tpl').') AND - (ThemeId = '.$this->Get('m_theme').')'; - -// $sql = 'SELECT FileId FROM '.TABLE_PREFIX.'ThemeFiles WHERE CONCAT(FilePath, "/", FileName) = '.$this->Conn->qstr('/'.$template_path.'.tpl'); - $template_found = $this->Conn->GetOne($sql); - if(!$template_found) - { - array_unshift( $url_parts, array_pop($template_parts) ); - } - - }while (!$template_found && $template_parts); - - // try to find template in virtual templates in case if such ability exists - if ($this->Application->isModuleEnabled('In-CMS') && !$template_found) { - - $template_parts = $url_parts; - $url_parts = Array(); - do - { - $template_path = implode('/', $template_parts); - - $sql = 'SELECT PageId FROM '.TABLE_PREFIX.'Pages WHERE Path = '.$this->Conn->qstr($template_path); - $template_found = $this->Conn->GetOne($sql); - if(!$template_found) - { - array_unshift( $url_parts, array_pop($template_parts) ); - } - - }while (!$template_found && $template_parts); - - if (!$template_found && $this->Application->GetVar('admin')) { - // used when admin is clicking on non-existing in-cms page - $template_found = true; - $template_path = implode('/', $url_parts); - } - - } - } - - // guess template if no existing template found - if(!$template_found && isset($module_folder) && $module_folder) - { - // 1. try index template of module - $sql = 'SELECT FileId FROM '.TABLE_PREFIX.'ThemeFiles WHERE CONCAT(FilePath, "/", FileName) = '.$this->Conn->qstr('/'.$module_folder.'/index.tpl'); - $template_found = $this->Conn->GetOne($sql); - if($template_found) - { - $template_path = $module_folder.'/index'; - array_shift($url_parts); - } - else - { - // 2. return error template then - $template_found = true; - $template_path = $this->Application->ConfigValue('ErrorTemplate'); - if(!$template_path) $template_path = 'error_notfound'; - - header('HTTP/1.0 404 Not Found'); - } - } - - $this->Set('t', $this->getDefaultTemplate($template_found ? $template_path : '') ); - - // pass params left to module - - $this->Application->Phrases->Init('phrases'); - $passed = Array('m'); - $module_params = Array(); - if ( isset($module_prefix) ) { - $passed[] = $module_prefix; - $module_event = new kEvent($module_prefix.':ParseEnv', Array('url_parts' => $url_parts) ); - if ($process_module) { - $this->Application->HandleEvent($module_event); - } - $item_id = $this->Get($module_prefix.'_id'); - $module_params = Array($module_prefix.'_id' => $item_id ? $item_id : '0' ); - - if ($module_event->status == erFAIL) { - $not_found = $this->Application->ConfigValue('ErrorTemplate'); - $this->Set('t', $not_found ? $not_found : 'error_notfound' ); - } - } - - $this->finalizeParsing($passed, $module_params); + $mod_rw_helper = $this->Application->recallObject('ModRewriteHelper'); + $mod_rw_helper->processRewriteURL(); } function getDefaultTemplate($t) @@ -674,7 +393,8 @@ $prefix_special = array_shift($mixed_part); // l.pick, l $query_map = $event_manger->setQueryMap($prefix_special); - + $this->Set('passed', implode(',', array_keys($event_manger->queryMaps))); + // if config is not defined for prefix in QueryString, then don't process it if ($query_map) { foreach($query_map as $index => $var_name) @@ -759,7 +479,7 @@ else { // $value = iconv('UTF-8', 'windows-1257', $value); - + if( get_magic_quotes_gpc() ) $value = stripslashes($value); if(!$this->Admin) $value = htmlspecialchars($value); $array[$key] = $value; @@ -768,7 +488,7 @@ } return $array; } - + /** * Returns all $_GET array excluding system parameters, that are not allowed to be passed through generated urls * @@ -784,7 +504,7 @@ } return $ret; } - + function writeRequestLog($filename) { $folder_path = dirname(FULL_PATH.'/'.$filename); @@ -794,17 +514,17 @@ $session =& $this->Application->recallObject('Session'); $user_id = $session->GetField('PortalUserId'); $admin_mark = $this->Application->IsAdmin() ? 'ADMIN' : 'FRONT'; - + $data = '['.date('D M d H:i:s Y').'] '.$admin_mark.'; ip: '.$_SERVER['REMOTE_ADDR'].'; user_id: '.$user_id.'; sid: '.$this->Application->GetSID().'; request: '."\n"; if ($this->Get) { $data .= "_GET:\n".print_r($this->Get, true); } - + if ($this->Post) { $data .= "_POST:\n".print_r($this->Post, true); } $data .= str_repeat('=', 100)."\n"; - + fwrite($fp, $data); fclose($fp); } @@ -816,7 +536,7 @@ trigger_error('Requrest Log directory not writable', E_USER_WARNING); } } - + } ?> \ No newline at end of file