Commit 11734eb5 authored by Tatuya Kamada's avatar Tatuya Kamada

Make FormPrintout enable to ooo convert.


git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@30712 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 7b0c398b
...@@ -186,11 +186,10 @@ class FormPrintout(Implicit, Persistent, RoleManager, Item): ...@@ -186,11 +186,10 @@ class FormPrintout(Implicit, Persistent, RoleManager, Item):
content_type = printout_template.content_type content_type = printout_template.content_type
self.strategy = self._createStrategy(content_type) self.strategy = self._createStrategy(content_type)
printout = self.strategy.render(extra_context=extra_context) printout = self.strategy.render(extra_context=extra_context)
if REQUEST is not None: return self._oooConvertByFormat(printout,
REQUEST.RESPONSE.setHeader('Content-Type','%s; charset=utf-8' % content_type) content_type=content_type,
REQUEST.RESPONSE.setHeader('Content-disposition', extra_context=extra_context,
'inline;filename="%s%s"' % (self.title_or_id(), guess_extension(content_type))) REQUEST=REQUEST)
return printout
security.declareProtected('View', '__call__') security.declareProtected('View', '__call__')
__call__ = index_html __call__ = index_html
...@@ -214,6 +213,40 @@ class FormPrintout(Implicit, Persistent, RoleManager, Item): ...@@ -214,6 +213,40 @@ class FormPrintout(Implicit, Persistent, RoleManager, Item):
return ODTStrategy() return ODTStrategy()
raise ValueError, 'Do not support the template type:%s' % content_type raise ValueError, 'Do not support the template type:%s' % content_type
def _oooConvertByFormat(self, printout, content_type=None, extra_context={}, REQUEST=None):
"""
Convert the ODF document into the given format.
Keyword arguments:
printout -- ODF document
content_type -- the content type of the printout
extra_context -- extra_context including a format
REQUEST -- Request object
"""
options = extra_context.get('options', {})
format = None
if REQUEST is not None:
format = options.get('format', REQUEST.get('format', None))
if format is None:
if REQUEST is not None:
REQUEST.RESPONSE.setHeader('Content-Type','%s; charset=utf-8' % content_type)
REQUEST.RESPONSE.setHeader('Content-disposition',
'inline;filename="%s%s"' % (self.title_or_id(), guess_extension(content_type)))
return printout
from Products.ERP5Type.Document import newTempOOoDocument
tmp_ooo = newTempOOoDocument(self, self.title_or_id())
tmp_ooo.edit(base_data=printout,
fname=self.title_or_id(),
source_reference=self.title_or_id(),
base_content_type=content_type)
tmp_ooo.oo_data = printout
mime, data = tmp_ooo.convert(format)
if REQUEST is not None:
REQUEST.RESPONSE.setHeader('Content-type', mime)
REQUEST.RESPONSE.setHeader('Content-disposition',
'attachment;filename="%s.%s"' % (self.title_or_id(), format))
return data
InitializeClass(FormPrintout) InitializeClass(FormPrintout)
class ODFStrategy(Implicit): class ODFStrategy(Implicit):
......
...@@ -31,6 +31,7 @@ import unittest ...@@ -31,6 +31,7 @@ import unittest
import transaction import transaction
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from Products.ERP5Type.tests.utils import createZODBPythonScript from Products.ERP5Type.tests.utils import createZODBPythonScript
from Products.MimetypesRegistry.mime_types.magic import guessMime
from AccessControl.SecurityManagement import newSecurityManager from AccessControl.SecurityManagement import newSecurityManager
from Products.ERP5OOo.OOoUtils import OOoBuilder from Products.ERP5OOo.OOoUtils import OOoBuilder
from Products.ERP5OOo.tests.utils import Validator from Products.ERP5OOo.tests.utils import Validator
...@@ -53,6 +54,7 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -53,6 +54,7 @@ class TestFormPrintout(ERP5TypeTestCase):
def afterSetUp(self): def afterSetUp(self):
self.login() self.login()
self.setSystemPreference()
foo_file_path = os.path.join(os.path.dirname(__file__), foo_file_path = os.path.join(os.path.dirname(__file__),
'test_document', 'test_document',
'Foo_001.odt') 'Foo_001.odt')
...@@ -126,6 +128,15 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -126,6 +128,15 @@ class TestFormPrintout(ERP5TypeTestCase):
user = uf.getUserById('tatuya').__of__(uf) user = uf.getUserById('tatuya').__of__(uf)
newSecurityManager(None, user) newSecurityManager(None, user)
def setSystemPreference(self):
default_pref = self.portal.portal_preferences.default_site_preference
default_pref.setPreferredOoodocServerAddress('127.0.0.1')
default_pref.setPreferredOoodocServerPortNumber('8008')
#default_pref.setPreferredConversionCacheFactory('document_cache_factory')
if default_pref.getPreferenceState() != 'global':
default_pref.enable()
def _validate(self, odf_file_data): def _validate(self, odf_file_data):
error_list = self.validator.validate(odf_file_data) error_list = self.validator.validate(odf_file_data)
if error_list: if error_list:
...@@ -315,7 +326,6 @@ class TestFormPrintout(ERP5TypeTestCase): ...@@ -315,7 +326,6 @@ class TestFormPrintout(ERP5TypeTestCase):
self.assertTrue(content_xml.find("test title") < 0) self.assertTrue(content_xml.find("test title") < 0)
self._validate(odf_document) self._validate(odf_document)
def test_02_Table_01_Normal(self, run=run_all_test): def test_02_Table_01_Normal(self, run=run_all_test):
"""To test listbox and ODF table mapping """To test listbox and ODF table mapping
...@@ -1159,6 +1169,28 @@ return [] ...@@ -1159,6 +1169,28 @@ return []
self.assertTrue(content_xml.find('<draw:image xlink:href') < 0) self.assertTrue(content_xml.find('<draw:image xlink:href') < 0)
self._validate(odf_document) self._validate(odf_document)
def test_08_OOoConversion(self, run=run_all_test):
"""test ooo conversion"""
if not run: return
foo_printout = self.portal.foo_module.test1.Foo_viewAsPrintout
foo_form = self.portal.foo_module.test1.Foo_view
if foo_form._getOb("my_test_title", None) is None:
foo_form.manage_addField('my_test_title', 'test title', 'StringField')
test_title = foo_form.my_test_title
test_title.values['default'] = 'ZZZ test here ZZZ'
self.portal.REQUEST.set('format', 'pdf')
printout = foo_printout(REQUEST=self.portal.REQUEST)
#test_output = open("/tmp/test_99_OOoConversion.pdf", "w")
#test_output.write(printout.data)
self.assertEqual('application/pdf', guessMime(printout.data))
self.portal.REQUEST.set('format', 'doc')
printout = foo_printout(REQUEST=self.portal.REQUEST)
#test_output = open("/tmp/test_99_OOoConversion.doc", "w")
#test_output.write(printout.data)
self.assertEqual('application/msword', guessMime(printout.data))
def test_suite(): def test_suite():
suite = unittest.TestSuite() suite = unittest.TestSuite()
......
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