do not show questionnaire together with result; store data entered as track
This commit is contained in:
parent
5e8d0a8978
commit
96103b28c4
8 changed files with 101 additions and 64 deletions
|
@ -122,4 +122,3 @@ class FeedbackItem(AdapterBase, FeedbackItem):
|
||||||
@property
|
@property
|
||||||
def text(self):
|
def text(self):
|
||||||
return self.context.description
|
return self.context.description
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,7 @@ from zope.i18n import translate
|
||||||
from cybertools.knowledge.survey.questionnaire import Response
|
from cybertools.knowledge.survey.questionnaire import Response
|
||||||
from loops.browser.concept import ConceptView
|
from loops.browser.concept import ConceptView
|
||||||
from loops.common import adapted
|
from loops.common import adapted
|
||||||
|
from loops.knowledge.survey.response import Responses
|
||||||
from loops.organize.party import getPersonForUser
|
from loops.organize.party import getPersonForUser
|
||||||
from loops.util import _
|
from loops.util import _
|
||||||
|
|
||||||
|
@ -62,7 +63,7 @@ class SurveyView(ConceptView):
|
||||||
self.errors = self.check(response)
|
self.errors = self.check(response)
|
||||||
if self.errors:
|
if self.errors:
|
||||||
return []
|
return []
|
||||||
# TODO: store self.data in track
|
Responses(self.context).save(self.data)
|
||||||
if response is not None:
|
if response is not None:
|
||||||
result = response.getGroupedResult()
|
result = response.getGroupedResult()
|
||||||
return [dict(category=r[0].title, text=r[1].text,
|
return [dict(category=r[0].title, text=r[1].text,
|
||||||
|
@ -106,8 +107,9 @@ class SurveyView(ConceptView):
|
||||||
|
|
||||||
def getValues(self, question):
|
def getValues(self, question):
|
||||||
setting = None
|
setting = None
|
||||||
# TODO: get response from track
|
if self.data is None:
|
||||||
if self.data is not None:
|
self.data = Responses(self.context).load()
|
||||||
|
if self.data:
|
||||||
setting = self.data.get(question.uid)
|
setting = self.data.get(question.uid)
|
||||||
noAnswer = [dict(value='none', checked=(setting == None),
|
noAnswer = [dict(value='none', checked=(setting == None),
|
||||||
radio=(not question.required))]
|
radio=(not question.required))]
|
||||||
|
|
|
@ -21,6 +21,15 @@
|
||||||
factory="loops.knowledge.survey.base.FeedbackItem"
|
factory="loops.knowledge.survey.base.FeedbackItem"
|
||||||
provides="loops.knowledge.survey.interfaces.IFeedbackItem" />
|
provides="loops.knowledge.survey.interfaces.IFeedbackItem" />
|
||||||
|
|
||||||
|
<!-- track -->
|
||||||
|
|
||||||
|
<zope:class class="loops.knowledge.survey.response.Response">
|
||||||
|
<require permission="zope.View"
|
||||||
|
interface="cybertools.tracking.interfaces.ITrack" />
|
||||||
|
<require permission="zope.ManageContent"
|
||||||
|
set_schema="cybertools.tracking.interfaces.ITrack" />
|
||||||
|
</zope:class>
|
||||||
|
|
||||||
<!-- views -->
|
<!-- views -->
|
||||||
|
|
||||||
<zope:adapter
|
<zope:adapter
|
||||||
|
|
|
@ -29,20 +29,35 @@ from loops.knowledge.survey.interfaces import IResponse, IResponses
|
||||||
from loops.organize.tracking.base import BaseRecordManager
|
from loops.organize.tracking.base import BaseRecordManager
|
||||||
|
|
||||||
|
|
||||||
|
class Responses(BaseRecordManager):
|
||||||
|
|
||||||
|
implements(IResponses)
|
||||||
|
|
||||||
|
storageName = 'survey_responses'
|
||||||
|
|
||||||
|
def __init__(self, context):
|
||||||
|
self.context = context
|
||||||
|
|
||||||
|
def save(self, data):
|
||||||
|
if not self.personId:
|
||||||
|
return
|
||||||
|
tracks = self.storage.getUserTracks(self.uid, 0, self.personId)
|
||||||
|
if tracks:
|
||||||
|
self.storage.updateTrack(tracks[0], data)
|
||||||
|
else:
|
||||||
|
self.storage.saveUserTrack(self.uid, 0, self.personId, data)
|
||||||
|
|
||||||
|
def load(self):
|
||||||
|
if self.personId:
|
||||||
|
tracks = self.storage.getUserTracks(self.uid, 0, self.personId)
|
||||||
|
if tracks:
|
||||||
|
return tracks[0].data
|
||||||
|
return {}
|
||||||
|
|
||||||
|
|
||||||
class Response(Track):
|
class Response(Track):
|
||||||
""" A survey response.
|
|
||||||
"""
|
|
||||||
|
|
||||||
implements(IResponse)
|
implements(IResponse)
|
||||||
|
|
||||||
typeName = 'Response'
|
typeName = 'Response'
|
||||||
typeInterface = IResponse
|
|
||||||
|
|
||||||
|
|
||||||
class Responses(BaseRecordManager):
|
|
||||||
""" A tracking storage adapter for survey responses.
|
|
||||||
"""
|
|
||||||
|
|
||||||
implements(IResponses)
|
|
||||||
adapts(ITrackingStorage)
|
|
||||||
|
|
||||||
|
|
|
@ -27,8 +27,15 @@
|
||||||
<td tal:content="fbitem/score" />
|
<td tal:content="fbitem/score" />
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
<div class="button" id="show_questionnaire">
|
||||||
|
<a href="" onclick="back(); return false"
|
||||||
|
i18n:translate="">
|
||||||
|
Back to Questionnaire</a>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="questionnaire"
|
||||||
|
tal:condition="not:feedback">
|
||||||
<h3 i18n:translate="">Questionnaire</h3>
|
<h3 i18n:translate="">Questionnaire</h3>
|
||||||
<form method="post">
|
<form method="post">
|
||||||
<table class="listing">
|
<table class="listing">
|
||||||
|
@ -70,10 +77,10 @@
|
||||||
</tr>
|
</tr>
|
||||||
</tal:qugroup>
|
</tal:qugroup>
|
||||||
</table>
|
</table>
|
||||||
<br />
|
|
||||||
<input type="submit" name="submit" value="Evaluate Questionnaire"
|
<input type="submit" name="submit" value="Evaluate Questionnaire"
|
||||||
i18n:attributes="value" />
|
i18n:attributes="value" />
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
</metal:block>
|
</metal:block>
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -235,6 +235,9 @@ msgstr "Trifft für unser Unternehmen voll und ganz zu"
|
||||||
msgid "Evaluate Questionnaire"
|
msgid "Evaluate Questionnaire"
|
||||||
msgstr "Fragebogen auswerten"
|
msgstr "Fragebogen auswerten"
|
||||||
|
|
||||||
|
msgid "Back to Questionnaire"
|
||||||
|
msgstr "Zurück zum Fragebogen"
|
||||||
|
|
||||||
msgid "Please answer at least $minAnswers questions."
|
msgid "Please answer at least $minAnswers questions."
|
||||||
msgstr "Bitte beantworten Sie mindestens $minAnswers Fragen."
|
msgstr "Bitte beantworten Sie mindestens $minAnswers Fragen."
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
|
# Copyright (c) 2013 Helmut Merz helmutm@cy55.de
|
||||||
#
|
#
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# This program is free software; you can redistribute it and/or modify
|
||||||
# it under the terms of the GNU General Public License as published by
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
@ -18,8 +18,6 @@
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Base class(es) for track/record managers.
|
Base class(es) for track/record managers.
|
||||||
|
|
||||||
$Id$
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from zope.cachedescriptors.property import Lazy
|
from zope.cachedescriptors.property import Lazy
|
||||||
|
@ -46,6 +44,10 @@ class BaseRecordManager(object):
|
||||||
def loopsRoot(self):
|
def loopsRoot(self):
|
||||||
return self.context.getLoopsRoot()
|
return self.context.getLoopsRoot()
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def uid(self):
|
||||||
|
return util.getUidForObject(self.context)
|
||||||
|
|
||||||
@Lazy
|
@Lazy
|
||||||
def storage(self):
|
def storage(self):
|
||||||
records = self.loopsRoot.getRecordManager()
|
records = self.loopsRoot.getRecordManager()
|
||||||
|
|
Loading…
Add table
Reference in a new issue