migrations/Version20260915144436.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * Campaign.editForm: formulario cuya definición JSON se considera la vigente de la campaña.
  8.  *
  9.  * Gobierna qué campos se muestran (y en qué orden y con qué etiquetas) en el detalle del
  10.  * registro y en la exportación, en lugar de las etiquetas que quedaron guardadas en cada
  11.  * FormLeadData en el momento del envío.
  12.  */
  13. final class Version20260915144436 extends AbstractMigration
  14. {
  15.     public function getDescription(): string
  16.     {
  17.         return 'Campaign.editForm: formulario cuya definición JSON es la vigente de la campaña';
  18.     }
  19.     public function up(Schema $schema): void
  20.     {
  21.         $this->addSql('ALTER TABLE campaign ADD edit_form_id INT DEFAULT NULL');
  22.         $this->addSql('ALTER TABLE campaign ADD CONSTRAINT FK_1F1512DDE50820C7 FOREIGN KEY (edit_form_id) REFERENCES form (id) ON DELETE SET NULL');
  23.         $this->addSql('CREATE INDEX IDX_1F1512DDE50820C7 ON campaign (edit_form_id)');
  24.         // Preasignación best-effort para no obligar a configurarlo a mano en cada entorno:
  25.         // se busca, por campaña, el formulario de renovación de la Carta más reciente.
  26.         // El LIKE cubre también los ficheros que sube el admin, que llevan hash en el nombre
  27.         // (carta-renovacion-<contenthash>.json). Si no hay coincidencia no hace nada y la
  28.         // campaña se queda sin formulario vigente (comportamiento anterior).
  29.         $this->addSql(<<<'SQL'
  30.             UPDATE campaign c
  31.             SET c.edit_form_id = (
  32.                 SELECT MAX(f.id)
  33.                 FROM form f
  34.                 WHERE f.campaign_id = c.id
  35.                   AND f.type = 'edit'
  36.                   AND f.active = 1
  37.                   AND f.definition_file LIKE 'carta-renovacion%'
  38.             )
  39.             WHERE c.edit_form_id IS NULL
  40.         SQL);
  41.     }
  42.     public function down(Schema $schema): void
  43.     {
  44.         $this->addSql('ALTER TABLE campaign DROP FOREIGN KEY FK_1F1512DDE50820C7');
  45.         $this->addSql('DROP INDEX IDX_1F1512DDE50820C7 ON campaign');
  46.         $this->addSql('ALTER TABLE campaign DROP edit_form_id');
  47.     }
  48. }