diff --git a/knowledge/survey/browser.py b/knowledge/survey/browser.py
index 10f90cf..b4d9f06 100644
--- a/knowledge/survey/browser.py
+++ b/knowledge/survey/browser.py
@@ -55,6 +55,21 @@ class SurveyView(ConceptView):
if self.editable:
return 'index.html'
+ @Lazy
+ def answerOptions(self):
+ opts = self.adapted.answerOptions
+ if not opts:
+ opts = [
+ dict(value='none', label=u'No answer',
+ description=u'survey_value_none'),
+ dict(value=3, label=u'Fully applies',
+ description=u'survey_value_3'),
+ dict(value=2, label=u'', description=u'survey_value_2'),
+ dict(value=1, label=u'', description=u'survey_value_1'),
+ dict(value=0, label=u'Does not apply',
+ description=u'survey_value_0'),]
+ return opts
+
@Lazy
def showFeedbackText(self):
sft = self.adapted.showFeedbackText
@@ -77,7 +92,6 @@ class SurveyView(ConceptView):
return False
def getTeamData(self, respManager):
- #result = [myResponse]
result = []
pred = self.conceptManager.get('ismember')
if pred is None:
@@ -119,7 +133,8 @@ class SurveyView(ConceptView):
if value != 'none':
uid = key[len('question_'):]
question = adapted(self.getObjectForUid(uid))
- value = int(value)
+ if value.isdigit():
+ value = int(value)
data[uid] = value
response.values[question] = value
values = response.getGroupedResult()
@@ -167,7 +182,8 @@ class SurveyView(ConceptView):
text = qugroup.description
info = None
if qugroup.minAnswers in (u'', None):
- info = translate(_(u'Please answer all questions.'), target_language=lang)
+ info = translate(_(u'Please answer all questions.'),
+ target_language=lang)
elif qugroup.minAnswers > 0:
info = translate(_(u'Please answer at least $minAnswers questions.',
mapping=dict(minAnswers=qugroup.minAnswers)),
@@ -182,10 +198,19 @@ class SurveyView(ConceptView):
self.data = Responses(self.context).load()
if self.data:
setting = self.data.get(question.uid)
- noAnswer = [dict(value='none', checked=(setting == None),
- radio=(not question.required))]
- return noAnswer + [dict(value=i, checked=(setting == i), radio=True)
- for i in reversed(range(question.answerRange))]
+ if setting is None:
+ setting = 'none'
+ setting = str(setting)
+ result = []
+ for opt in self.answerOptions:
+ value = str(opt['value'])
+ result.append(dict(value=value, checked=(setting == value)))
+ return result
+
+ #noAnswer = [dict(value='none', checked=(setting == None),
+ # radio=(not question.required))]
+ #return noAnswer + [dict(value=i, checked=(setting == i), radio=True)
+ # for i in reversed(range(question.answerRange))]
class SurveyCsvExport(NodeView):
@@ -198,7 +223,8 @@ class SurveyCsvExport(NodeView):
@Lazy
def questions(self):
result = []
- for idx1, qug in enumerate(adapted(self.virtualTargetObject).questionGroups):
+ for idx1, qug in enumerate(
+ adapted(self.virtualTargetObject).questionGroups):
for idx2, qu in enumerate(qug.questions):
result.append((idx1, idx2, qug, qu))
return result
diff --git a/knowledge/survey/interfaces.py b/knowledge/survey/interfaces.py
index 9799865..40f1fed 100644
--- a/knowledge/survey/interfaces.py
+++ b/knowledge/survey/interfaces.py
@@ -39,6 +39,26 @@ class IQuestionnaire(IConceptSchema, interfaces.IQuestionnaire):
default=4,
required=True)
+ answerOptions = Records(
+ title=_(u'Answer Options'),
+ description=_(u'Values to select from with corresponding column '
+ u'labels and descriptions. There should be at '
+ u'least answer range items with numeric values.'),
+ default=[],
+ required=False)
+
+ answerOptions.column_types = [
+ schema.Text(__name__='value', title=u'Value',),
+ schema.Text(__name__='label', title=u'Label'),
+ schema.Text(__name__='description', title=u'Description'),]
+
+ noGrouping = schema.Bool(
+ title=_(u'No Grouping of Questions'),
+ description=_(u'The questions should be presented in a linear manner, '
+ u'not grouped by categories or question groups.'),
+ default=False,
+ required=False)
+
feedbackColumns = Records(
title=_(u'Feedback Columns'),
description=_(u'Column definitions for the results table '
diff --git a/knowledge/survey/view_macros.pt b/knowledge/survey/view_macros.pt
index 0f5d1c9..91be3c1 100644
--- a/knowledge/survey/view_macros.pt
+++ b/knowledge/survey/view_macros.pt
@@ -9,6 +9,7 @@