1.1 --- a/examples/Common/Questionnaire/__init__.py Sun Nov 16 01:19:33 2008 +0100
1.2 +++ b/examples/Common/Questionnaire/__init__.py Mon Nov 17 01:50:18 2008 +0100
1.3 @@ -4,8 +4,10 @@
1.4
1.5 import WebStack.Generic
1.6 from XSLForms.Resources.WebResources import \
1.7 - XSLFormsResource, output, resources, prepare_resources as xslforms_prepare_resources
1.8 + XSLFormsResource, input, output, resources, prepare_resources as xslforms_prepare_resources
1.9 import os
1.10 +import libxml2dom
1.11 +import xml.dom
1.12
1.13 # Site map imports.
1.14
1.15 @@ -27,6 +29,12 @@
1.16 template_resources = {
1.17 "questionnaire" : output("question_template.xhtml")
1.18 }
1.19 + init_resources = {
1.20 + "questionnaire" : input("question_template.xhtml")
1.21 + }
1.22 + document_resources = {
1.23 + "response-types" : "question_response_types.xml"
1.24 + }
1.25
1.26 def select_activity(self, trans, form):
1.27 form.set_activity("questionnaire")
1.28 @@ -41,6 +49,25 @@
1.29 self.add_elements(selectors.get("add-choice"), "choice")
1.30 self.remove_elements(selectors.get("remove-choice"))
1.31
1.32 + # Move questions.
1.33 + # NOTE: Potentially a DOM convenience method here.
1.34 +
1.35 + for question in selectors.get("move-question", []):
1.36 + destination = int(question.getAttribute("destination"))
1.37 + if destination > 1:
1.38 + destination += 1
1.39 + root = questionnaire.documentElement
1.40 + target = (root.xpath("question[position() = %d]" % destination) or [None])[0]
1.41 + root.removeChild(question)
1.42 + if target is not None:
1.43 + try:
1.44 + root.insertBefore(question, target)
1.45 + except xml.dom.NotFoundErr:
1.46 + target = (root.xpath("question[position() = %d]" % destination) or [None])[0]
1.47 + root.insertBefore(question, target)
1.48 + else:
1.49 + root.appendChild(question)
1.50 +
1.51 # Add questions using the normal request parameter.
1.52
1.53 if parameters.has_key("add-question"):
1.54 @@ -55,6 +82,23 @@
1.55 questionnaire.toStream(trans.get_response_stream(), trans.get_response_stream_encoding())
1.56 raise WebStack.Generic.EndOfResponse
1.57
1.58 + # Support uploading of files.
1.59 +
1.60 + if parameters.has_key("import"):
1.61 + importfile = parameters["importfile"][0]
1.62 + try:
1.63 + doc = libxml2dom.parse(importfile.stream)
1.64 + form.set_document(doc)
1.65 + except libxml2dom.LSException:
1.66 + pass
1.67 +
1.68 + def init_document(self, trans, form):
1.69 +
1.70 + # Transform, adding enumerations/ranges.
1.71 +
1.72 + response_types_xml = self.prepare_document("response-types")
1.73 + XSLFormsResource.init_document(self, trans, form, references={"response-type" : response_types_xml})
1.74 +
1.75 # Site map initialisation.
1.76
1.77 def get_site():