@@ -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 }
0 commit comments