Skip to content

Commit 3832e74

Browse files
grizzly.webSebastian Müllersolverat
authored
ensure migration of form configs will be symfony5 compatible (#310)
* ensure migration of form configs will be symfony5 compatible * add return types and upgrade notes Co-authored-by: Sebastian Müller <s.mueller@anymotion.de> Co-authored-by: Stefan Hagspiel <shagspiel@dachcom.ch>
1 parent 4cab9fc commit 3832e74

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

UPGRADE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#### Version 4.1.0
44
- **[NEW FEATURE]**: API Output channel [#290](https://github.com/dachcom-digital/pimcore-formbuilder/issues/301)
55
- **[NEW FEATURE]**: API Output channel Field Transformer
6+
- **[BUGFIX]**: ensure migration of form configs will be symfony5 compatible [@grizzlydotweb](https://github.com/dachcom-digital/pimcore-formbuilder/pull/310)
67

78
## Version 4.0.2
89
- [ENHANCEMENT] enable placeholder in cc and bcc field in email output workflow [@frithjof](https://github.com/dachcom-digital/pimcore-formbuilder/pull/305)

src/FormBuilderBundle/Migrations/Version20211011171530.php

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
use Doctrine\DBAL\Schema\Schema;
66
use Doctrine\Migrations\AbstractMigration;
77
use Doctrine\Migrations\Exception\MigrationNotExecuted;
8-
use Symfony\Component\Filesystem\Filesystem;
98
use Symfony\Component\Finder\Finder;
109
use Symfony\Component\Yaml\Yaml;
1110

@@ -58,14 +57,55 @@ public function up(Schema $schema): void
5857
$conditionalLogic = $data['conditional_logic'] ?? [];
5958
$fields = $data['fields'] ?? [];
6059

60+
$fixedFields = $this->ensureSymfony5Compatibility($fields);
61+
6162
$this->addSql(sprintf('UPDATE formbuilder_forms SET `configuration` = "%s" WHERE `id` = %d', addslashes(serialize($configuration)), $formDefinitionId));
6263
$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));
6465
}
6566
}
6667

6768
public function down(Schema $schema): void
6869
{
6970
// disabled
7071
}
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+
}
71111
}

0 commit comments

Comments
 (0)