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):