Commit ca2f16b7 authored by Nicolas Delaby's avatar Nicolas Delaby

Support Editing of Any XML File contained in ODF Archive

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@20593 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent ba9f9615
...@@ -63,15 +63,16 @@ import Products.ERP5Type.Document ...@@ -63,15 +63,16 @@ import Products.ERP5Type.Document
# Constructors # Constructors
manage_addOOoTemplate = DTMLFile("dtml/OOoTemplate_add", globals()) manage_addOOoTemplate = DTMLFile("dtml/OOoTemplate_add", globals())
def addOOoTemplate(self, id, title="", REQUEST=None): def addOOoTemplate(self, id, title="", xml_file_id="content.xml", REQUEST=None):
"""Add OOo template to folder. """Add OOo template to folder.
id -- the id of the new OOo template to add id -- the id of the new OOo template to add
title -- the title of the OOo to add title -- the title of the OOo to add
xml_file_id -- The Id of edited xml file
Result -- empty string Result -- empty string
""" """
# add actual object # add actual object
id = self._setObject(id, OOoTemplate(id, title)) id = self._setObject(id, OOoTemplate(id, title, xml_file_id))
if REQUEST is not None: if REQUEST is not None:
file = REQUEST.form.get('file') file = REQUEST.form.get('file')
if file.filename: if file.filename:
...@@ -142,6 +143,7 @@ class OOoTemplate(ZopePageTemplate): ...@@ -142,6 +143,7 @@ class OOoTemplate(ZopePageTemplate):
# Default Attributes # Default Attributes
ooo_stylesheet = 'Base_getODTStyleSheet' ooo_stylesheet = 'Base_getODTStyleSheet'
ooo_xml_file_id = 'content.xml'
# Default content type # Default content type
#content_type = 'application/vnd.sun.xml.writer' # Writer type by default #content_type = 'application/vnd.sun.xml.writer' # Writer type by default
...@@ -160,11 +162,11 @@ class OOoTemplate(ZopePageTemplate): ...@@ -160,11 +162,11 @@ class OOoTemplate(ZopePageTemplate):
__name__='formSettings') __name__='formSettings')
formSettings._owner = None formSettings._owner = None
def __init__(self,*args,**kw): def __init__(self, id, title, xml_file_id='content.xml', *args,**kw):
ZopePageTemplate.__init__(self,*args,**kw) ZopePageTemplate.__init__(self, id, title, *args, **kw)
# we store the attachments of the uploaded document # we store the attachments of the uploaded document
self.OLE_documents_zipstring = None self.OLE_documents_zipstring = None
self.ooo_xml_file_id = xml_file_id
# Every OOoTemplate uses UTF-8 or Unicode, so a special StringIO class # Every OOoTemplate uses UTF-8 or Unicode, so a special StringIO class
# must be used, which does not care about response. # must be used, which does not care about response.
def StringIO(self): def StringIO(self):
...@@ -207,8 +209,7 @@ class OOoTemplate(ZopePageTemplate): ...@@ -207,8 +209,7 @@ class OOoTemplate(ZopePageTemplate):
xsl_content = None xsl_content = None
if xsl_dtml is not None: if xsl_dtml is not None:
xsl_content = xsl_dtml() xsl_content = xsl_dtml()
file = builder.prepareContentXml(xsl_content) file = builder.prepareContentXml(self.ooo_xml_file_id, xsl_content)
return ZopePageTemplate.pt_upload(self, REQUEST, file) return ZopePageTemplate.pt_upload(self, REQUEST, file)
security.declareProtected('Change Page Templates', 'pt_edit') security.declareProtected('Change Page Templates', 'pt_edit')
...@@ -220,13 +221,14 @@ class OOoTemplate(ZopePageTemplate): ...@@ -220,13 +221,14 @@ class OOoTemplate(ZopePageTemplate):
self.write(text) self.write(text)
security.declareProtected('Change Page Templates', 'doSettings') security.declareProtected('Change Page Templates', 'doSettings')
def doSettings(self, REQUEST, title, ooo_stylesheet): def doSettings(self, REQUEST, title, xml_file_id, ooo_stylesheet):
""" """
Change title and ooo_stylesheet. Change title, xml_file_id and ooo_stylesheet.
""" """
if SUPPORTS_WEBDAV_LOCKS and self.wl_isLocked(): if SUPPORTS_WEBDAV_LOCKS and self.wl_isLocked():
raise ResourceLockedError, "File is locked via WebDAV" raise ResourceLockedError, "File is locked via WebDAV"
self.ooo_stylesheet = ooo_stylesheet self.ooo_stylesheet = ooo_stylesheet
self.ooo_xml_file_id = xml_file_id
self.pt_setTitle(title) self.pt_setTitle(title)
#REQUEST.set('text', self.read()) # May not equal 'text'! #REQUEST.set('text', self.read()) # May not equal 'text'!
message = "Saved changes." message = "Saved changes."
...@@ -507,7 +509,7 @@ xmlns:config="http://openoffice.org/2001/config" office:version="1.0"> ...@@ -507,7 +509,7 @@ xmlns:config="http://openoffice.org/2001/config" office:version="1.0">
return doc_xml return doc_xml
# Replace content.xml in master openoffice template # Replace content.xml in master openoffice template
ooo_builder.replace('content.xml', doc_xml) ooo_builder.replace(self.ooo_xml_file_id, doc_xml)
# Old templates correction # Old templates correction
try: try:
......
...@@ -134,13 +134,13 @@ class OOoBuilder(Implicit): ...@@ -134,13 +134,13 @@ class OOoBuilder(Implicit):
def getMimeType(self): def getMimeType(self):
return self.extract('mimetype') return self.extract('mimetype')
def prepareContentXml(self, xsl_content=None): def prepareContentXml(self, ooo_xml_file_id, xsl_content=None):
""" """
extracts content.xml text and prepare it : extracts content.xml text and prepare it :
- add tal namespace - add tal namespace
- indent the xml - indent the xml
""" """
content_xml = self.extract('content.xml') content_xml = self.extract(ooo_xml_file_id)
output = StringIO() output = StringIO()
try: try:
import libxml2 import libxml2
...@@ -156,9 +156,6 @@ class OOoBuilder(Implicit): ...@@ -156,9 +156,6 @@ class OOoBuilder(Implicit):
tal = root.newNs('http://xml.zope.org/namespaces/tal', 'tal') tal = root.newNs('http://xml.zope.org/namespaces/tal', 'tal')
i18n = root.newNs('http://xml.zope.org/namespaces/i18n', 'i18n') i18n = root.newNs('http://xml.zope.org/namespaces/i18n', 'i18n')
metal = root.newNs('http://xml.zope.org/namespaces/metal', 'metal') metal = root.newNs('http://xml.zope.org/namespaces/metal', 'metal')
root.setNs(tal)
root.setNs(i18n)
root.setNs(metal)
root.setNsProp(tal, 'attributes', 'dummy python:request.RESPONSE.setHeader(\'Content-Type\', \'text/html;; charset=utf-8\')') root.setNsProp(tal, 'attributes', 'dummy python:request.RESPONSE.setHeader(\'Content-Type\', \'text/html;; charset=utf-8\')')
buff = libxml2.createOutputBuffer(output, 'utf-8') buff = libxml2.createOutputBuffer(output, 'utf-8')
result_doc.saveFormatFileTo(buff, 'utf-8', 1) result_doc.saveFormatFileTo(buff, 'utf-8', 1)
......
...@@ -34,6 +34,23 @@ templates. ...@@ -34,6 +34,23 @@ templates.
</td> </td>
</tr> </tr>
<tr>
<td align="left" valign="top">
<div class="form-label">
Edited XML File Id
</div>
</td>
<td align="left" valign="top">
<select type="select" name="xml_file_id">
<option value=""></option>
<option value="content.xml" selected="selected">Content</option>
<option value="styles.xml">Styles</option>
<option value="meta.xml">Meta</option>
<option value="settings.xml">Settings</option>
</select>
</td>
</tr>
<tr> <tr>
<td align="left" valign="top"> <td align="left" valign="top">
<div class="form-optional"> <div class="form-optional">
......
...@@ -10,12 +10,17 @@ ...@@ -10,12 +10,17 @@
<td><input name="title" value="" type="text" size="20" <td><input name="title" value="" type="text" size="20"
tal:attributes="value request/title | here/title | nothing"/></td> tal:attributes="value request/title | here/title | nothing"/></td>
</tr> </tr>
<tr>
<td class="form-label">OOo XML File Id (Manipulated File)</td>
<td><input name="xml_file_id" value="default_xml_file_id"
type="text" size="20"
tal:attributes="value request/ooo_xml_file_id | here/ooo_xml_file_id | nothing"/></td>
</tr>
<tr> <tr>
<td class="form-label">OOo Stylesheet (Master Document)</td> <td class="form-label">OOo Stylesheet (Master Document)</td>
<td><input name="ooo_stylesheet" value="default_ooo_template" type="text" size="20" <td><input name="ooo_stylesheet" value="default_ooo_template" type="text" size="20"
tal:attributes="value request/ooo_stylesheet | here/ooo_stylesheet | nothing"/></td> tal:attributes="value request/ooo_stylesheet | here/ooo_stylesheet | nothing"/></td>
</tr> </tr>
<tr> <tr>
<td align="left" valign="top"> <td align="left" valign="top">
<div class="form-element"> <div class="form-element">
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment