Index: branches/unlabeled/unlabeled-1.79.4/core/kernel/db/db_event_handler.php =================================================================== diff -u -r6842 -r6849 --- branches/unlabeled/unlabeled-1.79.4/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 6842) +++ branches/unlabeled/unlabeled-1.79.4/core/kernel/db/db_event_handler.php (.../db_event_handler.php) (revision 6849) @@ -698,7 +698,8 @@ } // add custom filter - $custom_filters = $this->Application->RecallVar($event->getPrefixSpecial().'_custom_filter'); + $view_name = $this->Application->RecallVar($event->getPrefixSpecial().'_current_view'); + $custom_filters = $this->Application->RecallPersistentVar($event->getPrefixSpecial().'_custom_filter.'.$view_name); if ($custom_filters) { $grid_name = $event->getEventParam('grid'); $custom_filters = unserialize($custom_filters); Index: branches/unlabeled/unlabeled-1.68.2/core/units/users/users_event_handler.php =================================================================== diff -u -r6842 -r6849 --- branches/unlabeled/unlabeled-1.68.2/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 6842) +++ branches/unlabeled/unlabeled-1.68.2/core/units/users/users_event_handler.php (.../users_event_handler.php) (revision 6849) @@ -104,9 +104,9 @@ */ function OnLogin(&$event) { + // persistent session data after login is not refreshed, because redirect will follow in any case $prefix_special = $this->Application->IsAdmin() ? 'u.current' : 'u'; // "u" used on front not to change theme $object =& $this->Application->recallObject($prefix_special, null, Array('skip_autoload' => true)); - $password = $this->Application->GetVar('password'); if(!$password) { Index: branches/unlabeled/unlabeled-1.52.4/core/kernel/session/session.php =================================================================== diff -u -r6690 -r6849 --- branches/unlabeled/unlabeled-1.52.4/core/kernel/session/session.php (.../session.php) (revision 6690) +++ branches/unlabeled/unlabeled-1.52.4/core/kernel/session/session.php (.../session.php) (revision 6849) @@ -66,6 +66,8 @@ var $DirectVars = Array(); var $ChangedDirectVars = Array(); + var $PersistentVars = Array (); + var $OriginalData=Array(); var $TimestampField; @@ -248,6 +250,52 @@ } return $expired_sids; } + + function LoadPersistentVars(&$session) + { + $user_id = $this->Application->GetVar('u_id'); + if ($user_id != -2) { + // root & normal users + $sql = 'SELECT VariableValue, VariableName + FROM '.TABLE_PREFIX.'PersistantSessionData + WHERE PortalUserId = '.$user_id; + $this->PersistentVars = $this->Conn->GetCol($sql, 'VariableName'); + } + else { + $this->PersistentVars = Array (); + } + } + + function StorePersistentVar(&$session, $var_name, $var_value) + { + $this->PersistentVars[$var_name] = $var_value; + + $replace_hash = Array ( + 'PortalUserId' => $this->Application->GetVar('u_id'), + 'VariableName' => $var_name, + 'VariableValue' => $var_value + ); + $this->Conn->doInsert($replace_hash, TABLE_PREFIX.'PersistantSessionData', 'REPLACE'); + + } + + function RecallPersistentVar(&$session, $var_name, $default = false) + { + return isset($this->PersistentVars[$var_name]) ? $this->PersistentVars[$var_name] : $default; + } + + function RemovePersistentVar(&$session, $var_name) + { + unset($this->PersistentVars[$var_name]); + + $user_id = $this->Application->GetVar('u_id'); + + if ($user_id != -2) { + $sql = 'DELETE FROM '.TABLE_PREFIX.'PersistantSessionData + WHERE PortalUserId = '.$user_id.' AND VariableName = '.$this->Conn->qstr($var_name); + $this->Conn->Query($sql); + } + } } define('smAUTO', 1); @@ -676,6 +724,7 @@ function PrintSession($comment='') { if($this->Application->isDebugMode() && constOn('DBG_SHOW_SESSIONDATA')) { + // dump session data $this->Application->Debugger->appendHTML('SessionStorage ('.$comment.'):'); $session_data = $this->Data->GetParams(); ksort($session_data); @@ -686,10 +735,22 @@ } $this->Application->Debugger->dumpVars($session_data); - // to insert after HTTPQuery if it's visible - $new_row = constOn('DBG_SHOW_HTTPQUERY') ? 4 : 2; - - //$debugger->moveAfterRow($new_row,2); + // dump persistent session data + if ($this->Storage->PersistentVars) { + $this->Application->Debugger->appendHTML('Persistant Session:'); + $session_data = $this->Storage->PersistentVars; + ksort($session_data); + foreach ($session_data as $session_key => $session_value) { + if (IsSerialized($session_value)) { + $session_data[$session_key] = unserialize($session_value); + } + } + $this->Application->Debugger->dumpVars($session_data); + } + +// to insert after HTTPQuery if it's visible +// $new_row = constOn('DBG_SHOW_HTTPQUERY') ? 4 : 2; +// $debugger->moveAfterRow($new_row,2); } } @@ -717,7 +778,17 @@ { $this->Data->Set($name, $value); } - + + function StorePersistentVar($name, $value) + { + $this->Storage->StorePersistentVar($this, $name, $value); + } + + function LoadPersistentVars() + { + $this->Storage->LoadPersistentVars($this); + } + function StoreVarDefault($name, $value) { $tmp = $this->RecallVar($name); @@ -727,18 +798,28 @@ } } - function RecallVar($name,$default=false) + function RecallVar($name, $default = false) { $ret = $this->Data->Get($name); - return ($ret===false) ? $default : $ret; + return ($ret === false) ? $default : $ret; } + function RecallPersistentVar($name, $default = false) + { + return $this->Storage->RecallPersistentVar($this, $name, $default); + } + function RemoveVar($name) { $this->Storage->RemoveFromData($this, $name); $this->Data->Remove($name); } + function RemovePersistentVar($name) + { + return $this->Storage->RemovePersistentVar($this, $name); + } + /** * Ignores session varible value set before * Index: branches/unlabeled/unlabeled-1.1.2/core/admin_templates/js/calendar.js =================================================================== diff -u -r6734 -r6849 --- branches/unlabeled/unlabeled-1.1.2/core/admin_templates/js/calendar.js (.../calendar.js) (revision 6734) +++ branches/unlabeled/unlabeled-1.1.2/core/admin_templates/js/calendar.js (.../calendar.js) (revision 6849) @@ -26,11 +26,11 @@ // inputContainer.appendChild(pNode.removeChild(input)); var calendarButton = document.createElement("IMG"); - calendarButton.setAttribute("width", "24"); - calendarButton.setAttribute("height", "24"); + calendarButton.setAttribute("width", "19"); //24 + calendarButton.setAttribute("height", "15"); //24 calendarButton.setAttribute("align", "absMiddle"); - calendarButton.style.width=24 - calendarButton.style.height=24 + calendarButton.style.width=19; //24 + calendarButton.style.height=15; //24 calendarButton.style.cursor = "hand"; calendarButton.setAttribute("hspace", 2); Index: branches/unlabeled/unlabeled-1.166.4/core/kernel/application.php =================================================================== diff -u -r6842 -r6849 --- branches/unlabeled/unlabeled-1.166.4/core/kernel/application.php (.../application.php) (revision 6842) +++ branches/unlabeled/unlabeled-1.166.4/core/kernel/application.php (.../application.php) (revision 6849) @@ -843,6 +843,11 @@ return $this->Session->RemoveVar($var); } + function RemovePersistentVar($var) + { + return $this->Session->RemovePersistentVar($var); + } + /** * Restores Session variable to it's db version * @@ -869,6 +874,11 @@ return $this->Session->RecallVar($var,$default); } + function RecallPersistentVar($var, $default = false) + { + return $this->Session->RecallPersistentVar($var, $default); + } + /** * Stores variable $val in session under name $var * @@ -884,6 +894,11 @@ $this->Session->StoreVar($var, $val); } + function StorePersistentVar($var, $val) + { + $this->Session->StorePersistentVar($var, $val); + } + function StoreVarDefault($var, $val) { $session =& $this->recallObject('Session'); @@ -1564,8 +1579,22 @@ $http_query =& $this->recallObject('HTTPQuery'); $http_query->writeRequestLog(DBG_REQUREST_LOG); } + + if ($user_id != -2) { + // normal users + root + $this->LoadPersistentVars(); + } } + /** + * Loads current user persistent session data + * + */ + function LoadPersistentVars() + { + $this->Session->LoadPersistentVars(); + } + function LoadCache() { $cache_key = $this->GetVar('t').$this->GetVar('m_theme').$this->GetVar('m_lang').$this->IsAdmin(); $query = sprintf("SELECT PhraseList, ConfigVariables FROM %s WHERE Template = %s", Index: branches/unlabeled/unlabeled-1.68.4/core/kernel/db/db_tag_processor.php =================================================================== diff -u -r6820 -r6849 --- branches/unlabeled/unlabeled-1.68.4/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 6820) +++ branches/unlabeled/unlabeled-1.68.4/core/kernel/db/db_tag_processor.php (.../db_tag_processor.php) (revision 6849) @@ -745,8 +745,9 @@ $saved_value = $object->GetDBField($field); $object->SetDBField($field, $this->SearchField($params)); - $custom_filter = $this->Application->RecallVar($this->getPrefixSpecial().'_custom_filter'); - + $view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view'); + $custom_filter = $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_custom_filter.'.$view_name); + $ret = $this->PredefinedOptions($params); $object->SetDBField($field, $saved_value); return $ret; @@ -1434,7 +1435,8 @@ { $field = $this->SelectParam($params, 'field,name'); - $custom_filter = $this->Application->RecallVar($this->getPrefixSpecial().'_custom_filter'); + $view_name = $this->Application->RecallVar($this->getPrefixSpecial().'_current_view'); + $custom_filter = $this->Application->RecallPersistentVar($this->getPrefixSpecial().'_custom_filter.'.$view_name); $custom_filter = $custom_filter ? unserialize($custom_filter) : Array(); if (isset($custom_filter[ $params['grid'] ][$field])) { Index: branches/unlabeled/unlabeled-1.4.2/core/admin_templates/incs/form_blocks.tpl =================================================================== diff -u -r6788 -r6849 --- branches/unlabeled/unlabeled-1.4.2/core/admin_templates/incs/form_blocks.tpl (.../form_blocks.tpl) (revision 6788) +++ branches/unlabeled/unlabeled-1.4.2/core/admin_templates/incs/form_blocks.tpl (.../form_blocks.tpl) (revision 6849) @@ -268,11 +268,11 @@ - + name="" id="_" value="" onclick="" onchange="">  - + name="" id="_" value="" onclick="" onchange="">  Index: branches/unlabeled/unlabeled-1.4.2/core/units/general/helpers/search_helper.php =================================================================== diff -u -r6788 -r6849 --- branches/unlabeled/unlabeled-1.4.2/core/units/general/helpers/search_helper.php (.../search_helper.php) (revision 6788) +++ branches/unlabeled/unlabeled-1.4.2/core/units/general/helpers/search_helper.php (.../search_helper.php) (revision 6849) @@ -150,6 +150,9 @@ if ($filter_data) { $search_filter[$search_field] = $filter_data; } + else { + unset($search_filter[$search_field]); + } } $this->Application->StoreVar($event->getPrefixSpecial().'_search_filter', serialize($search_filter) ); } @@ -213,29 +216,9 @@ break; case 'kDateFormatter': - $field_processed = true; + // if date is searched using direct filter, then do nothing here, otherwise search using LIKE clause + $field_processed = ($custom_search !== false) ? true : false; break; - - /*case 'kDateFormatter': // move to Custom Filters (by Alex) - $filter_value = Array(); - if ($field_name === false) { - $field_value = getArrayValue($custom_filter, $field_name.'_datefrom', 'submit_value'); - if ($field_value) { - $value = $this->processRangeField($event, $field_name, 'datefrom', $field_value, $formatter); - $filter_value[] = $table_name.'`'.$field_name.'` >= '.$value; - } - - $field_value = getArrayValue($custom_filter, $field_name.'_dateto', 'submit_value'); - if ($field_value) { - $value = $this->processRangeField($event, $field_name, 'dateto', $field_value, $formatter); - $filter_value[] = $table_name.'`'.$field_name.'` <= '.$value; - } - - $filter_value = $filter_value ? '('.implode(') AND (', $filter_value).')' : ''; - } - - $field_processed = true; - break;*/ default: $field_processed = false; @@ -299,7 +282,8 @@ $grid_name = $this->Application->GetVar('grid_name'); // update "custom filter" with values from submit: begin - $custom_filters = $this->Application->RecallVar($event->getPrefixSpecial().'_custom_filter'); + $view_name = $this->Application->RecallVar($event->getPrefixSpecial().'_current_view'); + $custom_filters = $this->Application->RecallPersistentVar($event->getPrefixSpecial().'_custom_filter.'.$view_name); if ($custom_filters) { $custom_filters = unserialize($custom_filters); $custom_filter = isset($custom_filters[$grid_name]) ? $custom_filters[$grid_name] : Array (); @@ -344,50 +328,102 @@ if (!$custom_filter) { // in case when no filters specified, there are nothing to process - $this->Application->StoreVar($event->getPrefixSpecial().'_custom_filter', serialize($custom_filters) ); + $this->Application->StorePersistentVar($event->getPrefixSpecial().'_custom_filter.'.$view_name, serialize($custom_filters) ); return false; } $object =& $event->getObject(); // don't recall it each time in getCustomFilterSearchClause + $grid_info = $this->Application->getUnitOption($event->Prefix.'.'.$grid_name, 'Grids'); foreach ($custom_filter as $field_name => $field_options) { list ($filter_type, $field_options) = each($field_options); + $field_options['grid_options'] = $grid_info['Fields'][$field_name]; $field_options = $this->getCustomFilterSearchClause($object, $field_name, $filter_type, $field_options); if ($field_options['value']) { + unset($field_options['grid_options']); $custom_filter[$field_name][$filter_type] = $field_options; } } $custom_filters[$grid_name] = $custom_filter; - $this->Application->StoreVar($event->getPrefixSpecial().'_custom_filter', serialize($custom_filters) ); + $this->Application->StorePersistentVar($event->getPrefixSpecial().'_custom_filter.'.$view_name, serialize($custom_filters) ); return $custom_filter; } + /** + * Return numeric range filter value + checking that it's number + * + * @param Array $value array containing range filter value + * @return unknown + */ + function getRangeValue($value) + { + return $value && is_numeric($value) ? $this->Conn->qstr($value) : false; + } + function getCustomFilterSearchClause(&$object, $field_name, $filter_type, $field_options) { + if ($filter_type == 'date_range') { + // use timestamp field, not formatted one + $field_name = $field_options['grid_options']['sort_field']; + } + extract( $this->getFieldInformation($object, $field_name) ); // see getFieldInformation for more details $filter_value = ''; switch ($filter_type) { case 'range': - $from = $field_options['submit_value']['from'] ? $this->Conn->qstr($field_options['submit_value']['from']) : false; - $to = $field_options['submit_value']['to'] ? $this->Conn->qstr($field_options['submit_value']['to']) : false; + $from = $this->getRangeValue($field_options['submit_value']['from']); + $to = $this->getRangeValue($field_options['submit_value']['to']); if ($from !== false && $to !== false) { // add range filter $filter_value = $table_name.'`'.$field_name.'` >= '.$from.' AND '.$table_name.'`'.$field_name.'` <= '.$to; } - elseif ($from !== false && $to === false) { + elseif ($from !== false) { // add equals filter on $from $filter_value = $table_name.'`'.$field_name.'` = '.$from; } - elseif ($from === false && $to !== false) { + elseif ($to !== false) { // add equals filter on $to $filter_value = $table_name.'`'.$field_name.'` = '.$to; } break; + case 'float_range': + // MySQL can't compare values in "float" type columns using "=" operator + $from = $this->getRangeValue($field_options['submit_value']['from']); + $to = $this->getRangeValue($field_options['submit_value']['to']); + + if ($from !== false && $to !== false) { + // add range filter + $filter_value = $table_name.'`'.$field_name.'` >= '.$from.' AND '.$table_name.'`'.$field_name.'` <= '.$to; + } + elseif ($from !== false) { + // add equals filter on $from + $filter_value = 'ABS('.$table_name.'`'.$field_name.'` - '.$from.') <= 0.0001'; + } + elseif ($to !== false) { + // add equals filter on $to + $filter_value = 'ABS('.$table_name.'`'.$field_name.'` - '.$to.') <= 0.0001'; + } + break; + case 'date_range': + $from = $this->processRangeField($object, $field_name, $field_options['submit_value'], 'from'); + $to = $this->processRangeField($object, $field_name, $field_options['submit_value'], 'to'); + + $day_seconds = 23 * 60 * 60 + 59 * 60 + 59; + if ($from !== false && $to === false) { + $to = $from + $day_seconds; + } + elseif ($from === false && $to !== false) { + $from = $to - $day_seconds; + } + + if ($from !== false && $to !== false) { + $filter_value = $table_name.'`'.$field_name.'` >= '.$from.' AND '.$table_name.'`'.$field_name.'` <= '.$to; + } break; case 'equals': @@ -415,33 +451,36 @@ /** * Enter description here... * - * @param kEvent $event + * @param kdbItem $object * @param string $search_field - * @param string $type * @param string $value - * @param string $formatter_class + * @param string $type */ - function processRangeField(&$event, $search_field, $type, $value, $formatter_class) + function processRangeField(&$object, $search_field, $value, $type) { - $field = $search_field.'_'.$type; + if (!$value[$type]) { + return false; + } + $lang_current =& $this->Application->recallObject('lang.current'); + $dt_separator = getArrayValue($object->GetFieldOptions($search_field), 'date_time_separator'); + if (!$dt_separator) { + $dt_separator = ' '; + } + + $time = ($type == 'from') ? adodb_mktime(0, 0, 0) : adodb_mktime(23, 59, 59); + $time = adodb_date($lang_current->GetDBField('InputTimeFormat'), $time); + + $full_value = $value[$type].$dt_separator.$time; - $object =& $event->getObject(); - $dt_separator = getArrayValue( $object->GetFieldOptions($search_field), 'date_time_separator' ); - if(!$dt_separator) $dt_separator = ' '; + $formatter =& $this->Application->recallObject($object->Fields[$search_field]['formatter']); - $time = ($type == 'datefrom') ? adodb_mktime(0,0,0) : adodb_mktime(23,59,59); - $time = adodb_date( $lang_current->GetDBField('InputTimeFormat'), $time); - $full_value = $value.$dt_separator.$time; - - $formatter =& $this->Application->recallObject($formatter_class); - $value_ts = $formatter->Parse($full_value, $search_field, $object); $pseudo = getArrayValue($object->FieldErrors, $search_field, 'pseudo'); - if($pseudo) - { - $this->Application->StoreVar($event->getPrefixSpecial().'_'.$field.'_error', $pseudo); - return -1; + if ($pseudo) { + unset($object->FieldErrors[$search_field]); // remove error! + // invalid format -> ignore this date in search + return false; } return $value_ts; } @@ -456,7 +495,8 @@ $this->Application->RemoveVar($event->getPrefixSpecial().'_search_filter'); $this->Application->RemoveVar($event->getPrefixSpecial().'_search_keyword'); - $this->Application->RemoveVar($event->getPrefixSpecial().'_custom_filter'); + $view_name = $this->Application->RecallVar($event->getPrefixSpecial().'_current_view'); + $this->Application->RemovePersistentVar($event->getPrefixSpecial().'_custom_filter.'.$view_name); } Index: branches/unlabeled/unlabeled-1.6.2/core/units/general/helpers/modules.php =================================================================== diff -u -r5561 -r6849 --- branches/unlabeled/unlabeled-1.6.2/core/units/general/helpers/modules.php (.../modules.php) (revision 5561) +++ branches/unlabeled/unlabeled-1.6.2/core/units/general/helpers/modules.php (.../modules.php) (revision 6849) @@ -1,40 +1,40 @@ _GetModules(); } - + function getWhereClause() { $where_clause = Array('Loaded = 1'); - + if (!$this->Application->IsAdmin()) return implode(' AND ', $where_clause); - + $modules = $this->_GetModules(); if ($modules) { foreach ($modules as $module_index => $module) { $modules[$module_index] = $this->Conn->qstr($module); } $where_clause[] = 'Name IN ('.implode(',', $modules).')'; } - + return implode(' AND ', $where_clause); } - + function _EnableCookieSID() { $session =& $this->Application->recallObject('Session'); return $session->CookiesEnabled; } - + function _IsSpider($UserAgent) { global $robots; $lines = file(FULL_PATH.'/robots_list.txt'); - + if (!is_array($robots)) { $robots = Array(); for($i = 0; $i < count($lines); $i++) { @@ -45,11 +45,11 @@ } return in_array($UserAgent, $robots); } - + function _MatchIp($ip1, $ip2) { $matched = TRUE; - + $ip = explode('.', $ip1); $MatchIp = explode('.', $ip2); for ($i = 0; $i < count($ip); $i++) { @@ -61,7 +61,7 @@ } return $matched; } - + function _IpAccess($IpAddress, $AllowList, $DenyList) { $allowed = explode(',', $AllowList); @@ -88,20 +88,20 @@ ($MatchAllowed && $MatchDenied)); return $Result; } - + /** * Reads config.php file and parses it * */ function _readConfig() { $vars = parse_portal_ini(FULL_PATH.'/config.php'); - + foreach ($vars as $config_key => $config_value) { $GLOBALS['g_'.$config_key] = $config_value; } } - + /** * Leaves only domain part from hostname (e.g. extract "intechnic.lv" from "test.intechnic.lv") * Used for admin login license check @@ -123,7 +123,7 @@ } } } - + if ($dotcount > 1 && !$IsIp) { $p = explode('.', $d); $ret = $p[count($p) - 2].'.'.$p[count($p) - 1]; @@ -151,7 +151,7 @@ return preg_match('/(.*)'.preg_quote($license_domain, '/').'$/', $user_domain); } } - + /** * Returns modules list, that are in license * @@ -161,13 +161,13 @@ { global $i_Keys; static $modules = null; - + if (isset($modules)) return $modules; - + $this->_readConfig(); $license = base64_decode($GLOBALS['g_License']); $this->_ParseLicense($license); - + $modules = Array(); $domain = $this->_GetDomain(); if (!$this->_IsLocalSite($domain)) { @@ -182,10 +182,10 @@ else { $modules = array_keys($this->Application->ModuleInfo); } - + array_push($modules, 'Proj-base', 'Proj-CMS'); return $modules; } - + /** * Allows to determine if module is licensed * @@ -197,7 +197,7 @@ $modules = $this->_GetModules(); return in_array($name, $modules); } - + /** * Returns domain from licences (and direct in case of install script) * @@ -207,7 +207,7 @@ { return $this->Application->ConfigValue('DomainDetect') ? $_SERVER['HTTP_HOST'] : $GLOBALS['g_Domain']; } - + function _keyED($txt, $encrypt_key) { $encrypt_key = md5($encrypt_key); @@ -220,8 +220,8 @@ } return $tmp; } - - + + function _decrypt($txt, $key) { $txt = $this->_keyED($txt,$key); @@ -233,17 +233,17 @@ } return $tmp; } - + function LoadFromRemote() { return ''; } - + function DLid() { die($GLOBALS['lid']."\n"); } - + function _LoadLicense($LoadRemote = false) { $f = FULL_PATH.'/intechnic.php'; @@ -257,7 +257,7 @@ } return $data; } - + function _VerifyKey($domain, $k) { $key = md5($domain); @@ -267,7 +267,7 @@ if ($k == $r) return true; return false; } - + function _ParseLicense($txt) { global $i_User, $i_Pswd, $i_Keys; @@ -282,11 +282,11 @@ case 'Username': $i_User = $p[1]; break; - + case 'UserPass': $i_Pswd = $p[1]; break; - + default: if (substr($p[0], 0, 3) == 'key') { $parts = explode('|', $p[1]); @@ -303,7 +303,7 @@ } } } - + function _GetObscureValue($i) { if ($i == 'x') return 0254; $z = ''; @@ -315,14 +315,14 @@ if ($i > 10) return '.'.($this->_GetObscureValue(6.5)+1); if ($i == 'a') return 0xa; } - + function _Chr($val) { $x = $this->_GetObscureValue(25); $f = chr($x).chr($x+5).chr($x+15); return $f($val); } - + function _IsLocalSite($domain) { $ee = $this->_GetObscureValue(35); $yy = ''; @@ -346,7 +346,7 @@ } return FALSE; } - + function _falseIsLocalSite($domain) { $localb = FALSE;