diff --git a/docs/DataStructure.md b/docs/DataStructure.md index 2a2e5af66..81c6abe24 100644 --- a/docs/DataStructure.md +++ b/docs/DataStructure.md @@ -271,7 +271,7 @@ Optional extra settings for some [Question Types](#question-types) | `rows` | `grid` | Array | - | Array of row identifiers / labels for grid questions | | `questionType` | `grid` | String | `checkbox`, `number`, `radio` | Type of cell for grid questions (checkbox, numeric input, or radio) | | `goTo` | `dropdown, multiple_unique` | Array | see [Jumps](#jumps) | Where to go next for an answer | -| `next` | `color, file, grid, long, multiple, ranking, short` | Integer / string | question id, `'submit'` | Where to go after the question, see [Jumps](#jumps) | +| `next` | `color, date, file, grid, long, multiple, ranking, short, time` | Integer / string | question id, `'submit'` | Where to go after the question, see [Jumps](#jumps) | ### Jumps diff --git a/lib/Constants.php b/lib/Constants.php index afb0e1bf2..59d1c3fb5 100644 --- a/lib/Constants.php +++ b/lib/Constants.php @@ -242,12 +242,14 @@ class Constants { public const QUESTION_TYPES_WITH_NEXT = [ self::ANSWER_TYPE_COLOR, + self::ANSWER_TYPE_DATE, self::ANSWER_TYPE_FILE, self::ANSWER_TYPE_GRID, self::ANSWER_TYPE_LONG, self::ANSWER_TYPE_MULTIPLE, self::ANSWER_TYPE_RANKING, self::ANSWER_TYPE_SHORT, + self::ANSWER_TYPE_TIME, ]; public const EXTRA_SETTINGS_GRID_QUESTION_TYPE = [ diff --git a/src/utils/Jumps.ts b/src/utils/Jumps.ts index 5dad119b5..7eec1f992 100644 --- a/src/utils/Jumps.ts +++ b/src/utils/Jumps.ts @@ -17,12 +17,14 @@ export const QUESTION_TYPES_WITH_GOTO = ['dropdown', 'multiple_unique'] export const QUESTION_TYPES_WITH_NEXT = [ 'color', + 'date', 'file', 'grid', 'long', 'multiple', 'ranking', 'short', + 'time', ] /** The answer a jump belongs to: an option or the answer "Other" */ diff --git a/tests/Unit/Service/FormsServiceTest.php b/tests/Unit/Service/FormsServiceTest.php index 04fa89b62..6f39a5009 100644 --- a/tests/Unit/Service/FormsServiceTest.php +++ b/tests/Unit/Service/FormsServiceTest.php @@ -1687,9 +1687,19 @@ public static function dataAreExtraSettingsValid() { 'questionType' => Constants::ANSWER_TYPE_SHORT, 'expected' => false, ], - 'jump: next not offered on date questions' => [ + 'jump: next on date questions' => [ 'extraSettings' => ['next' => 5], 'questionType' => Constants::ANSWER_TYPE_DATE, + 'expected' => true, + ], + 'jump: next on time questions' => [ + 'extraSettings' => ['next' => 'submit'], + 'questionType' => Constants::ANSWER_TYPE_TIME, + 'expected' => true, + ], + 'jump: next not offered on datetime questions' => [ + 'extraSettings' => ['next' => 5], + 'questionType' => Constants::ANSWER_TYPE_DATETIME, 'expected' => false, ], 'jump: goTo per option and Other' => [ diff --git a/tests/fixtures/jump-paths.json b/tests/fixtures/jump-paths.json index 087f2f656..584b82d08 100644 --- a/tests/fixtures/jump-paths.json +++ b/tests/fixtures/jump-paths.json @@ -238,6 +238,25 @@ "answers": { "1": ["11", "12"] }, "visible": [1, 3] }, + { + "name": "a time question goes to its target", + "questions": [ + { "id": 1, "type": "time", "extraSettings": { "next": 3 } }, + { "id": 2, "type": "short", "extraSettings": {} }, + { "id": 3, "type": "short", "extraSettings": {} } + ], + "answers": { "1": ["10:30"] }, + "visible": [1, 3] + }, + { + "name": "a date question goes to its target", + "questions": [ + { "id": 1, "type": "date", "extraSettings": { "next": "submit" } }, + { "id": 2, "type": "short", "extraSettings": {} } + ], + "answers": { "1": ["2026-11-10"] }, + "visible": [1] + }, { "name": "the jumps of skipped questions do not count", "questions": [