Skip to content

Commit 0ba05af

Browse files
committed
simplifica o sistema de regras globais e por dominio
1 parent a51e309 commit 0ba05af

File tree

3 files changed

+106
-107
lines changed

3 files changed

+106
-107
lines changed

app/data/global_rules.php

Lines changed: 49 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -6,90 +6,61 @@
66
* Este arquivo define regras que são aplicadas por padrão a todos os sites,
77
* organizadas em categorias para melhor manutenção e compreensão.
88
*
9-
* Estrutura das regras globais:
10-
*
11-
* classElementRemove: Classes HTML que devem ser removidas, agrupadas por categoria
12-
* - paywall: Classes relacionadas a paywalls e conteúdo premium
13-
* - social: Classes de elementos de compartilhamento social
14-
* - newsletter: Classes de popups e formulários de newsletter
15-
*
16-
* scriptTagRemove: Scripts que devem ser removidos, agrupados por categoria
17-
* - tracking: Scripts de analytics e rastreamento
18-
* - paywall: Scripts relacionados a paywalls e conteúdo premium
19-
* - cookies: Scripts de gerenciamento de cookies e GDPR/LGPD
20-
* - misc: Scripts diversos como push notifications
21-
*
229
* Nota: Estas regras podem ser sobrescritas ou desativadas para domínios específicos
2310
* usando a configuração 'excludeGlobalRules' em domain_rules.php
2411
*/
2512
return [
2613
'classElementRemove' => [
27-
'paywall' => [
28-
'subscription',
29-
'subscriber-content',
30-
'premium-content',
31-
'signin-wall',
32-
'register-wall',
33-
'paid-content',
34-
'premium-article',
35-
'subscription-box',
36-
'piano-offer',
37-
'piano-inline',
38-
'piano-modal',
39-
'paywall-container',
40-
'paywall-overlay',
41-
'paywall-wrapper',
42-
'paywall-notification'
43-
],
44-
'social' => [
45-
'social-share',
46-
'social-buttons',
47-
'share-container'
48-
],
49-
'newsletter' => [
50-
'newsletter-popup',
51-
'subscribe-form',
52-
'signup-overlay'
53-
]
14+
'subscription',
15+
'subscriber-content',
16+
'premium-content',
17+
'signin-wall',
18+
'register-wall',
19+
'paid-content',
20+
'premium-article',
21+
'subscription-box',
22+
'piano-offer',
23+
'piano-inline',
24+
'piano-modal',
25+
'paywall-container',
26+
'paywall-overlay',
27+
'paywall-wrapper',
28+
'paywall-notification',
29+
'leaky_paywall_message_wrap',
30+
'subscribe-form',
31+
'signup-overlay'
5432
],
5533
'scriptTagRemove' => [
56-
'tracking' => [
57-
'gtm.js',
58-
'ga.js',
59-
'fbevents.js',
60-
'pixel.js',
61-
'chartbeat',
62-
'analytics.js',
63-
'cmp.js',
64-
],
65-
'paywall' => [
66-
'wall.js',
67-
'paywall.js',
68-
'subscriber.js',
69-
'piano.js',
70-
'tiny.js',
71-
'pywll.js',
72-
'content-gate.js',
73-
'signwall.js',
74-
'pw.js',
75-
'pw-',
76-
'piano-',
77-
'tinypass.js',
78-
'tinypass.min.js',
79-
'tp.min.js',
80-
'premium.js',
81-
'amp-access-0.1.js',
82-
'zephrBarriersScripts',
83-
],
84-
'cookies' => [
85-
'cookie',
86-
'gdpr',
87-
'lgpd'
88-
],
89-
'misc' => [
90-
'push',
91-
'sw.js',
92-
'stats.js'
93-
]
34+
'gtm.js',
35+
'ga.js',
36+
'fbevents.js',
37+
'pixel.js',
38+
'chartbeat',
39+
'analytics.js',
40+
'cmp.js',
41+
'wall.js',
42+
'paywall.js',
43+
'subscriber.js',
44+
'piano.js',
45+
'tiny.js',
46+
'pywll.js',
47+
'content-gate.js',
48+
'signwall.js',
49+
'pw.js',
50+
'pw-',
51+
'piano-',
52+
'tinypass.js',
53+
'tinypass.min.js',
54+
'tp.min.js',
55+
'premium.js',
56+
'amp-access-0.1.js',
57+
'zephrBarriersScripts',
58+
'leaky-paywall',
59+
'cookie',
60+
'gdpr',
61+
'lgpd',
62+
'push',
63+
'sw.js',
64+
'stats.js'
9465
]
9566
];

app/inc/Rules.php

Lines changed: 56 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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
/**

app/inc/URLAnalyzer.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -804,7 +804,7 @@ private function processContent($content, $domain, $url)
804804
foreach ($elements as $element) {
805805
if ($element instanceof DOMElement) {
806806
$style = $element->getAttribute('style');
807-
$style = preg_replace('/(max-height|height|overflow|position|display)\s*:\s*[^;]+;?/', '', $style);
807+
$style = preg_replace('/(max-height|height|overflow|position|display|visibility)\s*:\s*[^;]+;?/', '', $style);
808808
$element->setAttribute('style', $style);
809809
}
810810
}

0 commit comments

Comments
 (0)