Index: application.php =================================================================== RCS file: /www/cvs/kernel4_dev/kernel4/application.php,v retrieving revision 1.186.2.43.8.1 diff -u -r1.186.2.43.8.1 application.php --- application.php 7 Mar 2010 19:08:12 -0000 1.186.2.43.8.1 +++ application.php 9 Mar 2010 18:47:21 -0000 @@ -222,6 +222,13 @@ var $isAdmin = false; /** + * Instance of site domain object + * + * @var kDBItem + */ + var $siteDomain = null; + + /** * Returns kApplication instance anywhere in the script. * * This method should be used to get single kApplication object instance anywhere in the @@ -625,13 +632,51 @@ function GetPrimaryCurrency() { - if ($this->isModuleEnabled('In-Commerce')) { - $table = $this->getUnitOption('curr', 'TableName'); - return $this->Conn->GetOne('SELECT ISO FROM '.$table.' WHERE IsPrimary = 1'); + static $currency_iso = ''; + + if ($currency_iso) { + return $currency_iso; + } + + if ($this->prefixRegistred('curr')) { + $currency_id = $this->siteDomainField('PrimaryCurrencyId'); + + $sql = 'SELECT ISO + FROM ' . $this->getUnitOption('curr', 'TableName') . ' + WHERE ' . ($currency_id > 0 ? 'CurrencyId = ' . $currency_id : 'IsPrimary = 1'); + $currency_iso = $this->Conn->GetOne($sql); } else { - return 'USD'; + $currency_iso = 'USD'; + } + + return $currency_iso; + } + + /** + * Returns site domain field. When none of site domains are found false is returned. + * + * @param string $field + * @param bool $formatted + * @param string $format + */ + function siteDomainField($field, $formatted = false, $format = null) + { + if ($this->isAdmin) { + // don't apply any filtering in administrative console + return false; + } + + if (!$this->siteDomain) { + $this->siteDomain =& $this->recallObject('site-domain.current'); + /* @var $site_domain kDBItem */ + } + + if ($this->siteDomain->isLoaded()) { + return $formatted ? $this->siteDomain->GetField($field, $format) : $this->siteDomain->GetDBField($field); } + + return false; } /** @@ -1400,18 +1445,13 @@ $ssl = isset($params['__SSL__']) ? $params['__SSL__'] : null; if ($ssl !== null) { $session =& $this->recallObject('Session'); - $cookie_url = trim($session->CookieDomain.$session->CookiePath, '/.'); - if ($ssl) { - $target_url = defined('ADMIN') && ADMIN ? $this->ConfigValue('AdminSSL_URL') : false; - if (!$target_url) { - $target_url = $this->ConfigValue('SSL_URL'); - } - } - else { - $target_url = 'http://'.DOMAIN.$this->ConfigValue('Site_Path'); - } + /* @var $session Session */ + + $target_url = rtrim($this->BaseURL('', $ssl, false), '/'); + $cookie_url = trim($session->CookieDomain . $session->CookiePath, '/.'); - if (!preg_match('#'.preg_quote($cookie_url).'#', $target_url)) { + if (!preg_match('#' . preg_quote($cookie_url) . '#', $target_url)) { + // when SSL<->NON-SSL redirect to different domain pass SID in url $session->SetMode(smGET_ONLY); } } @@ -1894,24 +1934,33 @@ return $ret; } - function BaseURL($prefix='', $ssl=null) + function BaseURL($prefix = '', $ssl = null, $add_port = true) { if ($ssl === null) { - return PROTOCOL.SERVER_NAME.(defined('PORT')?':'.PORT : '').rtrim(BASE_PATH, '/').$prefix.'/'; + // stay on same encryption level + return PROTOCOL . SERVER_NAME . ($add_port && defined('PORT') ? ':' . PORT : '') . rtrim(BASE_PATH, '/') . $prefix . '/'; } - else { - if ($ssl) { - $base_url = defined('ADMIN') && ADMIN ? $this->ConfigValue('AdminSSL_URL') : false; - if (!$base_url) { - $base_url = $this->ConfigValue('SSL_URL'); - } - return rtrim($base_url, '/').$prefix.'/'; - } - else { - return 'http://'.DOMAIN.(defined('PORT')?':'.PORT : '').rtrim( $this->ConfigValue('Site_Path'), '/').$prefix.'/'; + if ($ssl) { + // going from http:// to https:// + $base_url = $this->isAdmin ? $this->ConfigValue('AdminSSL_URL') : false; + + if (!$base_url) { + $ssl_url = $this->siteDomainField('SSLUrl'); + $base_url = $ssl_url !== false ? $ssl_url : $this->ConfigValue('SSL_URL'); } + + return rtrim($base_url, '/') . $prefix . '/'; + } + + // going from https:// to http:// + $domain = $this->siteDomainField('DomainName'); + + if ($domain === false) { + $domain = DOMAIN; } + + return 'http://' . $domain . ($add_port && defined('PORT') ? ':' . PORT : '') . rtrim($this->ConfigValue('Site_Path'), '/') . $prefix . '/'; } function Redirect($t='', $params=null, $prefix='', $index_file=null) @@ -2128,6 +2177,14 @@ */ function ConfigValue($name) { + if ($name == 'Smtp_AdminMailFrom') { + $res = $this->siteDomainField('AdminEmail'); + + if ($res) { + return $res; + } + } + $res = array_key_exists($name, $this->ConfigHash) ? $this->ConfigHash[$name] : false; if ($res !== false) { return $res;