Index: trunk/core/kernel/utility/http_query.php =================================================================== diff -u -N --- trunk/core/kernel/utility/http_query.php (revision 8901) +++ trunk/core/kernel/utility/http_query.php (revision 0) @@ -1,558 +0,0 @@ -Conn =& $this->Application->GetADODBConnection(); - - $this->Order = $order; - $this->Admin = $this->Application->IsAdmin(); // better cache this value, not to calculate it each time in foreach - } - - function Init($prefix, $special) - { - $this->AddAllVars(); - - $this->specialsToRemove = $this->Get('remove_specials'); - if($this->specialsToRemove) - { - $this->_Params = $this->removeSpecials($this->_Params); - } - ini_set('magic_quotes_gpc', 0); - } - - function removeSpecials($array) - { - $ret = Array(); - $removed = false; - foreach($this->specialsToRemove as $prefix_special => $flag) - { - if($flag) - { - $removed = true; - list($prefix,$special) = explode('.',$prefix_special, 2); - foreach ($array as $key => $val) { - $new_key = preg_match("/^".$prefix."[._]{1}".$special."(.*)/", $key, $regs) ? $prefix.$regs[1] : $key; - $ret[$new_key] = is_array($val) ? $this->removeSpecials($val) : $val; - } - } - } - return $removed ? $ret : $array; - } - - /** - * All all requested vars to - * common storage place - * - * @access private - */ - function AddAllVars() - { - for ($i=0; $i < strlen($this->Order); $i++) - { - $current = $this->Order[$i]; - switch ($current) { - case 'G': - $this->Get = $this->AddVars($_GET); - $vars = $this->processQueryString( $this->Get(ENV_VAR_NAME) ); - $this->AddParams($vars); - break; - - case 'P': - $this->Post = $this->AddVars($_POST); - $this->convertPostEvents(); - break; - - case 'C': - $this->Cookie = $this->AddVars($_COOKIE); - break; - - case 'E'; - $this->Env = $this->AddVars($_ENV); - break; - - case 'S'; - $this->Server = $this->AddVars($_SERVER); - break; - - case 'F'; - $this->convertFiles(); - $this->Files = $this->MergeVars($_FILES, false); //do not strip slashes! - break; - } - } - -// $this->AfterInit(); - } - function AfterInit() - { -// $vars = $this->processQueryString($this->Get(ENV_VAR_NAME)); -// $this->AddParams($vars); -// $this->convertPostEvents(); - // if ($this->Application->RewriteURLs()) { - if ($this->Application->RewriteURLs() || $this->Get('_mod_rw_url_')) { - if( $this->Application->isDebugMode() ) - { - $this->Application->Debugger->profileStart('url_parsing'); - $this->processRewriteURL(); - $description = 'Parsing MOD_REWRITE url (template: '.$this->Get('t').')'; - $this->Application->Debugger->profileFinish('url_parsing', $description); - } - else - { - $this->processRewriteURL(); - } - } - else { - $this->Application->VerifyLanguageId(); - $this->Application->VerifyThemeId(); - } - } - - function convertFiles() - { - if (!$_FILES) - { - return false; - } - - $file_keys = Array('error','name','size','tmp_name','type'); - - $tmp = Array(); - foreach($_FILES as $file_name => $file_info) - { - if( is_array($file_info['error']) ) - { - $tmp[$file_name] = $this->getArrayLevel( $file_info['error'], $file_name ); - } - else - { - $normal_files[$file_name] = $file_info; - } - } - - if(!$tmp) return false; - - $files = $_FILES; - $_FILES = Array(); - - foreach($tmp as $prefix => $prefix_files) - { - $anchor =& $_FILES; - foreach($prefix_files['keys'] as $key) - { - $anchor =& $anchor[$key]; - } - foreach($prefix_files['value'] as $field_name) - { - unset($inner_anchor); - unset($copy); - $work_copy = $prefix_files['keys']; - foreach($file_keys as $file_key) - { - $inner_anchor =& $files[$prefix][$file_key]; - if (isset($copy)) - { - $work_copy = $copy; - } - else - { - $copy = $work_copy; - } - array_shift($work_copy); - foreach($work_copy as $prefix_file_key) - { - $inner_anchor =& $inner_anchor[$prefix_file_key]; - } - $anchor[$field_name][$file_key] = $inner_anchor[$field_name]; - } - } - } - - // keys: img_temp, 0, values: LocalPath, ThumbPath - } - - function getArrayLevel(&$level, $prefix='') - { - $ret['keys'] = $prefix ? Array($prefix) : Array(); - $ret['value'] = Array(); - - foreach($level as $level_key => $level_value) - { - if( is_array($level_value) ) - { - $ret['keys'][] = $level_key; - $tmp = $this->getArrayLevel($level_value); - - $ret['keys'] = array_merge($ret['keys'], $tmp['keys']); - $ret['value'] = array_merge($ret['value'], $tmp['value']); - } - else - { - $ret['value'][] = $level_key; - } - } - - return $ret; - } - - /** - * Owerwrites GET events with POST events in case if they are set and not empty - * - */ - function convertPostEvents() - { - $events = $this->Get('events'); - if (is_array($events)) { - foreach ($events as $prefix_special => $event_name) { - if ($event_name) { - $this->Set($prefix_special.'_event', $event_name); - } - } - } - } - - function finalizeParsing($passed = Array(), $module_params = Array() ) - { - if ($passed) { - $event_manger =& $this->Application->recallObject('EventManager'); - 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 ); - $this->Set(ENV_VAR_NAME, $env); - $_REQUEST['env'] = $_GET['env'] = $env; // for capability with old in-portal code - } - - function processRewriteURL() - { - $mod_rw_helper = $this->Application->recallObject('ModRewriteHelper'); - $mod_rw_helper->processRewriteURL(); - } - - function getDefaultTemplate($t) - { - $t = $this->getTemplateName( trim($t, '/') ); - if (!$t) $t = 'index'; - return trim($t, '/'); - } - - function extractSIDAndTemplate(&$parts) - { - $vars = Array (); - if (defined('INPORTAL_ENV') && INPORTAL_ENV) { // SID-TEMPLATE - $sub_parts = array_shift($parts); - list($sid, $t) = explode('-', $sub_parts, 2); - - // Save Session ID - if ($sid) { - $this->Set('sid', $sid); - $vars['sid'] = $sid; - } - } - else { // SID:TEMPLATE - // Save Session ID - $sid = array_shift($parts); - if ($sid) $vars['sid'] = $sid; - - $t = array_shift($parts); - } - - // Save Template Name - $vars['t'] = $this->getDefaultTemplate($t); - return $vars; - } - - /** - * Process QueryString only, create - * events, ids, based on config - * set template name and sid in - * desired application variables. - * - * @param string $env_var enviroment string value - * - * @access public - */ - function processQueryString($env_var, $pass_name = 'passed') - { - // env=SID:TEMPLATE:m-1-1-1-1:l0-0-0:n-0-0-0:bb-0-0-1-1-1-0 - $vars = Array (); - if ($env_var) { - $more_vars = strpos($env_var, '&'); - if ($more_vars !== false) { - parse_str(substr($env_var, $more_vars + 1), $vars); - $env_var = substr($env_var, 0, $more_vars); - } - - // replace escaped ":" symbol not to explode by it - $env_var = str_replace('\:','_&+$$+&_', $env_var); // replace escaped "=" with spec-chars :) - $parts = explode(':', $env_var); - - if (!$this->Application->RewriteURLs() || ($this->Application->RewriteURLs() && $this->Get('rewrite') != 'on')) { - $vars = array_merge_recursive2($vars, $this->extractSIDAndTemplate($parts)); - } - - if ($parts) { - foreach ($parts as $mixed_part) { - $vars = array_merge_recursive2($vars, $this->parseEnvPart($mixed_part, $pass_name)); - } - } - } - else { - $t = $this->getTemplateName('index'); - $vars['t'] = $t; - } - - return $vars; - } - - function parseEnvPart($mixed_part, $pass_name = 'passed') - { - // In-portal old style env conversion - adds '-' between prefix and first var - $mixed_part = str_replace('_&+$$+&_', ':', $mixed_part); - $mixed_part = preg_replace("/^([a-zA-Z]+)([0-9]+)-(.*)/", "$1-$2-$3", $mixed_part); - - // replace escaped "-" symbol not to explode by it - $escaped_part = str_replace('\-', '_&+$$+&_', $mixed_part); - $escaped_part = explode('-', $escaped_part); - - $mixed_part = Array(); - foreach ($escaped_part as $escaped_val) { - $mixed_part[] = str_replace('_&+$$+&_', '-', $escaped_val); - } - - $prefix_special = array_shift($mixed_part); // l.pick, l - $query_map = $this->Application->EventManager->setQueryMap($prefix_special); - - $vars = Array (); - $vars[$pass_name] = implode(',', array_keys($this->Application->EventManager->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) { - // l_id, l_page, l_bla-bla-bla - $val = $mixed_part[$index - 1]; - if ($val == '') $val = false; - $vars[$prefix_special.'_'.$var_name] = $val; - } - } - - return $vars; - } - - /** - * Removes tpl part from template name + resolved template ID to name - * - * @param string $t - * @return string - * @access private - */ - function getTemplateName($t) - { - if (isset($this->Get['t']) && $this->Get['t']) { - // template name is passed directly in url (GET method) - $t = $this->Get['t']; - } - - // if t was set through env, even in mod_rewrite mode! - if ($this->Get('env') && $this->Application->RewriteURLs() && $this->Get('t')) { - $t = $this->Get('t'); - } - - if (is_numeric($t)) { - $sql = 'SELECT CONCAT(FilePath, \'/\', FileName) - FROM '.TABLE_PREFIX.'ThemeFiles - WHERE FileId = '.$t; - $t = $this->Conn->GetOne($sql); - } - - return preg_replace('/\.tpl$/', '', $t); - } - - /** - * Saves variables from array specified - * into common variable storage place - * - * @param Array $array - * @return Array - * @access private - */ - function AddVars($array) - { - $array = $this->StripSlashes($array); - foreach($array as $key => $value) - { - $this->Set($key,$value); - } - return $array; - } - - function MergeVars($array, $strip_slashes=true) - { - if ($strip_slashes) $array = $this->StripSlashes($array); - foreach($array as $key => $value) - { - $this->_Params = array_merge_recursive2($this->_Params, Array($key=>$value)); - } - return $array; - } - - function StripSlashes($array) - { - //if( !get_magic_quotes_gpc() ) return $array; - foreach($array as $key=>$value) - { - if( is_array($value) ) - { - $array[$key] = $this->StripSlashes($value); - } - 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; - } - //$array[$key]=is_array($value)?$this->StripSlashes($value):stripslashes($value); - } - return $array; - } - - /** - * Returns all $_GET array excluding system parameters, that are not allowed to be passed through generated urls - * - * @return Array - */ - function getRedirectParams() - { - $unset_vars = Array(ENV_VAR_NAME, 'rewrite', '_mod_rw_url_', 'Action'); - $ret = $this->Get; - foreach ($unset_vars as $var_name) - { - if( isset($ret[$var_name]) ) unset( $ret[$var_name] ); - } - return $ret; - } - - function writeRequestLog($filename) - { - $folder_path = dirname(FULL_PATH.'/'.$filename); - if (is_writable($folder_path)) { - $fp = fopen(FULL_PATH.'/'.$filename, 'a'); - if ($fp) { - $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); - } - - if ($this->Cookie) { - $data .= "_COOKIE:\n".print_r($this->Cookie, true); - } - $data .= str_repeat('=', 100)."\n"; - - fwrite($fp, $data); - fclose($fp); - } - else { - trigger_error('Requrest Log directory not writable', E_USER_WARNING); - } - } - else { - trigger_error('Requrest Log directory not writable', E_USER_WARNING); - } - } - -} - -?> \ No newline at end of file