From abbe1a39ff25b7aeb9be3e6600736d56e11c07f6 Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 7 Mar 2013 16:03:29 +0100 Subject: [PATCH] end-user view for displaying the questionnaire --- knowledge/README.txt | 2 ++ knowledge/data/survey_de.dmp | 2 +- knowledge/survey/base.py | 25 +++++++++++++++++++- knowledge/survey/browser.py | 40 ++++++++++++++++++++++++++++++++ knowledge/survey/configure.zcml | 12 ++++++++++ knowledge/survey/view_macros.pt | 35 ++++++++++++++++++++++++++++ locales/de/LC_MESSAGES/loops.mo | Bin 21548 -> 21656 bytes locales/de/LC_MESSAGES/loops.po | 8 ++++++- organize/tracking/browser.py | 6 ++--- 9 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 knowledge/survey/browser.py create mode 100644 knowledge/survey/view_macros.pt diff --git a/knowledge/README.txt b/knowledge/README.txt index fdcc130..1617034 100644 --- a/knowledge/README.txt +++ b/knowledge/README.txt @@ -190,6 +190,8 @@ Survey >>> from loops.knowledge.tests import importSurvey >>> importSurvey(loopsRoot) + >>> from loops.knowledge.survey.browser import SurveyView + Fin de partie ============= diff --git a/knowledge/data/survey_de.dmp b/knowledge/data/survey_de.dmp index 1ace35b..a094261 100644 --- a/knowledge/data/survey_de.dmp +++ b/knowledge/data/survey_de.dmp @@ -1,5 +1,5 @@ # 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', options=u'action.portlet:create_subtype,edit_concept') type(u'questiongroup', u'Fragengruppe', viewName=u'', diff --git a/knowledge/survey/base.py b/knowledge/survey/base.py index fe6c05d..c156d7e 100644 --- a/knowledge/survey/base.py +++ b/knowledge/survey/base.py @@ -25,7 +25,7 @@ from zope.interface import implementer, implements from cybertools.knowledge.survey.questionnaire import Questionnaire, \ QuestionGroup, Question, FeedbackItem -from loops.common import AdapterBase +from loops.common import adapted, AdapterBase from loops.knowledge.survey.interfaces import IQuestionnaire, \ IQuestionGroup, IQuestion, IFeedbackItem from loops.type import TypeInterfaceSourceList @@ -44,6 +44,17 @@ class Questionnaire(AdapterBase, Questionnaire): 'questionGroups', 'questions', 'responses',) _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): @@ -54,6 +65,14 @@ class QuestionGroup(AdapterBase, QuestionGroup): 'questionnaire', 'questions', 'feedbackItems',) _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): @@ -64,6 +83,10 @@ class Question(AdapterBase, Question): 'text', 'questionnaire', 'answerRange', 'feedbackItems',) _noexportAttributes = _adapterAttributes + @property + def text(self): + return self.context.description + class FeedbackItem(AdapterBase, FeedbackItem): diff --git a/knowledge/survey/browser.py b/knowledge/survey/browser.py new file mode 100644 index 0000000..57072dc --- /dev/null +++ b/knowledge/survey/browser.py @@ -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'] + diff --git a/knowledge/survey/configure.zcml b/knowledge/survey/configure.zcml index d682b51..81c33d3 100644 --- a/knowledge/survey/configure.zcml +++ b/knowledge/survey/configure.zcml @@ -3,6 +3,8 @@ xmlns:browser="http://namespaces.zope.org/browser" i18n_domain="loops"> + + @@ -19,4 +21,14 @@ factory="loops.knowledge.survey.base.FeedbackItem" provides="loops.knowledge.survey.interfaces.IFeedbackItem" /> + + + + diff --git a/knowledge/survey/view_macros.pt b/knowledge/survey/view_macros.pt new file mode 100644 index 0000000..44198bc --- /dev/null +++ b/knowledge/survey/view_macros.pt @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + +
+ + + + + +
Does not applyFully applies
+
+ +   +   + +
+
+ + + diff --git a/locales/de/LC_MESSAGES/loops.mo b/locales/de/LC_MESSAGES/loops.mo index 79c436f21b1f6fa23447ec6f1f3e08f8b18894f3..b9a8f3d8b5afeec4365535b5ee95d18d6a0a2118 100644 GIT binary patch delta 8195 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\n" "Language-Team: loops developers \n" "MIME-Version: 1.0\n" @@ -184,6 +184,12 @@ msgstr "Negativbewertung" msgid "Value inversion: High selection means low value." 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) msgid "Validity Period (Months)" diff --git a/organize/tracking/browser.py b/organize/tracking/browser.py index f5743ea..c2f3b69 100644 --- a/organize/tracking/browser.py +++ b/organize/tracking/browser.py @@ -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 # it under the terms of the GNU General Public License as published by @@ -17,9 +17,7 @@ # """ -View class(es) for change tracks. - -$Id$ +View classes for tracks. """ from zope import component