<?php
declare(strict_types=1);
namespace PPSDKDoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Auto-generated Migration: Please modify to your needs!
*/
final class Version20220216131943_PPSDK117_WebVariants extends AbstractMigration
{
public function getDescription(): string
{
return 'Migrates related entities from WebHomepage to WebVariant';
}
public function up(Schema $schema): void
{
// Drop reference to webs_homepages
$this->addSql('ALTER TABLE banner_positions DROP FOREIGN KEY FK_74FAADC0571EDDA');
// Create webs_variants and related tables
$this->addSql('CREATE TABLE webs_variants (id INT AUTO_INCREMENT NOT NULL, web_id INT NOT NULL, business_partner_id INT DEFAULT NULL, created_by_admin_id INT DEFAULT NULL, updated_by_admin_id INT DEFAULT NULL, deleted_by_admin_id INT DEFAULT NULL, url_slug VARCHAR(255) NOT NULL, is_default TINYINT(1) DEFAULT 1 NOT NULL, shops_count INT NOT NULL, promotions_count INT NOT NULL, remember_on_registration TINYINT(1) NOT NULL, homepage_bullets LONGTEXT NOT NULL COMMENT \'(DC2Type:json)\', h1_title VARCHAR(255) NOT NULL, created_when DATETIME NOT NULL, updated_when DATETIME NOT NULL, deleted TINYINT(1) NOT NULL, not_deleted TINYINT(1) DEFAULT NULL, deleted_when DATETIME DEFAULT NULL, name VARCHAR(255) NOT NULL, identifier VARCHAR(40) NOT NULL, logo_attached TINYINT(1) NOT NULL, logo_attached_when DATETIME DEFAULT NULL, logo_url VARCHAR(255) NOT NULL, logo_storage_path VARCHAR(255) NOT NULL, logo_file_size INT NOT NULL, logo_mime_type VARCHAR(40) NOT NULL, logo_width INT NOT NULL, logo_height INT NOT NULL, logo_alt VARCHAR(255) DEFAULT \'\' NOT NULL, small_logo_attached TINYINT(1) NOT NULL, small_logo_attached_when DATETIME DEFAULT NULL, small_logo_url VARCHAR(255) NOT NULL, small_logo_storage_path VARCHAR(255) NOT NULL, small_logo_file_size INT NOT NULL, small_logo_mime_type VARCHAR(40) NOT NULL, small_logo_width INT NOT NULL, small_logo_height INT NOT NULL, small_logo_alt VARCHAR(255) DEFAULT \'\' NOT NULL, seo_meta_title VARCHAR(255) NOT NULL, seo_meta_robots VARCHAR(255) NOT NULL, seo_meta_description LONGTEXT NOT NULL, seo_meta_keywords LONGTEXT NOT NULL, seo_canonical VARCHAR(255) NOT NULL, seo_sitemap_change_frequency VARCHAR(20) DEFAULT \'daily\' NOT NULL, og_title VARCHAR(255) NOT NULL, og_description VARCHAR(255) NOT NULL, og_image_attached TINYINT(1) NOT NULL, og_image_attached_when DATETIME DEFAULT NULL, og_image_url VARCHAR(255) NOT NULL, og_image_storage_path VARCHAR(255) NOT NULL, og_image_file_size INT NOT NULL, og_image_mime_type VARCHAR(40) NOT NULL, og_image_width INT NOT NULL, og_image_height INT NOT NULL, og_image_alt VARCHAR(255) DEFAULT \'\' NOT NULL, twitter_card VARCHAR(255) NOT NULL, twitter_title VARCHAR(255) NOT NULL, twitter_description VARCHAR(255) NOT NULL, twitter_image_attached TINYINT(1) NOT NULL, twitter_image_attached_when DATETIME DEFAULT NULL, twitter_image_url VARCHAR(255) NOT NULL, twitter_image_storage_path VARCHAR(255) NOT NULL, twitter_image_file_size INT NOT NULL, twitter_image_mime_type VARCHAR(40) NOT NULL, twitter_image_width INT NOT NULL, twitter_image_height INT NOT NULL, twitter_image_alt VARCHAR(255) DEFAULT \'\' NOT NULL, INDEX IDX_1695340BFE18474D (web_id), INDEX IDX_1695340B5330F055 (business_partner_id), INDEX IDX_1695340B64F1F4EE (created_by_admin_id), INDEX IDX_1695340B681D6437 (updated_by_admin_id), INDEX IDX_1695340B54C5E183 (deleted_by_admin_id), INDEX is_default (web_id, is_default), UNIQUE INDEX identifier (identifier, not_deleted), UNIQUE INDEX url_slug (web_id, url_slug, not_deleted), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
$this->addSql('CREATE TABLE webs_variants_banner_positions (web_variant_id INT NOT NULL, banner_position_id INT NOT NULL, INDEX IDX_EA8A63AFBA0913A3 (web_variant_id), INDEX IDX_EA8A63AFEDF3A435 (banner_position_id), PRIMARY KEY(web_variant_id, banner_position_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
$this->addSql('CREATE TABLE webs_variants_homepage_faq_items (id INT AUTO_INCREMENT NOT NULL, web_variant_id INT NOT NULL, faq_item_id INT NOT NULL, listing_order INT NOT NULL, INDEX IDX_52720A93BA0913A3 (web_variant_id), INDEX IDX_52720A9391E3905 (faq_item_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
$this->addSql('CREATE TABLE webs_variants_homepage_promotions (id INT AUTO_INCREMENT NOT NULL, web_variant_id INT NOT NULL, promotion_id INT NOT NULL, listing_order INT NOT NULL, INDEX IDX_FB0D8351BA0913A3 (web_variant_id), INDEX IDX_FB0D8351139DF194 (promotion_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
$this->addSql('CREATE TABLE webs_variants_homepage_shops (id INT AUTO_INCREMENT NOT NULL, web_variant_id INT NOT NULL, shop_id INT NOT NULL, listing_order INT NOT NULL, INDEX IDX_2C230810BA0913A3 (web_variant_id), INDEX IDX_2C2308104D16C4DD (shop_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB');
$this->addSql('ALTER TABLE webs_variants ADD CONSTRAINT FK_1695340BFE18474D FOREIGN KEY (web_id) REFERENCES webs (id)');
$this->addSql('ALTER TABLE webs_variants ADD CONSTRAINT FK_1695340B5330F055 FOREIGN KEY (business_partner_id) REFERENCES business_partners (id)');
$this->addSql('ALTER TABLE webs_variants ADD CONSTRAINT FK_1695340B64F1F4EE FOREIGN KEY (created_by_admin_id) REFERENCES administrators (id)');
$this->addSql('ALTER TABLE webs_variants ADD CONSTRAINT FK_1695340B681D6437 FOREIGN KEY (updated_by_admin_id) REFERENCES administrators (id)');
$this->addSql('ALTER TABLE webs_variants ADD CONSTRAINT FK_1695340B54C5E183 FOREIGN KEY (deleted_by_admin_id) REFERENCES administrators (id)');
$this->addSql('ALTER TABLE webs_variants_banner_positions ADD CONSTRAINT FK_EA8A63AFBA0913A3 FOREIGN KEY (web_variant_id) REFERENCES webs_variants (id)');
$this->addSql('ALTER TABLE webs_variants_banner_positions ADD CONSTRAINT FK_EA8A63AFEDF3A435 FOREIGN KEY (banner_position_id) REFERENCES banner_positions (id)');
$this->addSql('ALTER TABLE webs_variants_homepage_faq_items ADD CONSTRAINT FK_52720A93BA0913A3 FOREIGN KEY (web_variant_id) REFERENCES webs_variants (id)');
$this->addSql('ALTER TABLE webs_variants_homepage_faq_items ADD CONSTRAINT FK_52720A9391E3905 FOREIGN KEY (faq_item_id) REFERENCES faq_items (id)');
$this->addSql('ALTER TABLE webs_variants_homepage_promotions ADD CONSTRAINT FK_FB0D8351BA0913A3 FOREIGN KEY (web_variant_id) REFERENCES webs_variants (id)');
$this->addSql('ALTER TABLE webs_variants_homepage_promotions ADD CONSTRAINT FK_FB0D8351139DF194 FOREIGN KEY (promotion_id) REFERENCES promotions (id)');
$this->addSql('ALTER TABLE webs_variants_homepage_shops ADD CONSTRAINT FK_2C230810BA0913A3 FOREIGN KEY (web_variant_id) REFERENCES webs_variants (id)');
$this->addSql('ALTER TABLE webs_variants_homepage_shops ADD CONSTRAINT FK_2C2308104D16C4DD FOREIGN KEY (shop_id) REFERENCES shops (id)');
// Migrate data from webs_homepages
$this->addSql("
INSERT INTO webs_variants
(id, web_id, business_partner_id, created_by_admin_id, updated_by_admin_id,
deleted_by_admin_id, url_slug, is_default, shops_count, promotions_count,
remember_on_registration, h1_title, homepage_bullets, created_when, updated_when, deleted, not_deleted,
deleted_when, name, identifier, logo_attached, logo_attached_when, logo_url,
logo_storage_path, logo_file_size, logo_mime_type, logo_width, logo_height, logo_alt,
small_logo_attached, small_logo_attached_when, small_logo_url, small_logo_storage_path,
small_logo_file_size, small_logo_mime_type, small_logo_width, small_logo_height,
small_logo_alt, seo_meta_title, seo_meta_robots, seo_meta_description, seo_meta_keywords,
seo_canonical, seo_sitemap_change_frequency, og_title, og_description, og_image_attached,
og_image_attached_when, og_image_url, og_image_storage_path, og_image_file_size,
og_image_mime_type, og_image_width, og_image_height, og_image_alt, twitter_card,
twitter_title, twitter_description, twitter_image_attached, twitter_image_attached_when,
twitter_image_url, twitter_image_storage_path, twitter_image_file_size,
twitter_image_mime_type, twitter_image_width, twitter_image_height, twitter_image_alt)
SELECT
id, web_id, business_partner_id, created_by_admin_id, updated_by_admin_id,
deleted_by_admin_id, '_default_', 1, shops_count, promotions_count,
0, h1_title, '[]', created_when, updated_when, deleted, not_deleted,
deleted_when, (SELECT name FROM webs WHERE id = web_id), (SELECT identifier FROM webs WHERE id = web_id), logo_attached, logo_attached_when, logo_url,
logo_storage_path, logo_file_size, logo_mime_type, logo_width, logo_height, logo_alt,
small_logo_attached, small_logo_attached_when, small_logo_url, small_logo_storage_path,
small_logo_file_size, small_logo_mime_type, small_logo_width, small_logo_height,
small_logo_alt, seo_meta_title, seo_meta_robots, seo_meta_description, seo_meta_keywords,
seo_canonical, seo_sitemap_change_frequency, og_title, og_description, og_image_attached,
og_image_attached_when, og_image_url, og_image_storage_path, og_image_file_size,
og_image_mime_type, og_image_width, og_image_height, og_image_alt, twitter_card,
twitter_title, twitter_description, twitter_image_attached, twitter_image_attached_when,
twitter_image_url, twitter_image_storage_path, twitter_image_file_size,
twitter_image_mime_type, twitter_image_width, twitter_image_height, twitter_image_alt
FROM webs_homepages;
");
$this->addSql(<<<SQL
UPDATE webs_variants
SET homepage_bullets = '["Peníze získáte zpět formou cashbacku","Největší cashback portál v České republice","Neplatíte žádné poplatky!"]'
WHERE id=1;
SQL);
$this->addSql(<<<SQL
UPDATE webs_variants
SET homepage_bullets = '["Peniaze získate späť formou cashbacku","Neplatíte žiadne poplatky!","Medzi zákazníkov už sme rozdelili 7 200 000 €"]'
WHERE id=2;
SQL);
// Drop webs_homepages
// $this->addSql('DROP TABLE webs_homepages');
// Update banner_positions
$this->addSql("
INSERT INTO webs_variants_banner_positions (web_variant_id, banner_position_id)
SELECT p.web_id, p.id FROM banner_positions p WHERE p.user_defined = 0
");
$this->addSql('DROP INDEX IDX_74FAADC0571EDDA ON banner_positions');
$this->addSql('DROP INDEX position ON banner_positions');
$this->addSql('ALTER TABLE banner_positions DROP homepage_id');
$this->addSql('CREATE INDEX position ON banner_positions (web_id, position, not_deleted)');
// Update FAQ items
$this->addSql("
INSERT INTO webs_variants_homepage_faq_items (web_variant_id, faq_item_id, listing_order)
SELECT f.web_id, f.id, f.homepage_listing_order FROM faq_items f WHERE f.show_on_homepage = 1
");
$this->addSql('ALTER TABLE faq_items DROP show_on_homepage, DROP homepage_listing_order');
// Update promotions
$this->addSql('ALTER TABLE promotions CHANGE show_on_homepage prefer_on_homepage TINYINT(1) NOT NULL, CHANGE homepage_listing_order homepage_preference_order INT NOT NULL');
// Update shops
$this->addSql('ALTER TABLE shops CHANGE show_on_homepage prefer_on_homepage TINYINT(1) NOT NULL, CHANGE homepage_listing_order homepage_preference_order INT NOT NULL');
// Update users
$this->addSql('ALTER TABLE users ADD web_variant_id INT DEFAULT NULL');
$this->addSql('ALTER TABLE users ADD CONSTRAINT FK_1483A5E9BA0913A3 FOREIGN KEY (web_variant_id) REFERENCES webs_variants (id)');
$this->addSql('CREATE INDEX IDX_1483A5E9BA0913A3 ON users (web_variant_id)');
}
public function down(Schema $schema): void
{
}
}