public function getByDomain($domain)
{
$data = $this->db->fetchRow("SELECT * FROM sites WHERE mainDomain = ? OR domains LIKE ?", [$domain, "%\"" . $domain . "\"%"]);
if (!$data["id"]) {
// check for wildcards
// @TODO: refactor this to be more clear
$sitesRaw = $this->db->fetchAll("SELECT id,domains FROM sites");
$wildcardDomains = [];
foreach ($sitesRaw as $site) {
if (!empty($site["domains"]) && strpos($site["domains"], "*")) {
$siteDomains = unserialize($site["domains"]);
if (is_array($siteDomains) && count($siteDomains) > 0) {
foreach ($siteDomains as $siteDomain) {
if (strpos($siteDomain, "*") !== false) {
$siteDomain = str_replace(".*", "*", $siteDomain);
// backward compatibility
$wildcardDomains[$siteDomain] = $site["id"];
}
}
}
}
}
foreach ($wildcardDomains as $wildcardDomain => $siteId) {
$wildcardDomain = preg_quote($wildcardDomain, "#");
$wildcardDomain = str_replace("\\*", ".*", $wildcardDomain);
if (preg_match("#^" . $wildcardDomain . "\$#", $domain)) {
$data = $this->db->fetchRow("SELECT * FROM sites WHERE id = ?", [$siteId]);
}
}
if (!$data["id"]) {
throw new \Exception("there is no site for the requested domain: `" . $domain . "´");
}
}
$this->assignVariablesToModel($data);
}