From bf8aa33c81caa12afb0a253194ef27eaa7f727e9 Mon Sep 17 00:00:00 2001 From: Sebastien Robin <seb@nexedi.com> Date: Wed, 17 Dec 2003 09:10:51 +0000 Subject: [PATCH] changed many things for the export of workflows git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@120 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5Type/Base.py | 71 ++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 25 deletions(-) diff --git a/product/ERP5Type/Base.py b/product/ERP5Type/Base.py index 75a3abf49a6..b0fed118d25 100755 --- a/product/ERP5Type/Base.py +++ b/product/ERP5Type/Base.py @@ -1136,16 +1136,19 @@ class Base( CopyContainer, PortalContent, Base18, ActiveObject, ERP5PropertyMana """ Generate an xml text corresponding to the content of this object """ + xml = '' + if ident==0: + xml += '<erp5>' LOG('asXML',0,'Working on: %s' % str(self.getPath())) ident_string = '' # This is used in order to have the ident incremented # for every sub-object for i in range(0,ident): ident_string += ' ' - xml = ident_string + '<object id=\"%s\" portal_type=\"%s\">\n' % (self.getId(),self.portal_type) + xml += ident_string + '<object id=\"%s\" portal_type=\"%s\">\n' % (self.getId(),self.portal_type) binary_data = self.getBinaryData() # If we have an object containing some binary data - if binary_data is not None: + if binary_data is not None and 0==1: msg = MIMEBase('application','octet-stream') msg.set_payload(binary_data.getvalue()) Encoders.encode_base64(msg) @@ -1160,12 +1163,25 @@ class Base( CopyContainer, PortalContent, Base18, ActiveObject, ERP5PropertyMana #if not prop.has_key('acquisition_base_category') \ # and prop['id'] != 'categories_list' and prop['id'] != 'uid': if prop_id not in ('uid',): - prop_type = 'type="' + self.getPropertyType(prop_id) + '"' + prop_type = self.getPropertyType(prop_id) + xml_prop_type = 'type="' + prop_type + '"' + #try: value = self.getProperty(prop_id) + #except AttributeError: + # value=None - xml += ident_string + ' <%s %s>' %(prop_id,prop_type) + xml += ident_string + ' <%s %s>' %(prop_id,xml_prop_type) if value is None: pass + elif prop_type in ('image','file','document'): + LOG('asXML',0,'value: %s' % str(value)) + # This property is binary and should be converted with mime + msg = MIMEBase('application','octet-stream') + msg.set_payload(value.getvalue()) + Encoders.encode_base64(msg) + ascii_data = msg.get_payload() + ascii_data = ascii_data.replace('\n','@@@\n') + xml+=ascii_data elif self.getPropertyType(prop_id) in ['lines','tokens']: i = 1 for line in value: @@ -1173,31 +1189,35 @@ class Base( CopyContainer, PortalContent, Base18, ActiveObject, ERP5PropertyMana if i<len(value): xml+='@@@' # XXX very bad hack, must find something better i += 1 - elif self.getPropertyType(prop_id)=='text': + elif self.getPropertyType(prop_id) in ('text','string'): xml += str(value).replace('\n','@@@') else: xml+= str(value) xml += '</%s>\n' % prop_id + # We have to describe the workflow history - """ - xml += ident_string + ' <workflow_history>\n' - workflow_list = self.workflow_history - workflow_list_keys = workflow_list.keys() - workflow_list_keys.sort() - for workflow_id in workflow_list_keys: # Make sure it is sorted - xml += ident_string + ' <workflow id=\"%s\">\n' % workflow_id - for workflow_action in workflow_list[workflow_id]: # It is already sorted - xml += ident_string + ' <workflow_action>\n' - worfklow_variable_list = workflow_action.keys() - worfklow_variable_list.sort() - for workflow_variable in worfklow_variable_list: # Make sure it is sorted - xml += ident_string + ' <%s>%s' % (workflow_variable, - workflow_action[workflow_variable]) - xml += '</%s>\n' % workflow_variable - xml += ident_string + ' </workflow_action>\n' - xml += ident_string + ' </workflow>\n' - xml += ident_string + ' </workflow_history>\n' - """ + if hasattr(self,'workflow_history'): + xml += ident_string + ' <workflow_history>\n' + workflow_list = self.workflow_history + workflow_list_keys = workflow_list.keys() + workflow_list_keys.sort() # Make sure it is sorted + + for workflow_id in workflow_list_keys: + xml += ident_string + ' <workflow id=\"%s\">\n' % workflow_id + for workflow_action in workflow_list[workflow_id]: # It is already sorted + xml += ident_string + ' <workflow_action>\n' + worfklow_variable_list = workflow_action.keys() + worfklow_variable_list.sort() + for workflow_variable in worfklow_variable_list: # Make sure it is sorted + variable_type = "string" # Somewhat bad, should find a better way + if workflow_variable.find('time')>= 0: + variable_type = "date" + xml += ident_string + ' <%s type=\"%s\">%s' % (workflow_variable, + variable_type,workflow_action[workflow_variable]) + xml += '</%s>\n' % workflow_variable + xml += ident_string + ' </workflow_action>\n' + xml += ident_string + ' </workflow>\n' + xml += ident_string + ' </workflow_history>\n' # We should not describe security settings xml += ident_string + ' <security_info>\n' @@ -1211,13 +1231,14 @@ class Base( CopyContainer, PortalContent, Base18, ActiveObject, ERP5PropertyMana # We have finished to generate the xml xml += ident_string + '</object>\n' + if ident==0: + xml += '</erp5>' # Now convert the string as unicode if type(xml) is type(u"a"): xml_unicode = xml else: xml_unicode = unicode(xml,encoding='iso-8859-1') return xml_unicode.encode('utf-8') - # Optimized Menu System security.declarePublic('allowedContentTypes') def allowedContentTypes( self ): -- 2.30.9