Skip to content

Commit 08e934b

Browse files
committed
fix(question,section): duplication failure
Signed-off-by: Thierry Bugier <[email protected]>
1 parent 58e0101 commit 08e934b

File tree

4 files changed

+42
-8
lines changed

4 files changed

+42
-8
lines changed

inc/condition.class.php

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,6 @@ public static function import(PluginFormcreatorLinker $linker, $input = [], $con
9494
throw new ImportFailureException('UUID or ID is mandatory');
9595
}
9696

97-
//$itemtypeFk = $input['itemtype']::getForeignKeyField();
98-
//$questionFk = PluginFormcreatorQuestion::getForeignKeyField();
9997
$input['items_id'] = $containerId;
10098

10199
$item = new self();
@@ -119,10 +117,16 @@ public static function import(PluginFormcreatorLinker $linker, $input = [], $con
119117
}
120118

121119
// set ID for linked objects
122-
$linked = $linker->getObject($input['plugin_formcreator_questions_id'], $input['itemtype']);
120+
$linked = $linker->getObject($input['plugin_formcreator_questions_id'], PluginFormcreatorQuestion::class);
123121
if ($linked === false) {
124-
$linker->postpone($input[$idKey], $item->getType(), $input, $containerId);
125-
return false;
122+
$linked = new PluginFormcreatorQuestion();
123+
$linked->getFromDBByCrit([
124+
$idKey => $input['plugin_formcreator_questions_id']
125+
]);
126+
if ($linked->isNewItem()) {
127+
$linker->postpone($input[$idKey], $item->getType(), $input, $containerId);
128+
return false;
129+
}
126130
}
127131
$input['plugin_formcreator_questions_id'] = $linked->getID();
128132

@@ -170,6 +174,13 @@ public function export($remove_uuid = false) {
170174
$question = new PluginFormcreatorQuestion();
171175
$question->getFromDB($condition['plugin_formcreator_questions_id']);
172176
$condition['plugin_formcreator_questions_id'] = $question->fields['uuid'];
177+
$containerType = $input['itemtype'];
178+
if (!class_exists($containerType) || !is_subclass_of($containerType, PluginFormcreatorConditionnableInterface::class)) {
179+
return false;
180+
}
181+
$container = new $containerType();
182+
$container->getFromDB($condition['items_id']);
183+
$condition['items_id'] = $container->fields['uuid'];
173184
}
174185
unset($condition[$idToRemove]);
175186

inc/questiondependency.class.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,14 @@ public static function import(PluginFormcreatorLinker $linker, $input = [], $con
171171
// set ID for linked objects
172172
$linked = $linker->getObject($input['plugin_formcreator_questions_id_2'], PluginFormcreatorQuestion::class);
173173
if ($linked === false) {
174-
$linker->postpone($input[$idKey], $item->getType(), $input, $containerId);
175-
return false;
174+
$linked = new PluginFormcreatorQuestion();
175+
$linked->getFromDBByCrit([
176+
$idKey => $input['plugin_formcreator_questions_id']
177+
]);
178+
if ($linked->isNewItem()) {
179+
$linker->postpone($input[$idKey], $item->getType(), $input, $containerId);
180+
return false;
181+
}
176182
}
177183
$input['plugin_formcreator_questions_id_2'] = $linked->getID();
178184

inc/section.class.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ public static function import(PluginFormcreatorLinker $linker, $input = [], $con
260260
// add the section to the linker
261261
$linker->addObject($originalId, $item);
262262

263+
// Import the questions
263264
if (isset($input['_questions'])) {
264265
// sort questions by order
265266
usort($input['_questions'], function ($a, $b) {
@@ -274,6 +275,13 @@ public static function import(PluginFormcreatorLinker $linker, $input = [], $con
274275
}
275276
}
276277

278+
// Import conditions
279+
if (isset($input['_conditions'])) {
280+
foreach ($input['_conditions'] as $condition) {
281+
PluginFormcreatorCondition::import($linker, $condition, $itemId);
282+
}
283+
}
284+
277285
return $itemId;
278286
}
279287

@@ -284,7 +292,7 @@ public function export($remove_uuid = false) {
284292
return false;
285293
}
286294

287-
$section = $this->fields;
295+
$section = $this->fields;
288296

289297
// remove key and fk
290298
$formFk = PluginFormcreatorForm::getForeignKeyField();
@@ -306,6 +314,14 @@ public function export($remove_uuid = false) {
306314
}
307315
}
308316

317+
// get question conditions
318+
$section['_conditions'] = [];
319+
$condition = new PluginFormcreatorCondition();
320+
$all_conditions = $condition->getConditionsFromItem($this);
321+
foreach ($all_conditions as $condition) {
322+
$section['_conditions'][] = $condition->export($remove_uuid);
323+
}
324+
309325
// remove ID or UUID
310326
$idToRemove = 'id';
311327
if ($remove_uuid) {

tests/suite-unit/PluginFormcreatorSection.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ public function testExport() {
158158
];
159159
$extraFields = [
160160
'_questions',
161+
'_conditions',
161162
];
162163
$this->array($output)
163164
->hasKeys($fieldsWithoutID + $extraFields + ['uuid'])

0 commit comments

Comments
 (0)