<?php
declare(strict_types=1);
namespace DoctrineMigrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
final class Version20260714000000 extends AbstractMigration
{
public function getDescription(): string
{
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.';
}
public function up(Schema $schema): void
{
// Crear tabla de configuración de campos del formulario público.
$this->addSql("CREATE TABLE paes_campo_config (
id INT AUTO_INCREMENT NOT NULL,
campo_key VARCHAR(60) NOT NULL,
bloque VARCHAR(40) NOT NULL,
etiqueta VARCHAR(255) NOT NULL,
ayuda LONGTEXT DEFAULT NULL,
placeholder VARCHAR(255) DEFAULT NULL,
opciones_json LONGTEXT DEFAULT NULL,
obligatorio TINYINT(1) NOT NULL DEFAULT 1,
visible TINYINT(1) NOT NULL DEFAULT 1,
orden INT NOT NULL DEFAULT 0,
PRIMARY KEY(id),
UNIQUE KEY uniq_paes_campo_key (campo_key)
) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB");
// ---------------------------------------------------------------
// Seed: 11 campos editables con los valores que el template
// público tiene hoy hardcodeados. Mantener orden, etiquetas y
// opciones Choice idénticas para no romper comportamiento.
// ---------------------------------------------------------------
$rows = [
[
'campo_key' => 'region',
'bloque' => 'ubicacion',
'etiqueta' => 'Selecciona tu región',
'ayuda' => null,
'placeholder' => 'Selecciona una región',
'opciones_json' => null,
'obligatorio' => 1,
'visible' => 1,
'orden' => 10,
],
[
'campo_key' => 'comuna',
'bloque' => 'ubicacion',
'etiqueta' => 'Comuna',
'ayuda' => null,
'placeholder' => 'Selecciona una comuna',
'opciones_json' => null,
'obligatorio' => 1,
'visible' => 1,
'orden' => 20,
],
[
'campo_key' => 'colegio',
'bloque' => 'ubicacion',
'etiqueta' => 'Selecciona tu colegio',
'ayuda' => null,
'placeholder' => null,
'opciones_json' => null,
'obligatorio' => 0,
'visible' => 1,
'orden' => 30,
],
[
'campo_key' => 'otrocolegio',
'bloque' => 'ubicacion',
'etiqueta' => 'En caso de no encontrar tu colegio, ingrésalo aquí',
'ayuda' => null,
'placeholder' => null,
'opciones_json' => null,
'obligatorio' => 0,
'visible' => 1,
'orden' => 40,
],
[
'campo_key' => 'curso',
'bloque' => 'academico',
'etiqueta' => '¿En qué curso estás actualmente?',
'ayuda' => null,
'placeholder' => 'Seleccione una opción',
'opciones_json' => json_encode([
'Cuarto Medio' => 'Cuarto Medio',
'Tercero Medio' => 'Tercero Medio',
'Segundo Medio' => 'Segundo Medio',
'Primero Medio' => 'Primero Medio',
'Octavo Básico' => 'Octavo Básico',
'Séptimo Básico' => 'Séptimo Básico',
'Egresado' => 'Egresado',
'Estudiante Internacional' => 'Estudiante Internacional',
]),
'obligatorio' => 1,
'visible' => 1,
'orden' => 50,
],
[
'campo_key' => 'tecnico',
'bloque' => 'academico',
'etiqueta' => '¿Cursaste o estás cursando tercero y cuarto medio en modalidad Técnico Profesional?',
'ayuda' => null,
'placeholder' => 'Seleccione una opción',
'opciones_json' => json_encode([
'Si' => 'Si',
'No' => 'No',
]),
'obligatorio' => 0,
'visible' => 1,
'orden' => 60,
],
[
'campo_key' => 'formato',
'bloque' => 'ensayo',
'etiqueta' => '¿En cuál formato te interesa rendir el Ensayo?',
'ayuda' => null,
'placeholder' => 'Seleccione una opción',
'opciones_json' => json_encode([
'Online' => 'Online',
'Presencial' => 'Presencial',
]),
'obligatorio' => 1,
'visible' => 1,
'orden' => 70,
],
[
'campo_key' => 'campus',
'bloque' => 'ensayo',
'etiqueta' => '¿En qué sede quieres rendirlo?',
'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.',
'placeholder' => 'Seleccione una opción',
'opciones_json' => null,
'obligatorio' => 1,
'visible' => 1,
'orden' => 80,
],
[
'campo_key' => 'bloque_adecuaciones',
'bloque' => 'adecuaciones',
'etiqueta' => '¿Te encuentras en situación de discapacidad?',
'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.',
'placeholder' => null,
'opciones_json' => null,
'obligatorio' => 0,
'visible' => 1,
'orden' => 90,
],
[
'campo_key' => 'carrera',
'bloque' => 'carreras',
'etiqueta' => '¿Cuáles son tus carreras de interés?',
'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',
'placeholder' => null,
'opciones_json' => null,
'obligatorio' => 0,
'visible' => 1,
'orden' => 100,
],
[
'campo_key' => 'otracarrera',
'bloque' => 'carreras',
'etiqueta' => 'No está en la UC',
'ayuda' => null,
'placeholder' => null,
'opciones_json' => null,
'obligatorio' => 0,
'visible' => 1,
'orden' => 110,
],
];
foreach ($rows as $r) {
$this->addSql(
"INSERT INTO paes_campo_config
(campo_key, bloque, etiqueta, ayuda, placeholder, opciones_json, obligatorio, visible, orden)
VALUES (:k, :b, :e, :a, :p, :o, :ob, :v, :or)",
[
'k' => $r['campo_key'],
'b' => $r['bloque'],
'e' => $r['etiqueta'],
'a' => $r['ayuda'],
'p' => $r['placeholder'],
'o' => $r['opciones_json'],
'ob' => $r['obligatorio'],
'v' => $r['visible'],
'or' => $r['orden'],
]
);
}
}
public function down(Schema $schema): void
{
$this->addSql('DROP TABLE paes_campo_config');
}
}