feat(visibility): sistema de visibilidad por tipo de página
- Añadir PageVisibility use case y repositorio - Implementar PageTypeDetector para detectar home/single/page/archive - Actualizar FieldMappers con soporte show_on_[page_type] - Extender FormBuilders con UI de visibilidad por página - Refactorizar Renderers para evaluar visibilidad dinámica - Limpiar schemas removiendo campos de visibilidad legacy - Añadir MigrationCommand para migrar configuraciones existentes - Implementar adsense-loader.js para carga lazy de ads - Actualizar front-page.php con nueva estructura - Extender DIContainer con nuevos servicios 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace ROITheme\Shared\Application\UseCases\EvaluatePageVisibility;
|
||||
|
||||
use ROITheme\Shared\Domain\Contracts\PageTypeDetectorInterface;
|
||||
use ROITheme\Shared\Domain\Contracts\PageVisibilityRepositoryInterface;
|
||||
use ROITheme\Shared\Domain\Constants\VisibilityDefaults;
|
||||
|
||||
/**
|
||||
* Caso de uso: Evaluar si un componente debe mostrarse en la página actual
|
||||
*
|
||||
* @package ROITheme\Shared\Application\UseCases\EvaluatePageVisibility
|
||||
*/
|
||||
final class EvaluatePageVisibilityUseCase
|
||||
{
|
||||
// NOTA: Usa VisibilityDefaults::DEFAULT_VISIBILITY para cumplir DRY
|
||||
|
||||
public function __construct(
|
||||
private readonly PageTypeDetectorInterface $pageTypeDetector,
|
||||
private readonly PageVisibilityRepositoryInterface $visibilityRepository
|
||||
) {}
|
||||
|
||||
/**
|
||||
* Evalúa si el componente debe mostrarse en la página actual
|
||||
*/
|
||||
public function execute(string $componentName): bool
|
||||
{
|
||||
$config = $this->visibilityRepository->getVisibilityConfig($componentName);
|
||||
|
||||
if (empty($config)) {
|
||||
// Usar constante compartida (DRY)
|
||||
$config = VisibilityDefaults::DEFAULT_VISIBILITY;
|
||||
}
|
||||
|
||||
$pageType = $this->pageTypeDetector->detect();
|
||||
$visibilityField = $pageType->toVisibilityField();
|
||||
|
||||
return $this->toBool($config[$visibilityField] ?? true);
|
||||
}
|
||||
|
||||
private function toBool(mixed $value): bool
|
||||
{
|
||||
return $value === true || $value === '1' || $value === 1;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user