getBaseDomain($domain); $parts = explode('.', $domain); $combinations = []; for ($i = 0; $i < count($parts) - 1; $i++) { $combinations[] = implode('.', array_slice($parts, $i)); } usort($combinations, function ($a, $b) { return strlen($b) - strlen($a); }); return $combinations; } /** * Obtém as regras específicas para um domínio * * @param string $domain Domínio para buscar regras * @return array|null Array com regras mescladas ou null se não encontrar */ public function getDomainRules($domain) { $domainParts = $this->getDomainParts($domain); foreach ($this->domainRules as $pattern => $rules) { if ($this->getBaseDomain($domain) === $this->getBaseDomain($pattern)) { return $this->mergeWithGlobalRules($rules); } } foreach ($domainParts as $part) { foreach ($this->domainRules as $pattern => $rules) { if ($part === $this->getBaseDomain($pattern)) { return $this->mergeWithGlobalRules($rules); } } } return null; } /** * Mescla regras específicas do domínio com regras globais * * @param array $rules Regras específicas do domínio * @return array Regras mescladas */ private function mergeWithGlobalRules($rules) { $globalRules = $this->getGlobalRules(); if (isset($rules['excludeGlobalRules']) && is_array($rules['excludeGlobalRules'])) { foreach ($rules['excludeGlobalRules'] as $ruleType => $categories) { if (isset($globalRules[$ruleType])) { foreach ($categories as $category => $itemsToExclude) { if (isset($globalRules[$ruleType][$category])) { $globalRules[$ruleType][$category] = array_diff( $globalRules[$ruleType][$category], $itemsToExclude ); } } } } } foreach ($globalRules as $ruleType => $categories) { if (!isset($rules[$ruleType])) { $rules[$ruleType] = []; } foreach ($categories as $category => $items) { $rules[$ruleType] = array_merge($rules[$ruleType], $items); } } return $rules; } /** * Retorna todas as regras globais * * @return array Array com todas as regras globais */ public function getGlobalRules() { return $this->globalRules; } }