Files
roi-theme/Shared/Infrastructure/Services/MigratePageVisibilityService.php
FrankZamora 8735962f52 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>
2025-12-03 09:16:34 -06:00

54 lines
1.4 KiB
PHP

<?php
declare(strict_types=1);
namespace ROITheme\Shared\Infrastructure\Services;
use ROITheme\Shared\Domain\Contracts\PageVisibilityRepositoryInterface;
use ROITheme\Shared\Domain\Constants\VisibilityDefaults;
/**
* Servicio para migrar configuración de visibilidad inicial
*
* @package ROITheme\Shared\Infrastructure\Services
*/
final class MigratePageVisibilityService
{
// NOTA: Usa VisibilityDefaults::DEFAULT_VISIBILITY para cumplir DRY
public function __construct(
private readonly PageVisibilityRepositoryInterface $visibilityRepository
) {}
/**
* Ejecuta la migración para todos los componentes
*
* @return array{created: int, skipped: int}
*/
public function migrate(): array
{
$created = 0;
$skipped = 0;
$components = $this->visibilityRepository->getAllComponentNames();
foreach ($components as $componentName) {
if ($this->visibilityRepository->hasVisibilityConfig($componentName)) {
$skipped++;
continue;
}
// Usar constante compartida (DRY)
$this->visibilityRepository->createDefaultVisibility(
$componentName,
VisibilityDefaults::DEFAULT_VISIBILITY
);
$created++;
}
return [
'created' => $created,
'skipped' => $skipped,
];
}
}