|
5 | 5 | use Doctrine\DBAL\Schema\Schema; |
6 | 6 | use Doctrine\Migrations\AbstractMigration; |
7 | 7 | use Doctrine\Migrations\Exception\MigrationNotExecuted; |
8 | | -use Symfony\Component\Filesystem\Filesystem; |
9 | 8 | use Symfony\Component\Finder\Finder; |
10 | 9 | use Symfony\Component\Yaml\Yaml; |
11 | 10 |
|
@@ -58,14 +57,55 @@ public function up(Schema $schema): void |
58 | 57 | $conditionalLogic = $data['conditional_logic'] ?? []; |
59 | 58 | $fields = $data['fields'] ?? []; |
60 | 59 |
|
| 60 | + $fixedFields = $this->ensureSymfony5Compatibility($fields); |
| 61 | + |
61 | 62 | $this->addSql(sprintf('UPDATE formbuilder_forms SET `configuration` = "%s" WHERE `id` = %d', addslashes(serialize($configuration)), $formDefinitionId)); |
62 | 63 | $this->addSql(sprintf('UPDATE formbuilder_forms SET `conditionalLogic` = "%s" WHERE `id` = %d', addslashes(serialize($conditionalLogic)), $formDefinitionId)); |
63 | | - $this->addSql(sprintf('UPDATE formbuilder_forms SET `fields` = "%s" WHERE `id` = %d', addslashes(serialize($fields)), $formDefinitionId)); |
| 64 | + $this->addSql(sprintf('UPDATE formbuilder_forms SET `fields` = "%s" WHERE `id` = %d', addslashes(serialize($fixedFields)), $formDefinitionId)); |
64 | 65 | } |
65 | 66 | } |
66 | 67 |
|
67 | 68 | public function down(Schema $schema): void |
68 | 69 | { |
69 | 70 | // disabled |
70 | 71 | } |
| 72 | + |
| 73 | + private function ensureSymfony5Compatibility(array $fields): array |
| 74 | + { |
| 75 | + $fixedFields = []; |
| 76 | + foreach ($fields as $field) { |
| 77 | + if ($field['type'] === 'choice') { |
| 78 | + $this->fixChoiceField($field); |
| 79 | + } |
| 80 | + |
| 81 | + if (isset($field['constraints'])) { |
| 82 | + $this->fixConstraints($field); |
| 83 | + } |
| 84 | + |
| 85 | + $fixedFields[] = $field; |
| 86 | + } |
| 87 | + |
| 88 | + return $fixedFields; |
| 89 | + } |
| 90 | + |
| 91 | + private function fixChoiceField(array &$field): void |
| 92 | + { |
| 93 | + if (array_key_exists('choice_attr', $field['options'])) { |
| 94 | + return; |
| 95 | + } |
| 96 | + |
| 97 | + $field['options']['choice_attr'] = []; |
| 98 | + } |
| 99 | + |
| 100 | + private function fixConstraints(array &$field): void |
| 101 | + { |
| 102 | + for ($i = 0; $i < count($field['constraints']); $i++) { |
| 103 | + |
| 104 | + if ($field['constraints'][$i]['type'] !== 'email') { |
| 105 | + continue; |
| 106 | + } |
| 107 | + |
| 108 | + unset($field['constraints'][$i]['config']['checkMX'], $field['constraints'][$i]['config']['checkHost']); |
| 109 | + } |
| 110 | + } |
71 | 111 | } |
0 commit comments