From 58b4db66cc44672b576f443286a52c0d3ffadb9d Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Fri, 17 Apr 2015 09:14:33 +0200 Subject: [PATCH] work in progress: handling of question types --- knowledge/survey/browser.py | 16 +++++++++-- knowledge/survey/interfaces.py | 12 +++++++- knowledge/survey/view_macros.pt | 47 +++++++++++++++++++++++--------- locales/de/LC_MESSAGES/loops.mo | Bin 26968 -> 27151 bytes locales/de/LC_MESSAGES/loops.po | 9 ++++++ 5 files changed, 68 insertions(+), 16 deletions(-) diff --git a/knowledge/survey/browser.py b/knowledge/survey/browser.py index 8d6207e..502429b 100644 --- a/knowledge/survey/browser.py +++ b/knowledge/survey/browser.py @@ -47,6 +47,8 @@ class SurveyView(ConceptView): batchSize = 12 teamData = None + template = template + @Lazy def macro(self): self.registerDojo() @@ -137,6 +139,8 @@ class SurveyView(ConceptView): if data: resp = Response(self.adapted, None) for qu in self.adapted.questions: + if qu.questionType != 'value_selection': + continue if qu.uid in data: resp.values[qu] = data[qu.uid] qgAvailable = True @@ -231,13 +235,16 @@ class SurveyView(ConceptView): text = u'%s
(%s)' % (text, info) return text - def getValues(self, question): - setting = None + def loadData(self): if self.data is None: respManager = Responses(self.context) respManager.personId = (self.request.form.get('person') or respManager.getPersonId()) self.data = respManager.load() + + def getValues(self, question): + setting = None + self.loadData() if self.data: setting = self.data.get(question.uid) if setting is None: @@ -250,6 +257,11 @@ class SurveyView(ConceptView): title=opt['description'])) return result + def getTextValue(self, question): + self.loadData() + if self.data: + return self.data.get(question.uid) + def getCssClass(self, question): cls = '' if self.errors and self.data.get(question.uid) is None: diff --git a/knowledge/survey/interfaces.py b/knowledge/survey/interfaces.py index a6b3300..f6d0b5d 100644 --- a/knowledge/survey/interfaces.py +++ b/knowledge/survey/interfaces.py @@ -26,7 +26,7 @@ from zope import interface, component, schema from cybertools.composer.schema.grid.interfaces import Records from cybertools.knowledge.survey import interfaces from loops.interfaces import IConceptSchema, ILoopsAdapter -from loops.util import _ +from loops.util import _, KeywordVocabulary class IQuestionnaire(IConceptSchema, interfaces.IQuestionnaire): @@ -108,6 +108,16 @@ class IQuestion(IConceptSchema, interfaces.IQuestion): """ A single question within a questionnaire. """ + questionType = schema.Choice( + title=_(u'Question Type'), + description=_(u'Select the type of the question.'), + source=KeywordVocabulary(( + ('value_selection', _(u'Value Selection')), + ('text', _(u'Text')), + )), + default='value_selection', + required=True) + required = schema.Bool( title=_(u'Required'), description=_(u'Question must be answered.'), diff --git a/knowledge/survey/view_macros.pt b/knowledge/survey/view_macros.pt index 2c4efed..29454a9 100644 --- a/knowledge/survey/view_macros.pt +++ b/knowledge/survey/view_macros.pt @@ -93,19 +93,10 @@ tal:content="opt/label|string:" /> - - - - - - + + + @@ -119,4 +110,34 @@ + + + + + + + + + + + + + +
+ + + + + + + diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index a83eb06f2efe58fd957bc6ad321fdfe807966c7c..3166e4b00e97baae77b080aee268cd5e2d5f9f8e 100644 GIT binary patch delta 9842 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 H?Hc$W%k?I? delta 9643 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 diff --git a/locales/de/LC_MESSAGES/loops.po b/locales/de/LC_MESSAGES/loops.po index 6eb5b10..7ded724 100644 --- a/locales/de/LC_MESSAGES/loops.po +++ b/locales/de/LC_MESSAGES/loops.po @@ -225,6 +225,15 @@ msgstr "Mindestanzahl an Antworten" msgid "Minumum number of questions that have to be answered. Empty means all questions have to be answered." msgstr "Anzahl der Fragen, die mindestens beantwortet werden müssen. Keine Angabe: Es müssen alle Fragen beantwortet werden." +msgid "Question Type" +msgstr "Fragentyp" + +msgid "Select the type of the question." +msgstr "Bitte den Typ der Frage auswählen." + +msgid "Value Selection" +msgstr "Auswahl Bewertung" + msgid "Required" msgstr "Pflichtfrage"