diff --git a/knowledge/README.txt b/knowledge/README.txt index b0407d4..48dcbc1 100644 --- a/knowledge/README.txt +++ b/knowledge/README.txt @@ -208,7 +208,8 @@ Glossary items are topic-like concepts that may be edited by end users. Survey ====== - >>> from loops.knowledge.survey.base import Questionnaire + >>> from loops.knowledge.tests import importSurvey + >>> importSurvey(loopsRoot) Fin de partie diff --git a/knowledge/data/loops_knowledge_de.dmp b/knowledge/data/knowledge_de.dmp similarity index 100% rename from knowledge/data/loops_knowledge_de.dmp rename to knowledge/data/knowledge_de.dmp diff --git a/knowledge/data/loops_knowledge_update_de.dmp b/knowledge/data/knowledge_update_de.dmp similarity index 100% rename from knowledge/data/loops_knowledge_update_de.dmp rename to knowledge/data/knowledge_update_de.dmp diff --git a/knowledge/data/survey_de.dmp b/knowledge/data/survey_de.dmp new file mode 100644 index 0000000..6f0dfec --- /dev/null +++ b/knowledge/data/survey_de.dmp @@ -0,0 +1,14 @@ +# survey types +type(u'questionnaire', u'Fragebogen', viewName=u'', + typeInterface=u'loops.knowledge.survey.interfaces.IQuestionnaire', + options=u'action.portlet:create_subtype,edit_concept') +type(u'question', u'Frage', viewName=u'', + typeInterface=u'loops.knowledge.survey.interfaces.IQuestion', + options=u'action.portlet:create_subtype,edit_concept') +type(u'resultelement', u'Feedback-Element', viewName=u'', + typeInterface=u'loops.knowledge.survey.interfaces.IResultElement', + options=u'action.portlet:edit_concept') + +# subtypes +child(u'questionnaire', u'question', u'issubtype') +child(u'question', u'resultelement', u'issubtype') diff --git a/knowledge/survey/base.py b/knowledge/survey/base.py index 86cddc4..8b856ad 100644 --- a/knowledge/survey/base.py +++ b/knowledge/survey/base.py @@ -23,11 +23,33 @@ Surveys used in knowledge management. from zope.component import adapts from zope.interface import implementer, implements -from cybertools.knowledge.survey.questionnaire import Questionnaire \ - as BaseQuestionnaire +from cybertools.knowledge.survey.questionnaire import Questionnaire, Question,\ + ResultElement +from loops.common import AdapterBase +from loops.knowledge.survey.interfaces import IQuestionnaire, IQuestion, IResultElement +from loops.type import TypeInterfaceSourceList -class Questionnaire(BaseQuestionnaire): +TypeInterfaceSourceList.typeInterfaces += (IQuestionnaire, IQuestion, IResultElement) - pass + +class Questionnaire(AdapterBase, Questionnaire): + + implements(IQuestionnaire) + + _contextAttributes = list(IQuestionnaire) + + +class Question(AdapterBase, Question): + + implements(IQuestion) + + _contextAttributes = list(IQuestion) + + +class ResultElement(AdapterBase, ResultElement): + + implements(IResultElement) + + _contextAttributes = list(IResultElement) diff --git a/knowledge/survey/configure.zcml b/knowledge/survey/configure.zcml index 98b51db..7f69f0d 100644 --- a/knowledge/survey/configure.zcml +++ b/knowledge/survey/configure.zcml @@ -3,4 +3,16 @@ xmlns:browser="http://namespaces.zope.org/browser" i18n_domain="loops"> + + + + + + diff --git a/knowledge/survey/interfaces.py b/knowledge/survey/interfaces.py index 198ad77..94bc8fc 100644 --- a/knowledge/survey/interfaces.py +++ b/knowledge/survey/interfaces.py @@ -22,3 +22,38 @@ Interfaces for surveys used in knowledge management. from zope.interface import Interface, Attribute from zope import interface, component, schema + +from cybertools.knowledge.survey import interfaces +from loops.interfaces import IConceptSchema + + +class IQuestionnaire(IConceptSchema, interfaces.IQuestionnaire): + """ A collection of questions for setting up a survey. + """ + + defaultOptions = Attribute('A sequence of answer options to select from. ' + 'Default value used for questions that do not ' + 'explicitly provide the values attribute.') + + +class IQuestion(IConceptSchema, interfaces.IQuestion): + """ A single question within a questionnaire. + """ + + text = Attribute('The question asked.') + options = Attribute('A sequence of answer options to select from.') + + +class IResultElement(IConceptSchema, interfaces.IResultElement): + """ Some text (e.g. a recommendation) or some other kind of information + that may be deduced from the res)ponses to a questionnaire. + """ + + text = Attribute('A text representing this result element.') + + +class IResponse(interfaces.IResponse): + """ A set of response values given to the questions of a questionnaire + by a single person or party. + """ + diff --git a/knowledge/tests.py b/knowledge/tests.py index baa95b0..098c5c8 100755 --- a/knowledge/tests.py +++ b/knowledge/tests.py @@ -2,16 +2,29 @@ import os import unittest, doctest -from zope.testing.doctestunit import DocFileSuite from zope.app.testing import ztapi +from zope import component from zope.interface.verify import verifyClass +from zope.testing.doctestunit import DocFileSuite + +from loops.knowledge.survey.base import Questionnaire, Question, ResultElement +from loops.knowledge.survey.interfaces import IQuestionnaire, IQuestion, \ + IResultElement from loops.organize.party import Person from loops.setup import importData as baseImportData +importPath = os.path.join(os.path.dirname(__file__), 'data') + + def importData(loopsRoot): - importPath = os.path.join(os.path.dirname(__file__), 'data') - baseImportData(loopsRoot, importPath, 'loops_knowledge_de.dmp') + baseImportData(loopsRoot, importPath, 'knowledge_de.dmp') + +def importSurvey(loopsRoot): + component.provideAdapter(Questionnaire, provides=IQuestionnaire) + component.provideAdapter(Question, provides=IQuestion) + component.provideAdapter(ResultElement, provides=IResultElement) + baseImportData(loopsRoot, importPath, 'survey_de.dmp') class Test(unittest.TestCase):