@@ -15,24 +15,27 @@ class Rules
1515 *
1616 * Configurações possíveis para cada domínio:
1717 * @var array
18- *
19- * - idElementRemove: IDs de elementos HTML que devem ser removidos
20- * - classElementRemove: Classes de elementos HTML que devem ser removidos
21- * - scriptTagRemove: Scripts que devem ser removidos
22- * - cookies: Cookies que devem ser definidos ou removidos
23- * - classAttrRemove: Classes que devem ser removidas de elementos
24- * - clearStorage: Se deve limpar o storage do navegador
25- * - customCode: Código JavaScript personalizado para execução
26- * - excludeGlobalRules: Array de regras globais a serem excluídas
27- * - userAgent: User Agent personalizado
28- * - headers: Headers HTTP personalizados
29- * - fixRelativeUrls: Habilita correção de URLs relativas
3018 */
3119 private $ domainRules = DOMAIN_RULES ;
3220
3321 // Regras globais expandidas
3422 private $ globalRules = GLOBAL_RULES ;
3523
24+ /**
25+ * Lista de tipos de regras suportados
26+ * @var array
27+ */
28+ private $ supportedRuleTypes = [
29+ 'userAgent ' ,
30+ 'headers ' ,
31+ 'idElementRemove ' ,
32+ 'classElementRemove ' ,
33+ 'scriptTagRemove ' ,
34+ 'cookies ' ,
35+ 'classAttrRemove ' ,
36+ 'customCode '
37+ ];
38+
3639 /**
3740 * Obtém o domínio base removendo o prefixo www
3841 *
@@ -103,32 +106,57 @@ public function getDomainRules($domain)
103106 private function mergeWithGlobalRules ($ rules )
104107 {
105108 $ globalRules = $ this ->getGlobalRules ();
109+ $ mergedRules = $ rules ;
106110
111+ // Processa excludeGlobalRules primeiro
112+ $ excludedRules = [];
107113 if (isset ($ rules ['excludeGlobalRules ' ]) && is_array ($ rules ['excludeGlobalRules ' ])) {
108- foreach ($ rules ['excludeGlobalRules ' ] as $ ruleType => $ categories ) {
109- if (isset ($ globalRules [$ ruleType ])) {
110- foreach ($ categories as $ category => $ itemsToExclude ) {
111- if (isset ($ globalRules [$ ruleType ][$ category ])) {
112- $ globalRules [$ ruleType ][$ category ] = array_diff (
113- $ globalRules [$ ruleType ][$ category ],
114- $ itemsToExclude
115- );
116- }
114+ foreach ($ rules ['excludeGlobalRules ' ] as $ ruleType => $ excluded ) {
115+ if (isset ($ excluded ) && is_array ($ excluded )) {
116+ foreach ($ excluded as $ category => $ items ) {
117+ $ excludedRules [$ ruleType ] = array_merge (
118+ $ excludedRules [$ ruleType ] ?? [],
119+ (array )$ items
120+ );
117121 }
118122 }
119123 }
120124 }
121125
122- foreach ($ globalRules as $ ruleType => $ categories ) {
123- if (!isset ($ rules [$ ruleType ])) {
124- $ rules [$ ruleType ] = [];
125- }
126- foreach ($ categories as $ category => $ items ) {
127- $ rules [$ ruleType ] = array_merge ($ rules [$ ruleType ], $ items );
126+ // Mescla cada tipo de regra suportado
127+ foreach ($ this ->supportedRuleTypes as $ ruleType ) {
128+ if (isset ($ globalRules [$ ruleType ])) {
129+ if (!isset ($ mergedRules [$ ruleType ])) {
130+ $ mergedRules [$ ruleType ] = [];
131+ }
132+
133+ // Garante que estamos trabalhando com arrays
134+ $ domainTypeRules = (array )$ mergedRules [$ ruleType ];
135+ $ globalTypeRules = (array )$ globalRules [$ ruleType ];
136+
137+ // Aplica exclusões se existirem para este tipo
138+ if (isset ($ excludedRules [$ ruleType ])) {
139+ $ globalTypeRules = array_diff ($ globalTypeRules , $ excludedRules [$ ruleType ]);
140+ }
141+
142+ // Mescla as regras
143+ if (in_array ($ ruleType , ['cookies ' , 'headers ' ])) {
144+ // Para cookies e headers, preserva as chaves
145+ $ mergedRules [$ ruleType ] = array_merge ($ globalTypeRules , $ domainTypeRules );
146+ } else {
147+ // Para outros tipos, mescla como arrays simples
148+ $ mergedRules [$ ruleType ] = array_values (array_unique (array_merge (
149+ $ domainTypeRules ,
150+ $ globalTypeRules
151+ )));
152+ }
128153 }
129154 }
130155
131- return $ rules ;
156+ // Remove excludeGlobalRules do resultado final
157+ unset($ mergedRules ['excludeGlobalRules ' ]);
158+
159+ return $ mergedRules ;
132160 }
133161
134162 /**
0 commit comments