<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20251112222049 extends AbstractMigration
{
public function getDescription(): string
{
return 'Atualiza zonas publicitárias oficiais (Billboard Home, Billboard, Half Page, Standard, Layer, XTrad, Splash) e remove mobile_banner.';
}
public function up(Schema $schema): void
{
// Remover zonas obsoletas
$this->addSql("DELETE FROM std_ads_zones WHERE machine_name IN ('leaderboard', 'sidebar_rectangle', 'mobile_banner');");
// Billboard Home
$this->addSql("
UPDATE std_ads_zones
SET name = 'Billboard Home',
description = 'Banner principal que aparece antes do menu, apenas na homepage.',
position = 'top_home',
width = 1450,
height = 250
WHERE machine_name = 'home_billboard';
");
// Billboard (páginas internas)
// Atualiza se existir, ou cria caso não exista
$this->addSql("
UPDATE std_ads_zones
SET machine_name = 'billboard',
name = 'Billboard',
description = 'Banner exibido em páginas internas (programas, pesquisa, etc.), geralmente no topo.',
width = 1450,
height = 250,
position = 'top'
WHERE machine_name IN ('billboard', 'sidebar_rectangle', 'leaderboard');
");
$this->addSql("
INSERT INTO std_ads_zones (machine_name, name, description, width, height, position, is_active, created_at, updated_at)
SELECT 'billboard', 'Billboard',
'Banner exibido em páginas internas (programas, pesquisa, etc.), geralmente no topo.',
1450, 250, 'top', 1, NOW(), NOW()
WHERE NOT EXISTS (SELECT 1 FROM std_ads_zones WHERE machine_name = 'billboard');
");
// Half Page
$this->addSql("
UPDATE std_ads_zones
SET name = 'Half Page',
description = 'Banner vertical de meia página, exibido na lateral direita em desktop ou inline em mobile.',
position = 'sidebar',
width = 300,
height = 600
WHERE machine_name = 'halfpage';
");
// Standard
$this->addSql("
UPDATE std_ads_zones
SET name = 'Standard',
description = 'Formato publicitário exibido no final de cada página, antes do footer. Não deve ser exibido nas páginas de Políticas e Privacidade, Contactos e Sobre Nós.',
position = 'footer',
width = 1450,
height = 250
WHERE machine_name = 'standard';
");
// Layer, XTrad, Splash
$this->addSql("
INSERT INTO std_ads_zones (machine_name, name, description, width, height, position, is_active, created_at, updated_at)
SELECT 'layer', 'Layer',
'Formato sobreposto ao conteúdo, exibido no centro da página. Fecha automaticamente após 5 segundos ou manualmente pelo utilizador.',
800, 600, 'center_overlay', 1, NOW(), NOW()
WHERE NOT EXISTS (SELECT 1 FROM std_ads_zones WHERE machine_name = 'layer');
");
$this->addSql("
INSERT INTO std_ads_zones (machine_name, name, description, width, height, position, is_active, created_at, updated_at)
SELECT 'xtrad', 'XTrad',
'Formato fixo no canto inferior direito, acompanha o scroll e possui botão de fechar.',
300, 250, 'bottom_right_fixed', 1, NOW(), NOW()
WHERE NOT EXISTS (SELECT 1 FROM std_ads_zones WHERE machine_name = 'xtrad');
");
$this->addSql("
INSERT INTO std_ads_zones (machine_name, name, description, width, height, position, is_active, created_at, updated_at)
SELECT 'splash', 'Splash',
'Formato de ecrã completo exibido apenas no primeiro acesso do utilizador (640x960).',
640, 960, 'fullscreen', 1, NOW(), NOW()
WHERE NOT EXISTS (SELECT 1 FROM std_ads_zones WHERE machine_name = 'splash');
");
}
public function down(Schema $schema): void
{
// rollback simplificado
$this->addSql("DELETE FROM std_ads_zones WHERE machine_name IN ('layer', 'xtrad', 'splash', 'billboard');");
$this->addSql("
INSERT INTO std_ads_zones (machine_name, name, description, width, height, position, is_active, created_at, updated_at)
VALUES ('mobile_banner', 'Mobile Banner', 'Banner otimizado para dispositivos móveis (320x50).', 320, 50, 'mobile', 1, NOW(), NOW());
");
}
}