diff --git a/src/apps/activities/domain/response_type_config.py b/src/apps/activities/domain/response_type_config.py index 3348e04f4d2..7daac81757c 100644 --- a/src/apps/activities/domain/response_type_config.py +++ b/src/apps/activities/domain/response_type_config.py @@ -162,6 +162,7 @@ class _SelectionConfig(_ScreenConfig, PublicModel): class SingleSelectionConfig(_SelectionConfig, PublicModel): type: Literal[ResponseType.SINGLESELECT] | None auto_advance: bool = False + response_data_identifier: bool = False class MultiSelectionConfig(_SelectionConfig, PublicModel): diff --git a/src/apps/activities/tests/fixtures/configs.py b/src/apps/activities/tests/fixtures/configs.py index 65010229630..b12779ace88 100644 --- a/src/apps/activities/tests/fixtures/configs.py +++ b/src/apps/activities/tests/fixtures/configs.py @@ -50,6 +50,7 @@ def single_select_config(default_config: DefaultConfig) -> SingleSelectionConfig set_alerts=False, add_tooltip=False, set_palette=False, + response_data_identifier=False, **default_config.dict(), type=ResponseType.SINGLESELECT, ) diff --git a/src/apps/activities/tests/unit/test_activity_item_change.py b/src/apps/activities/tests/unit/test_activity_item_change.py index b08db0cd9f7..abc4f3b03d6 100644 --- a/src/apps/activities/tests/unit/test_activity_item_change.py +++ b/src/apps/activities/tests/unit/test_activity_item_change.py @@ -388,6 +388,7 @@ def test_initial_single_selection_config_change( "Add Text Input Option was disabled", "Input Required was disabled", "Auto Advance was disabled", + "Response Data Identifier was disabled", ] assert changes == exp_changes @@ -488,6 +489,7 @@ def test_initial_version_changes( "Add Text Input Option was disabled", "Input Required was disabled", "Auto Advance was disabled", + "Response Data Identifier was disabled", ] changes = item_change_service.get_changes_insert(new_item) assert changes == single_select_exp_changes diff --git a/src/apps/jsonld_converter/service/document/field.py b/src/apps/jsonld_converter/service/document/field.py index ae905b4eb64..35e43c43cf4 100644 --- a/src/apps/jsonld_converter/service/document/field.py +++ b/src/apps/jsonld_converter/service/document/field.py @@ -342,6 +342,7 @@ class ReproFieldRadio(ReproFieldBase): ld_randomize_options: bool | None = None ld_scoring: bool | None = None ld_response_alert: bool | None = None + ld_is_response_identifier: bool | None = None is_multiple: bool = False choices: list[dict] | None = None @@ -357,7 +358,9 @@ async def _process_ld_response_options(self, options_doc: dict, drop=False): self.ld_randomize_options = self.attr_processor.get_attr_value(options_doc, "reproschema:randomizeOptions") self.ld_scoring = self.attr_processor.get_attr_value(options_doc, "reproschema:scoring") self.ld_response_alert = self.attr_processor.get_attr_value(options_doc, "reproschema:responseAlert") - + self.ld_is_response_identifier = self.attr_processor.get_attr_value( + options_doc, "reproschema:isResponseIdentifier" + ) self.choices = self._get_ld_choices_formatted(options_doc) def _build_config(self, _cls: Type | None, **attrs): @@ -367,6 +370,7 @@ def _build_config(self, _cls: Type | None, **attrs): set_alerts=bool(self.ld_response_alert), add_tooltip=False, # TODO set_palette=bool(self.ld_color_palette), # TODO + response_data_identifier=bool(self.ld_is_response_identifier) if not self.is_multiple else None, ) cfg_cls = MultiSelectionConfig if self.is_multiple else SingleSelectionConfig diff --git a/src/apps/jsonld_converter/service/export/activity_item.py b/src/apps/jsonld_converter/service/export/activity_item.py index 7af9aab4fe5..1141ca37fe0 100644 --- a/src/apps/jsonld_converter/service/export/activity_item.py +++ b/src/apps/jsonld_converter/service/export/activity_item.py @@ -144,6 +144,7 @@ def _build_response_options_prop(self, model: ActivityItemFull) -> dict: "valueType": "xsd:anyURI", # todo tokens "randomizeOptions": config.randomize_options, "scoring": config.add_scores, + "isResponseIdentifier": config.response_data_identifier, "responseAlert": config.set_alerts, "colorPalette": config.set_palette, "multipleChoice": False, diff --git a/src/apps/test_data/service.py b/src/apps/test_data/service.py index 064fa2146d1..a474d9c990e 100644 --- a/src/apps/test_data/service.py +++ b/src/apps/test_data/service.py @@ -181,6 +181,7 @@ def generate_response_value_config(type_: ResponseType): ) result["response_values"] = None # type: ignore # noqa: E501 + elif type_ == ResponseType.SINGLESELECT: result["config"] = dict( remove_back_button=False, @@ -191,11 +192,13 @@ def generate_response_value_config(type_: ResponseType): set_alerts=False, add_tooltip=False, set_palette=False, + response_data_identifier=False, additional_response_option=dict( # type: ignore # noqa: E501 text_input_option=False, text_input_required=False, ), ) + result["response_values"] = { "options": [ # type: ignore # noqa: E501 {