end-user view for displaying the questionnaire

This commit is contained in:
Helmut Merz 2013-03-07 16:03:29 +01:00
parent efea782af2
commit abbe1a39ff
9 changed files with 123 additions and 7 deletions

View file

@ -190,6 +190,8 @@ Survey
>>> from loops.knowledge.tests import importSurvey >>> from loops.knowledge.tests import importSurvey
>>> importSurvey(loopsRoot) >>> importSurvey(loopsRoot)
>>> from loops.knowledge.survey.browser import SurveyView
Fin de partie Fin de partie
============= =============

View file

@ -1,5 +1,5 @@
# survey types # survey types
type(u'questionnaire', u'Fragebogen', viewName=u'', type(u'questionnaire', u'Fragebogen', viewName=u'survey.html',
typeInterface=u'loops.knowledge.survey.interfaces.IQuestionnaire', typeInterface=u'loops.knowledge.survey.interfaces.IQuestionnaire',
options=u'action.portlet:create_subtype,edit_concept') options=u'action.portlet:create_subtype,edit_concept')
type(u'questiongroup', u'Fragengruppe', viewName=u'', type(u'questiongroup', u'Fragengruppe', viewName=u'',

View file

@ -25,7 +25,7 @@ from zope.interface import implementer, implements
from cybertools.knowledge.survey.questionnaire import Questionnaire, \ from cybertools.knowledge.survey.questionnaire import Questionnaire, \
QuestionGroup, Question, FeedbackItem QuestionGroup, Question, FeedbackItem
from loops.common import AdapterBase from loops.common import adapted, AdapterBase
from loops.knowledge.survey.interfaces import IQuestionnaire, \ from loops.knowledge.survey.interfaces import IQuestionnaire, \
IQuestionGroup, IQuestion, IFeedbackItem IQuestionGroup, IQuestion, IFeedbackItem
from loops.type import TypeInterfaceSourceList from loops.type import TypeInterfaceSourceList
@ -44,6 +44,17 @@ class Questionnaire(AdapterBase, Questionnaire):
'questionGroups', 'questions', 'responses',) 'questionGroups', 'questions', 'responses',)
_noexportAttributes = _adapterAttributes _noexportAttributes = _adapterAttributes
@property
def questionGroups(self):
return [adapted(c) for c in self.context.getChildren()]
@property
def questions(self):
for qug in self.questionGroups:
for qu in qug.questions:
qu.questionnaire = self
yield qu
class QuestionGroup(AdapterBase, QuestionGroup): class QuestionGroup(AdapterBase, QuestionGroup):
@ -54,6 +65,14 @@ class QuestionGroup(AdapterBase, QuestionGroup):
'questionnaire', 'questions', 'feedbackItems',) 'questionnaire', 'questions', 'feedbackItems',)
_noexportAttributes = _adapterAttributes _noexportAttributes = _adapterAttributes
@property
def subobjects(self):
return [adapted(c) for c in self.context.getChildren()]
@property
def questions(self):
return [obj for obj in self.subobjects if IQuestion.providedBy(obj)]
class Question(AdapterBase, Question): class Question(AdapterBase, Question):
@ -64,6 +83,10 @@ class Question(AdapterBase, Question):
'text', 'questionnaire', 'answerRange', 'feedbackItems',) 'text', 'questionnaire', 'answerRange', 'feedbackItems',)
_noexportAttributes = _adapterAttributes _noexportAttributes = _adapterAttributes
@property
def text(self):
return self.context.description
class FeedbackItem(AdapterBase, FeedbackItem): class FeedbackItem(AdapterBase, FeedbackItem):

View file

@ -0,0 +1,40 @@
#
# Copyright (c) 2013 Helmut Merz helmutm@cy55.de
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
Definition of view classes and other browser related stuff for
surveys and self-assessments.
"""
from zope.app.pagetemplate import ViewPageTemplateFile
from zope.cachedescriptors.property import Lazy
from loops.browser.concept import ConceptView
from loops.organize.party import getPersonForUser
template = ViewPageTemplateFile('view_macros.pt')
class SurveyView(ConceptView):
tabview = 'index.html'
@Lazy
def macro(self):
return template.macros['survey']

View file

@ -3,6 +3,8 @@
xmlns:browser="http://namespaces.zope.org/browser" xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="loops"> i18n_domain="loops">
<!-- concept classes -->
<zope:adapter <zope:adapter
factory="loops.knowledge.survey.base.Questionnaire" factory="loops.knowledge.survey.base.Questionnaire"
provides="loops.knowledge.survey.interfaces.IQuestionnaire" /> provides="loops.knowledge.survey.interfaces.IQuestionnaire" />
@ -19,4 +21,14 @@
factory="loops.knowledge.survey.base.FeedbackItem" factory="loops.knowledge.survey.base.FeedbackItem"
provides="loops.knowledge.survey.interfaces.IFeedbackItem" /> provides="loops.knowledge.survey.interfaces.IFeedbackItem" />
<!-- views -->
<zope:adapter
name="survey.html"
for="loops.interfaces.IConcept
zope.publisher.interfaces.browser.IBrowserRequest"
provides="zope.interface.Interface"
factory="loops.knowledge.survey.browser.SurveyView"
permission="zope.View" />
</configure> </configure>

View file

@ -0,0 +1,35 @@
<!-- ZPT macros for loops.knowledge.survey views -->
<html i18n:domain="loops">
<metal:block define-macro="survey">
<metal:title use-macro="item/conceptMacros/concepttitle" />
<table>
<tr>
<th></th>
<th>
<table>
<tr>
<td i18n:translate="">Does not apply</td>
<td style="text-align: right"
i18n:translate="">Fully applies</td>
</tr>
</table>
</th>
</tr>
<tr tal:repeat="question item/adapted/questions">
<td tal:content="question/text" />
<td style="white-space: nowrap">
<span tal:repeat="value python:range(question.answerRange)">&nbsp;
<input type="radio"
tal:attributes="name question/uid;
value value;
checked repeat/value/start" />&nbsp;
</span>
</td>
</tr>
</table>
</metal:block>
</html>

Binary file not shown.

View file

@ -3,7 +3,7 @@ msgstr ""
"Project-Id-Version: 0.13.0\n" "Project-Id-Version: 0.13.0\n"
"POT-Creation-Date: 2007-05-22 12:00 CET\n" "POT-Creation-Date: 2007-05-22 12:00 CET\n"
"PO-Revision-Date: 2013-02-26 12:00 CET\n" "PO-Revision-Date: 2013-03-07 12:00 CET\n"
"Last-Translator: Helmut Merz <helmutm@cy55.de>\n" "Last-Translator: Helmut Merz <helmutm@cy55.de>\n"
"Language-Team: loops developers <helmutm@cy55.de>\n" "Language-Team: loops developers <helmutm@cy55.de>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -184,6 +184,12 @@ msgstr "Negativbewertung"
msgid "Value inversion: High selection means low value." msgid "Value inversion: High selection means low value."
msgstr "Invertierung der Bewertung: Hohe gewählte Stufe bedeutet niedriger Wert." msgstr "Invertierung der Bewertung: Hohe gewählte Stufe bedeutet niedriger Wert."
msgid "Does not apply"
msgstr "Trifft nicht zu"
msgid "Fully applies"
msgstr "Trifft voll zu"
# competence (qualification) # competence (qualification)
msgid "Validity Period (Months)" msgid "Validity Period (Months)"

View file

@ -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
@ -17,9 +17,7 @@
# #
""" """
View class(es) for change tracks. View classes for tracks.
$Id$
""" """
from zope import component from zope import component