@@ -47,6 +47,11 @@ class URLAnalyzer
4747 */
4848 private $ cache ;
4949
50+ /**
51+ * @var array Lista de regras ativadas durante o processamento
52+ */
53+ private $ activatedRules = [];
54+
5055 /**
5156 * Construtor da classe
5257 * Inicializa as dependências necessárias
@@ -99,6 +104,9 @@ public function checkRedirects($url)
99104 */
100105 public function analyze ($ url )
101106 {
107+ // Reset activated rules for new analysis
108+ $ this ->activatedRules = [];
109+
102110 // 1. Limpa a URL
103111 $ cleanUrl = $ this ->cleanUrl ($ url );
104112 if (!$ cleanUrl ) {
@@ -514,6 +522,7 @@ private function processContent($content, $host, $url)
514522 $ styleElement = $ dom ->createElement ('style ' );
515523 $ styleElement ->appendChild ($ dom ->createTextNode ($ domainRules ['customStyle ' ]));
516524 $ dom ->getElementsByTagName ('head ' )[0 ]->appendChild ($ styleElement );
525+ $ this ->activatedRules [] = 'customStyle ' ;
517526 }
518527
519528 if (isset ($ domainRules ['customCode ' ])) {
@@ -526,36 +535,39 @@ private function processContent($content, $host, $url)
526535 if (isset ($ domainRules ['classAttrRemove ' ])) {
527536 foreach ($ domainRules ['classAttrRemove ' ] as $ class ) {
528537 $ elements = $ xpath ->query ("//*[contains(@class, ' $ class')] " );
529- if ($ elements !== false ) {
538+ if ($ elements !== false && $ elements -> length > 0 ) {
530539 foreach ($ elements as $ element ) {
531540 $ this ->removeClassNames ($ element , [$ class ]);
532541 }
542+ $ this ->activatedRules [] = "classAttrRemove: $ class " ;
533543 }
534544 }
535545 }
536546
537547 if (isset ($ domainRules ['idElementRemove ' ])) {
538548 foreach ($ domainRules ['idElementRemove ' ] as $ id ) {
539549 $ elements = $ xpath ->query ("//*[@id=' $ id'] " );
540- if ($ elements !== false ) {
550+ if ($ elements !== false && $ elements -> length > 0 ) {
541551 foreach ($ elements as $ element ) {
542552 if ($ element ->parentNode ) {
543553 $ element ->parentNode ->removeChild ($ element );
544554 }
545555 }
556+ $ this ->activatedRules [] = "idElementRemove: $ id " ;
546557 }
547558 }
548559 }
549560
550561 if (isset ($ domainRules ['classElementRemove ' ])) {
551562 foreach ($ domainRules ['classElementRemove ' ] as $ class ) {
552563 $ elements = $ xpath ->query ("//*[contains(@class, ' $ class')] " );
553- if ($ elements !== false ) {
564+ if ($ elements !== false && $ elements -> length > 0 ) {
554565 foreach ($ elements as $ element ) {
555566 if ($ element ->parentNode ) {
556567 $ element ->parentNode ->removeChild ($ element );
557568 }
558569 }
570+ $ this ->activatedRules [] = "classElementRemove: $ class " ;
559571 }
560572 }
561573 }
@@ -564,22 +576,24 @@ private function processContent($content, $host, $url)
564576 foreach ($ domainRules ['scriptTagRemove ' ] as $ script ) {
565577 // Busca por tags script com src ou conteúdo contendo o script
566578 $ scriptElements = $ xpath ->query ("//script[contains(@src, ' $ script')] | //script[contains(text(), ' $ script')] " );
567- if ($ scriptElements !== false ) {
579+ if ($ scriptElements !== false && $ scriptElements -> length > 0 ) {
568580 foreach ($ scriptElements as $ element ) {
569581 if ($ element ->parentNode ) {
570582 $ element ->parentNode ->removeChild ($ element );
571583 }
572584 }
585+ $ this ->activatedRules [] = "scriptTagRemove: $ script " ;
573586 }
574587
575588 // Busca por tags link que são scripts
576589 $ linkElements = $ xpath ->query ("//link[@as='script' and contains(@href, ' $ script') and @type='application/javascript'] " );
577- if ($ linkElements !== false ) {
590+ if ($ linkElements !== false && $ linkElements -> length > 0 ) {
578591 foreach ($ linkElements as $ element ) {
579592 if ($ element ->parentNode ) {
580593 $ element ->parentNode ->removeChild ($ element );
581594 }
582595 }
596+ $ this ->activatedRules [] = "scriptTagRemove: $ script " ;
583597 }
584598 }
585599 }
@@ -604,6 +618,26 @@ private function processContent($content, $host, $url)
604618 $ marretaHtml ->appendXML ('Chapéu de paywall é <a href=" ' .SITE_URL .'" style="color: #fff; text-decoration: underline; font-weight: bold;" target="_blank">Marreta</a>! ' );
605619 $ marretaDiv ->appendChild ($ marretaHtml );
606620 $ body ->appendChild ($ marretaDiv );
621+
622+ // Adiciona painel de debug se DEBUG for true
623+ if (DEBUG ) {
624+ $ debugDiv = $ dom ->createElement ('div ' );
625+ $ debugDiv ->setAttribute ('style ' , 'z-index: 99999; position: fixed; bottom: 10px; right: 10px; background: rgba(0,0,0,0.8); color: #fff; font-size: 13px; line-height: 1.4; padding: 10px; border-radius: 3px; font-family: monospace; max-height: 200px; overflow-y: auto; ' );
626+
627+ if ( empty ($ this ->activatedRules )) {
628+ $ ruleElement = $ dom ->createElement ('div ' );
629+ $ ruleElement ->textContent = 'Nenhuma regra ativada ' ;
630+ $ debugDiv ->appendChild ($ ruleElement );
631+ } else {
632+ foreach ($ this ->activatedRules as $ rule ) {
633+ $ ruleElement = $ dom ->createElement ('div ' );
634+ $ ruleElement ->textContent = $ rule ;
635+ $ debugDiv ->appendChild ($ ruleElement );
636+ }
637+ }
638+
639+ $ body ->appendChild ($ debugDiv );
640+ }
607641 }
608642
609643 return $ dom ->saveHTML ();
0 commit comments