diff --git a/Public/TableOfContents/Infrastructure/Ui/TableOfContentsRenderer.php b/Public/TableOfContents/Infrastructure/Ui/TableOfContentsRenderer.php index d09e5361..5e425ab8 100644 --- a/Public/TableOfContents/Infrastructure/Ui/TableOfContentsRenderer.php +++ b/Public/TableOfContents/Infrastructure/Ui/TableOfContentsRenderer.php @@ -43,20 +43,30 @@ final class TableOfContentsRenderer implements RendererInterface { $data = $component->getData(); + // DEBUG TOC: Log all visibility checks + $isLoggedIn = is_user_logged_in(); + $debugPrefix = "TOC DEBUG [" . ($isLoggedIn ? "LOGGED" : "GUEST") . "]"; + if (!$this->isEnabled($data)) { + error_log("{$debugPrefix}: SKIP - isEnabled=false"); return ''; } - if (!PageVisibilityHelper::shouldShow(self::COMPONENT_NAME)) { + $shouldShow = PageVisibilityHelper::shouldShow(self::COMPONENT_NAME); + if (!$shouldShow) { + error_log("{$debugPrefix}: SKIP - PageVisibilityHelper::shouldShow=false"); return ''; } $tocItems = $this->generateTocItems($data); if (empty($tocItems)) { + error_log("{$debugPrefix}: SKIP - tocItems empty"); return ''; } + error_log("{$debugPrefix}: RENDER - passed all checks, items=" . count($tocItems)); + $css = $this->generateCSS($data); $html = $this->buildHTML($data, $tocItems); $script = $this->buildScript($data); @@ -107,12 +117,21 @@ final class TableOfContentsRenderer implements RendererInterface { global $post; + // DEBUG: Track content processing + $isLoggedIn = is_user_logged_in(); + $debugPrefix = "TOC generateTocFromContent [" . ($isLoggedIn ? "LOGGED" : "GUEST") . "]"; + if (!$post || empty($post->post_content)) { + error_log("{$debugPrefix}: SKIP - no post or empty content"); return []; } + error_log("{$debugPrefix}: post_id={$post->ID}, raw_content_length=" . strlen($post->post_content)); + $content = apply_filters('the_content', $post->post_content); + error_log("{$debugPrefix}: filtered_content_length=" . strlen($content)); + $dom = new DOMDocument(); libxml_use_internal_errors(true); $dom->loadHTML('' . $content); @@ -127,6 +146,8 @@ final class TableOfContentsRenderer implements RendererInterface $headings = $xpath->query($xpathQuery); + error_log("{$debugPrefix}: headings_found=" . $headings->length); + if ($headings->length === 0) { return []; } diff --git a/Shared/Application/UseCases/EvaluateComponentVisibility/EvaluateComponentVisibilityUseCase.php b/Shared/Application/UseCases/EvaluateComponentVisibility/EvaluateComponentVisibilityUseCase.php index aad59f18..c078db14 100644 --- a/Shared/Application/UseCases/EvaluateComponentVisibility/EvaluateComponentVisibilityUseCase.php +++ b/Shared/Application/UseCases/EvaluateComponentVisibility/EvaluateComponentVisibilityUseCase.php @@ -36,9 +36,16 @@ final class EvaluateComponentVisibilityUseCase */ public function execute(string $componentName): bool { + // DEBUG: Log for TOC only + $debugToc = ($componentName === 'table-of-contents'); + // Paso 1: Verificar visibilidad por tipo de pagina $visibleByPageType = $this->pageVisibilityUseCase->execute($componentName); + if ($debugToc) { + error_log("EvaluateComponentVisibility [{$componentName}]: visibleByPageType=" . ($visibleByPageType ? "true" : "false")); + } + if (!$visibleByPageType) { return false; } @@ -46,6 +53,10 @@ final class EvaluateComponentVisibilityUseCase // Paso 2: Verificar exclusiones $isExcluded = $this->exclusionsUseCase->execute($componentName); + if ($debugToc) { + error_log("EvaluateComponentVisibility [{$componentName}]: isExcluded=" . ($isExcluded ? "true" : "false")); + } + // Mostrar si NO esta excluido return !$isExcluded; } diff --git a/Shared/Application/UseCases/EvaluatePageVisibility/EvaluatePageVisibilityUseCase.php b/Shared/Application/UseCases/EvaluatePageVisibility/EvaluatePageVisibilityUseCase.php index 14c54829..69c8b1b6 100644 --- a/Shared/Application/UseCases/EvaluatePageVisibility/EvaluatePageVisibilityUseCase.php +++ b/Shared/Application/UseCases/EvaluatePageVisibility/EvaluatePageVisibilityUseCase.php @@ -28,15 +28,27 @@ final class EvaluatePageVisibilityUseCase { $config = $this->visibilityRepository->getVisibilityConfig($componentName); + // DEBUG: Log for TOC only + $debugToc = ($componentName === 'table-of-contents'); + $usingDefaults = false; + if (empty($config)) { // Usar defaults especificos por componente si existen $config = VisibilityDefaults::getForComponent($componentName); + $usingDefaults = true; } $pageType = $this->pageTypeDetector->detect(); $visibilityField = $pageType->toVisibilityField(); + $fieldValue = $config[$visibilityField] ?? true; + $result = $this->toBool($fieldValue); - return $this->toBool($config[$visibilityField] ?? true); + if ($debugToc) { + error_log("EvaluatePageVisibility [{$componentName}]: pageType=" . $pageType->value() . ", field={$visibilityField}, fieldValue=" . var_export($fieldValue, true) . ", result=" . ($result ? "true" : "false") . ", usingDefaults=" . ($usingDefaults ? "true" : "false")); + error_log("EvaluatePageVisibility [{$componentName}]: config=" . json_encode($config)); + } + + return $result; } private function toBool(mixed $value): bool diff --git a/Shared/Infrastructure/Services/PageVisibilityHelper.php b/Shared/Infrastructure/Services/PageVisibilityHelper.php index cab954f8..08b0b26e 100644 --- a/Shared/Infrastructure/Services/PageVisibilityHelper.php +++ b/Shared/Infrastructure/Services/PageVisibilityHelper.php @@ -43,7 +43,15 @@ final class PageVisibilityHelper $container = DIContainer::getInstance(); $useCase = $container->getEvaluateComponentVisibilityUseCase(); - return $useCase->execute($componentName); + $result = $useCase->execute($componentName); + + // DEBUG: Log visibility evaluation + if ($componentName === 'table-of-contents') { + $isLoggedIn = is_user_logged_in(); + error_log("PageVisibilityHelper DEBUG [{$componentName}] [" . ($isLoggedIn ? "LOGGED" : "GUEST") . "]: result=" . ($result ? "true" : "false")); + } + + return $result; } /** diff --git a/Shared/Infrastructure/Services/WordPressPageTypeDetector.php b/Shared/Infrastructure/Services/WordPressPageTypeDetector.php index 7dcaf162..55085906 100644 --- a/Shared/Infrastructure/Services/WordPressPageTypeDetector.php +++ b/Shared/Infrastructure/Services/WordPressPageTypeDetector.php @@ -15,6 +15,18 @@ final class WordPressPageTypeDetector implements PageTypeDetectorInterface { public function detect(): PageType { + // DEBUG: Log all checks for diagnosis + $isLoggedIn = is_user_logged_in(); + $debugData = [ + 'is_front_page' => is_front_page(), + 'is_home' => is_home(), + 'is_single' => is_single(), + 'is_page' => is_page(), + 'is_search' => is_search(), + 'is_archive' => is_archive(), + ]; + error_log("PageTypeDetector DEBUG [" . ($isLoggedIn ? "LOGGED" : "GUEST") . "]: " . json_encode($debugData)); + if ($this->isHome()) { return PageType::home(); }