diff --git a/docs/changes.rst b/docs/changes.rst index 61f3d9987..d6878c25e 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -4,6 +4,9 @@ Changelog 16.0.0 (unreleased) ------------------- +- Custom widgets for choice fields in the session @@start view + [ale-rt, maurits] + - Fix problem with the identification report not being generated for certain survey sessions. Ref: scrum-1846 Fixes: #688 diff --git a/src/euphorie/client/widgets/choice.py b/src/euphorie/client/widgets/choice.py new file mode 100644 index 000000000..593c26de5 --- /dev/null +++ b/src/euphorie/client/widgets/choice.py @@ -0,0 +1,33 @@ +from functools import cached_property +from z3c.form.browser.select import SelectWidget +from z3c.form.interfaces import IFieldWidget +from z3c.form.widget import FieldWidget +from zope.interface import implementer + + +class EuphorieChoiceWidget(SelectWidget): + """Select widget for z3c.form in the Euphorie context: better display + mode.""" + + @cached_property + def title_value(self): + if self.name in self.request.form: + token = self.request.form[self.name] + vocabulary = self.field.source(self.context) + try: + return vocabulary.getTermByToken(token).value + except LookupError: + return + + return getattr(self.context.session, self.field.__name__, None) + + def isSelected(self, term): + return term.title == self.title_value + + +@implementer(IFieldWidget) +def EuphorieChoiceFieldWidget(field, request): + """This is identicall to the equivalent in plone.app.z3cform but needs a + customization to use the EuphorieSelectWidget class.""" + widget = FieldWidget(field, EuphorieChoiceWidget(request)) + return widget diff --git a/src/euphorie/client/widgets/configure.zcml b/src/euphorie/client/widgets/configure.zcml index 46b045137..e4328a2b1 100644 --- a/src/euphorie/client/widgets/configure.zcml +++ b/src/euphorie/client/widgets/configure.zcml @@ -18,6 +18,12 @@ euphorie.client.interfaces.IClientSkinLayer" /> + + + + diff --git a/src/euphorie/client/widgets/templates/choice_widget.pt b/src/euphorie/client/widgets/templates/choice_widget.pt new file mode 100644 index 000000000..347537884 --- /dev/null +++ b/src/euphorie/client/widgets/templates/choice_widget.pt @@ -0,0 +1,40 @@ + +
+ + ${description} + +
+