Application->siteDomainField($country_prefix . 'Country'); if ($iso_format && !$country) { $country = 'USA'; } if (!$iso_format && strlen($country)) { return $this->getCountryId($country); } return $country; } /** * Returns country id based on it's ISO code * * @param string $iso_code * @return int */ function getCountryId($iso_code) { static $cache = null; if (!isset($cache)) { $sql = 'SELECT CountryStateId, IsoCode FROM ' . $this->Application->getUnitConfig('country-state')->getTableName() . ' WHERE Type = ' . DESTINATION_TYPE_COUNTRY; $cache = $this->Conn->GetCol($sql, 'IsoCode'); } return $cache[$iso_code]; } /** * Gets site domains from cache * * @return Array */ function getSiteDomains() { static $cache = null; if ( !isset($cache) ) { if ( $this->Application->isCachingType(CACHING_TYPE_MEMORY) ) { $cache = $this->Application->getCache('master:domains_parsed', false, CacheSettings::$domainsParsedRebuildTime); } else { $cache = $this->Application->getDBCache('domains_parsed', CacheSettings::$domainsParsedRebuildTime); } if ($cache) { $cache = unserialize($cache); } else { $sql = 'SELECT * FROM ' . TABLE_PREFIX . 'SiteDomains WHERE Status = ' . STATUS_ACTIVE . ' ORDER BY Priority DESC'; $cache = $this->Conn->Query($sql, 'DomainId'); if ($this->Application->isCachingType(CACHING_TYPE_MEMORY)) { $this->Application->setCache('master:domains_parsed', serialize($cache)); } else { $this->Application->setDBCache('domains_parsed', serialize($cache)); } } } return $cache; } /** * Try to match visited domain to any of existing * * @param string $field * @param string $value * @return int */ function getDomainByName($field, $value) { $site_domains = $this->getSiteDomains(); $name_fields = Array ('DomainName', 'SSLDomainName'); foreach ($site_domains as $id => $site_domain) { if ( in_array($field, $name_fields) ) { if ( !$site_domain[$field . 'UsesRegExp'] ) { // not regular expression -> escape manually $site_domain[$field] = preg_quote($site_domain[$field], '/'); } if ( $site_domain[$field] && preg_match('/^' . $site_domain[$field] . '$/', $value) ) { return $id; } } elseif ( $site_domain[$field] == $value ) { return $id; } } return false; } /** * Try to match domain settings based on visitor's IP address * * @return int */ function getDomainByIP() { $site_domains = $this->getSiteDomains(); foreach ($site_domains as $id => $site_domain) { if (kUtil::ipMatch($site_domain['DomainIPRange'], "\n")) { return $id; } } return false; } /** * Compares 2 domains. * * @param string $match_domain Domain to compare with. * @param string $domain_field Site domain field to search within. * @param string $primary_domain Primary domain to use in case if no site domain matches. * * @return boolean */ public function compare($match_domain, $domain_field, $primary_domain) { $domain_id = $this->getDomainByName($domain_field, $match_domain); return $domain_id > 0 ? true : ($match_domain == $primary_domain); } }