Skip to content

Commit d9a7149

Browse files
timedin-demickenordin
authored andcommitted
fix: trigger question options
Signed-off-by: TimedIn <git@timedin.net>
1 parent c5e3d3c commit d9a7149

3 files changed

Lines changed: 42 additions & 35 deletions

File tree

lib/Service/FormsService.php

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -898,42 +898,28 @@ public function areExtraSettingsValid(array $extraSettings, string $questionType
898898
return true;
899899
}
900900

901-
// Ensure only allowed keys are set
902-
switch ($questionType) {
903-
case Constants::ANSWER_TYPE_DROPDOWN:
904-
$allowed = Constants::EXTRA_SETTINGS_DROPDOWN;
905-
break;
906-
case Constants::ANSWER_TYPE_MULTIPLE:
907-
case Constants::ANSWER_TYPE_MULTIPLEUNIQUE:
908-
$allowed = Constants::EXTRA_SETTINGS_MULTIPLE;
909-
break;
910-
case Constants::ANSWER_TYPE_SHORT:
911-
$allowed = Constants::EXTRA_SETTINGS_SHORT;
912-
break;
913-
case Constants::ANSWER_TYPE_FILE:
914-
$allowed = Constants::EXTRA_SETTINGS_FILE;
915-
break;
916-
case Constants::ANSWER_TYPE_DATE:
917-
$allowed = Constants::EXTRA_SETTINGS_DATE;
918-
break;
919-
case Constants::ANSWER_TYPE_GRID:
920-
$allowed = Constants::EXTRA_SETTINGS_GRID;
921-
break;
922-
case Constants::ANSWER_TYPE_RANKING:
923-
$allowed = Constants::EXTRA_SETTINGS_RANKING;
924-
break;
925-
case Constants::ANSWER_TYPE_TIME:
926-
$allowed = Constants::EXTRA_SETTINGS_TIME;
927-
break;
928-
case Constants::ANSWER_TYPE_LINEARSCALE:
929-
$allowed = Constants::EXTRA_SETTINGS_LINEARSCALE;
930-
break;
931-
case Constants::ANSWER_TYPE_CONDITIONAL:
932-
$allowed = Constants::EXTRA_SETTINGS_CONDITIONAL;
933-
break;
934-
default:
935-
$allowed = [];
901+
// Map allowed options to answer type
902+
$extraSettingsMap = [
903+
Constants::ANSWER_TYPE_DROPDOWN => Constants::EXTRA_SETTINGS_DROPDOWN,
904+
Constants::ANSWER_TYPE_MULTIPLE => Constants::EXTRA_SETTINGS_MULTIPLE,
905+
Constants::ANSWER_TYPE_MULTIPLEUNIQUE => Constants::EXTRA_SETTINGS_MULTIPLE,
906+
Constants::ANSWER_TYPE_SHORT => Constants::EXTRA_SETTINGS_SHORT,
907+
Constants::ANSWER_TYPE_FILE => Constants::EXTRA_SETTINGS_FILE,
908+
Constants::ANSWER_TYPE_DATE => Constants::EXTRA_SETTINGS_DATE,
909+
Constants::ANSWER_TYPE_GRID => Constants::EXTRA_SETTINGS_GRID,
910+
Constants::ANSWER_TYPE_TIME => Constants::EXTRA_SETTINGS_TIME,
911+
Constants::ANSWER_TYPE_LINEARSCALE => Constants::EXTRA_SETTINGS_LINEARSCALE,
912+
Constants::ANSWER_TYPE_RANKING => Constants::EXTRA_SETTINGS_RANKING,
913+
Constants::ANSWER_TYPE_CONDITIONAL => Constants::EXTRA_SETTINGS_CONDITIONAL,
914+
];
915+
916+
// Get triggertype if is conditional
917+
$triggerType = $extraSettings['triggerType'] ?? null;
918+
if (is_string($triggerType) && isset($extraSettingsMap[$triggerType])) {
919+
$extraSettingsMap[Constants::ANSWER_TYPE_CONDITIONAL] += $extraSettingsMap[$triggerType];
936920
}
921+
// Ensure only allowed keys are set
922+
$allowed = $extraSettingsMap[$questionType] ?? [];
937923
// Number of keys in extraSettings but not in allowed (but not the other way round)
938924
$diff = array_diff(array_keys($extraSettings), array_keys($allowed));
939925
if (count($diff) > 0) {
@@ -1069,6 +1055,18 @@ public function areExtraSettingsValid(array $extraSettings, string $questionType
10691055
return false;
10701056
}
10711057
}
1058+
1059+
$diff = array_diff(array_keys($extraSettings), array_keys(Constants::EXTRA_SETTINGS_CONDITIONAL));
1060+
// Handle options of triggerQuestion
1061+
if (count($diff) > 0 && isset($triggerType) && $triggerType !== '') {
1062+
$diffDict = [];
1063+
foreach ($diff as $k) {
1064+
$diffDict[$k] = $extraSettings[$k];
1065+
}
1066+
$valid = self::areExtraSettingsValid($diffDict, $triggerType);
1067+
return $valid;
1068+
}
1069+
10721070
}
10731071
return true;
10741072
}

src/components/Questions/QuestionConditional.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@
101101
:values="triggerValues"
102102
@update:values="onTriggerValueChange"
103103
@update:options="onOptionsChange"
104+
@update:extraSettings="onExtraSettingsChange"
104105
@delete="clearTriggerType" />
105106

106107
<!-- Branch Management (Edit Mode) -->

src/mixins/QuestionMixin.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,14 @@ export default {
186186
type: Boolean,
187187
default: false,
188188
},
189+
190+
/**
191+
* Whether this question is a trigger for a conditional
192+
*/
193+
isTrigger: {
194+
type: Boolean,
195+
default: false,
196+
},
189197
},
190198

191199
components: {

0 commit comments

Comments
 (0)