migrations/Version20260714000000.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. final class Version20260714000000 extends AbstractMigration
  7. {
  8.     public function getDescription(): string
  9.     {
  10.         return 'PAES-07 (editor dinámico): crea tabla paes_campo_config para editar etiquetas, ayudas, placeholders, opciones Choice, visibilidad y obligatoriedad de las preguntas del formulario público. Sembrado con los 11 campos editables actuales.';
  11.     }
  12.     public function up(Schema $schema): void
  13.     {
  14.         // Crear tabla de configuración de campos del formulario público.
  15.         $this->addSql("CREATE TABLE paes_campo_config (
  16.             id INT AUTO_INCREMENT NOT NULL,
  17.             campo_key VARCHAR(60) NOT NULL,
  18.             bloque VARCHAR(40) NOT NULL,
  19.             etiqueta VARCHAR(255) NOT NULL,
  20.             ayuda LONGTEXT DEFAULT NULL,
  21.             placeholder VARCHAR(255) DEFAULT NULL,
  22.             opciones_json LONGTEXT DEFAULT NULL,
  23.             obligatorio TINYINT(1) NOT NULL DEFAULT 1,
  24.             visible TINYINT(1) NOT NULL DEFAULT 1,
  25.             orden INT NOT NULL DEFAULT 0,
  26.             PRIMARY KEY(id),
  27.             UNIQUE KEY uniq_paes_campo_key (campo_key)
  28.         ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB");
  29.         // ---------------------------------------------------------------
  30.         // Seed: 11 campos editables con los valores que el template
  31.         // público tiene hoy hardcodeados. Mantener orden, etiquetas y
  32.         // opciones Choice idénticas para no romper comportamiento.
  33.         // ---------------------------------------------------------------
  34.         $rows = [
  35.             [
  36.                 'campo_key' => 'region',
  37.                 'bloque' => 'ubicacion',
  38.                 'etiqueta' => 'Selecciona tu región',
  39.                 'ayuda' => null,
  40.                 'placeholder' => 'Selecciona una región',
  41.                 'opciones_json' => null,
  42.                 'obligatorio' => 1,
  43.                 'visible' => 1,
  44.                 'orden' => 10,
  45.             ],
  46.             [
  47.                 'campo_key' => 'comuna',
  48.                 'bloque' => 'ubicacion',
  49.                 'etiqueta' => 'Comuna',
  50.                 'ayuda' => null,
  51.                 'placeholder' => 'Selecciona una comuna',
  52.                 'opciones_json' => null,
  53.                 'obligatorio' => 1,
  54.                 'visible' => 1,
  55.                 'orden' => 20,
  56.             ],
  57.             [
  58.                 'campo_key' => 'colegio',
  59.                 'bloque' => 'ubicacion',
  60.                 'etiqueta' => 'Selecciona tu colegio',
  61.                 'ayuda' => null,
  62.                 'placeholder' => null,
  63.                 'opciones_json' => null,
  64.                 'obligatorio' => 0,
  65.                 'visible' => 1,
  66.                 'orden' => 30,
  67.             ],
  68.             [
  69.                 'campo_key' => 'otrocolegio',
  70.                 'bloque' => 'ubicacion',
  71.                 'etiqueta' => 'En caso de no encontrar tu colegio, ingrésalo aquí',
  72.                 'ayuda' => null,
  73.                 'placeholder' => null,
  74.                 'opciones_json' => null,
  75.                 'obligatorio' => 0,
  76.                 'visible' => 1,
  77.                 'orden' => 40,
  78.             ],
  79.             [
  80.                 'campo_key' => 'curso',
  81.                 'bloque' => 'academico',
  82.                 'etiqueta' => '¿En qué curso estás actualmente?',
  83.                 'ayuda' => null,
  84.                 'placeholder' => 'Seleccione una opción',
  85.                 'opciones_json' => json_encode([
  86.                     'Cuarto Medio' => 'Cuarto Medio',
  87.                     'Tercero Medio' => 'Tercero Medio',
  88.                     'Segundo Medio' => 'Segundo Medio',
  89.                     'Primero Medio' => 'Primero Medio',
  90.                     'Octavo Básico' => 'Octavo Básico',
  91.                     'Séptimo Básico' => 'Séptimo Básico',
  92.                     'Egresado' => 'Egresado',
  93.                     'Estudiante Internacional' => 'Estudiante Internacional',
  94.                 ]),
  95.                 'obligatorio' => 1,
  96.                 'visible' => 1,
  97.                 'orden' => 50,
  98.             ],
  99.             [
  100.                 'campo_key' => 'tecnico',
  101.                 'bloque' => 'academico',
  102.                 'etiqueta' => '¿Cursaste o estás cursando tercero y cuarto medio en modalidad Técnico Profesional?',
  103.                 'ayuda' => null,
  104.                 'placeholder' => 'Seleccione una opción',
  105.                 'opciones_json' => json_encode([
  106.                     'Si' => 'Si',
  107.                     'No' => 'No',
  108.                 ]),
  109.                 'obligatorio' => 0,
  110.                 'visible' => 1,
  111.                 'orden' => 60,
  112.             ],
  113.             [
  114.                 'campo_key' => 'formato',
  115.                 'bloque' => 'ensayo',
  116.                 'etiqueta' => '¿En cuál formato te interesa rendir el Ensayo?',
  117.                 'ayuda' => null,
  118.                 'placeholder' => 'Seleccione una opción',
  119.                 'opciones_json' => json_encode([
  120.                     'Online' => 'Online',
  121.                     'Presencial' => 'Presencial',
  122.                 ]),
  123.                 'obligatorio' => 1,
  124.                 'visible' => 1,
  125.                 'orden' => 70,
  126.             ],
  127.             [
  128.                 'campo_key' => 'campus',
  129.                 'bloque' => 'ensayo',
  130.                 'etiqueta' => '¿En qué sede quieres rendirlo?',
  131.                 'ayuda' => 'El ensayo presencial se realizará en las fechas y sedes indicadas sobre este formulario. Si eliges modalidad Online, este campo se oculta automáticamente.',
  132.                 'placeholder' => 'Seleccione una opción',
  133.                 'opciones_json' => null,
  134.                 'obligatorio' => 1,
  135.                 'visible' => 1,
  136.                 'orden' => 80,
  137.             ],
  138.             [
  139.                 'campo_key' => 'bloque_adecuaciones',
  140.                 'bloque' => 'adecuaciones',
  141.                 'etiqueta' => '¿Te encuentras en situación de discapacidad?',
  142.                 'ayuda' => 'Mostrar u ocultar todo el bloque de adecuaciones. Las reglas de sede (PAES-02) y de ventana de carga (PAES-03) se siguen aplicando aunque este bloque esté activo.',
  143.                 'placeholder' => null,
  144.                 'opciones_json' => null,
  145.                 'obligatorio' => 0,
  146.                 'visible' => 1,
  147.                 'orden' => 90,
  148.             ],
  149.             [
  150.                 'campo_key' => 'carrera',
  151.                 'bloque' => 'carreras',
  152.                 'etiqueta' => '¿Cuáles son tus carreras de interés?',
  153.                 'ayuda' => 'Marca todas las opciones que quieras. Encuentra más información de nuestras carreras, sus requisitos, ponderaciones y mucho más en admisión.uc.cl',
  154.                 'placeholder' => null,
  155.                 'opciones_json' => null,
  156.                 'obligatorio' => 0,
  157.                 'visible' => 1,
  158.                 'orden' => 100,
  159.             ],
  160.             [
  161.                 'campo_key' => 'otracarrera',
  162.                 'bloque' => 'carreras',
  163.                 'etiqueta' => 'No está en la UC',
  164.                 'ayuda' => null,
  165.                 'placeholder' => null,
  166.                 'opciones_json' => null,
  167.                 'obligatorio' => 0,
  168.                 'visible' => 1,
  169.                 'orden' => 110,
  170.             ],
  171.         ];
  172.         foreach ($rows as $r) {
  173.             $this->addSql(
  174.                 "INSERT INTO paes_campo_config
  175.                     (campo_key, bloque, etiqueta, ayuda, placeholder, opciones_json, obligatorio, visible, orden)
  176.                  VALUES (:k, :b, :e, :a, :p, :o, :ob, :v, :or)",
  177.                 [
  178.                     'k' => $r['campo_key'],
  179.                     'b' => $r['bloque'],
  180.                     'e' => $r['etiqueta'],
  181.                     'a' => $r['ayuda'],
  182.                     'p' => $r['placeholder'],
  183.                     'o' => $r['opciones_json'],
  184.                     'ob' => $r['obligatorio'],
  185.                     'v' => $r['visible'],
  186.                     'or' => $r['orden'],
  187.                 ]
  188.             );
  189.         }
  190.     }
  191.     public function down(Schema $schema): void
  192.     {
  193.         $this->addSql('DROP TABLE paes_campo_config');
  194.     }
  195. }