diff --git a/Products/zms/_exportable.py b/Products/zms/_exportable.py index 0e5bcfabc..816c09899 100644 --- a/Products/zms/_exportable.py +++ b/Products/zms/_exportable.py @@ -25,6 +25,8 @@ import os import re import sys +import xmltodict +import json # Product Imports. from Products.zms import _blobfields from Products.zms import _fileutil @@ -383,12 +385,18 @@ def toXhtml(self, REQUEST, deep=True): # -------------------------------------------------------------------------- # Exportable.toXml: # -------------------------------------------------------------------------- - def toXml(self, REQUEST, deep=True, data2hex=False): + def toXml(self, REQUEST, deep=True, data2hex=False, multilang=True): xml = '' xml += _xmllib.xml_header() - xml += _xmllib.getObjToXml( self, REQUEST, deep, base_path='', data2hex=data2hex) + xml += _xmllib.getObjToXml( self, REQUEST, deep, base_path='', data2hex=data2hex, multilang=multilang) return xml + # -------------------------------------------------------------------------- + # Exportable.toJson: + # -------------------------------------------------------------------------- + def toJson(self, REQUEST, deep=True, data2hex=False, multilang=True): + xml = self.toXml(REQUEST, deep, data2hex, multilang) + return json.dumps(xmltodict.parse(xml)) # -------------------------------------------------------------------------- # Exportable.exportRessources: diff --git a/Products/zms/_xmllib.py b/Products/zms/_xmllib.py index e3d58b38f..781f652fb 100644 --- a/Products/zms/_xmllib.py +++ b/Products/zms/_xmllib.py @@ -630,11 +630,11 @@ def getAttrToXml(self, base_path, data2hex, obj_attr, REQUEST): # ------------------------------------------------------------------------------ # _xmllib.getObjPropertyToXml: # ------------------------------------------------------------------------------ -def getObjPropertyToXml(self, base_path, data2hex, obj_attr, REQUEST): +def getObjPropertyToXml(self, REQUEST, base_path='', data2hex=False, obj_attr={}, multilang=True): xml = '' # Multi-Language Attributes. indentlevel = len(base_path.split('/')) - if obj_attr['multilang']: + if obj_attr['multilang'] and multilang==True: lang = REQUEST.get('lang') langIds = self.getLangIds() for langId in langIds: @@ -653,7 +653,7 @@ def getObjPropertyToXml(self, base_path, data2hex, obj_attr, REQUEST): # ------------------------------------------------------------------------------ # _xmllib.getObjToXml: # ------------------------------------------------------------------------------ -def getObjToXml(self, REQUEST, deep=True, base_path='', data2hex=False): +def getObjToXml(self, REQUEST, deep=True, base_path='', data2hex=False, multilang=True): # Check Constraints. root = getattr(self, '__root__', None) if root is not None: @@ -678,12 +678,12 @@ def getObjToXml(self, REQUEST, deep=True, base_path='', data2hex=False): for key in keys: obj_attr = self.getObjAttr(key) if obj_attr['xml'] or key in ['change_dt','change_uid','created_dt','created_uid']: - ob_prop = getObjPropertyToXml(self, base_path, data2hex, obj_attr, REQUEST) + ob_prop = getObjPropertyToXml(self, REQUEST, base_path, data2hex, obj_attr, multilang) if len(ob_prop) > 0: xml.append('%s<%s>%s\n' % ( (indentlevel+1) * INDENTSTR, key, ob_prop, key ) ) # Process children. if deep: - xml.extend([getObjToXml(x, REQUEST, deep, base_path + x.id + '/', data2hex) for x in self.getChildNodes()]) + xml.extend([getObjToXml(x, REQUEST, deep, base_path + x.id + '/', data2hex, multilang) for x in self.getChildNodes()]) # End tag. xml.append('%s\n' % ( indentlevel * INDENTSTR, self.meta_id ) ) # Return xml.