Skip to content

Commit

Permalink
embed remote with json instead xml
Browse files Browse the repository at this point in the history
  • Loading branch information
zmsdev committed Jul 17, 2023
1 parent d5c575a commit dd3d931
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 38 deletions.
10 changes: 10 additions & 0 deletions Products/zms/rest_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,16 @@ def __call__(self, REQUEST=None, **kw):
monolang = self.ids and self.ids[0] in langs
langs = self.ids if monolang else langs
data = get_meta_data(context)
for lang in langs:
REQUEST.set('lang',lang)
id = 'active'
data[id if monolang else '%s_%s'%(id,lang)] = context.isActive(REQUEST)
id = 'title'
data[id if monolang else '%s_%s'%(id,lang)] = context.getTitle(REQUEST)
id = 'titlealt'
data[id if monolang else '%s_%s'%(id,lang)] = context.getTitlealt(REQUEST)
data['is_page'] = context.isPage()
data['is_page_element'] = context.isPageElement()
obj_attrs = context.getObjAttrs()
metaobj_attrs = context.getMetaobjManager().getMetaobjAttrs(self.context.meta_id)
for metaobj_attr in metaobj_attrs:
Expand Down
68 changes: 30 additions & 38 deletions Products/zms/zmslinkelement.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@
# Imports.
from AccessControl import ClassSecurityInfo
from AccessControl.class_init import InitializeClass
import json
import sys
# Product Imports.
from Products.zms import rest_api
from Products.zms import standard
from Products.zms import zmscontainerobject
from Products.zms import zmscustom
from Products.zms import zmsobject
from Products.zms import zmsproxyobject
from Products.zms import standard
from Products.zms import _xmllib
from Products.zms import zmslinkelement

"""
Expand Down Expand Up @@ -207,9 +208,11 @@ def getRefObj(self):
def getRemoteObj(self):
value = None
ref = self.getRef()
remote_ref = rest_api.get_rest_api_url( ref)
try:
value = self.http_import( ref + '/ajaxGetNode?lang=%s'%lang)
value = _xmllib.xmlParse( value)
lang = self.REQUEST.get('lang',self.getPrimaryLanguage())
value = self.http_import( '%s/%s'%(remote_ref,lang))
value = json.loads(value)
except:
standard.writeError(self, '[getRemoteObj]: can\'t embed from remote: ref=%s'%ref)
return value
Expand Down Expand Up @@ -293,10 +296,7 @@ def getTitlealtPROXY(self, proxy, REQUEST):
def getTitlealt(self, REQUEST):
rtn = ''
if self.getEmbedType() == 'remote':
remote_obj = self.getRemoteObj()
if isinstance(remote_obj, list):
for node in _xmllib.xmlNodeSet( remote_obj, 'titlealt'):
rtn = node['cdata']
return self.getRemoteObj()['titlealt']
else:
proxy = self.getProxy()
rtn = self.getTitlealtPROXY( proxy, REQUEST)
Expand Down Expand Up @@ -324,10 +324,7 @@ def getTitlePROXY(self, proxy, REQUEST):
def getTitle(self, REQUEST):
rtn = ''
if self.getEmbedType() == 'remote':
remote_obj = self.getRemoteObj()
if isinstance(remote_obj, list):
for node in _xmllib.xmlNodeSet( remote_obj, 'title'):
rtn = node['cdata']
return self.getRemoteObj()['title']
else:
proxy = self.getProxy()
rtn = self.getTitlePROXY( proxy, REQUEST)
Expand All @@ -354,9 +351,7 @@ def display_icon(self, REQUEST=None, meta_type=None):
def isActive(self, REQUEST):
active = super(ZMSLinkElement, self).isActive(REQUEST)
if self.getEmbedType() == 'remote':
remote_obj = self.getRemoteObj()
if isinstance(remote_obj, list):
rtnVal = remote_obj[1]['attrs']['active'] in ['1', 'True']
return self.getRemoteObj()['active']
else:
ref_obj = self.getRefObj()
if ref_obj is not None:
Expand All @@ -377,9 +372,7 @@ def isPageContainer(self):
def isPage(self):
rtnVal = False
if self.getEmbedType() == 'remote':
remote_obj = self.getRemoteObj()
if isinstance(remote_obj, list):
rtnVal = remote_obj[1]['attrs']['is_page'] in ['1', 'True']
return self.getRemoteObj()['is_page']
else:
if self.isEmbedded( self.REQUEST):
ref_obj = self.getRefObj()
Expand All @@ -394,9 +387,7 @@ def isPage(self):
def isPageElement(self):
rtnVal = False
if self.getEmbedType() == 'remote':
remote_obj = self.getRemoteObj()
if isinstance(remote_obj, list):
rtnVal = remote_obj[1]['attrs']['is_pageelement'] in ['1', 'True']
return self.getRemoteObj()['is_page_element']
else:
if self.isEmbedded( self.REQUEST):
ref_obj = self.getRefObj()
Expand Down Expand Up @@ -538,25 +529,27 @@ def getHref2IndexHtml(self, REQUEST, deep=1):
# --------------------------------------------------------------------------
def _getBodyContent(self, REQUEST):
rtn = ''
ref_obj = self.getRefObj()
ref = self.getObjProperty('attr_ref', REQUEST)

if self.getEmbedType() == 'remote':
ref = self.getObjProperty('attr_ref', REQUEST)
try:
rtn += self.http_import( ref+'/ajaxGetBodyContent')
except:
rtn += standard.writeError(self, '[_getBodyContent]: can\'t embed from remote: ref=%s'%ref)
remote_ref = rest_api.get_rest_api_url( ref)
try:
rtn = self.http_import( remote_ref + '/get_body_content')
except:
rtn = standard.writeError(self, '[_getBodyContent]: can\'t embed from remote_ref=%s'%remote_ref)

else:
if self.isEmbedded(REQUEST):
REQUEST.set('ZMS_RELATIVATE_URL', False)
proxy = self.getProxy()
if proxy != self and proxy is not None and self.isEmbeddedRecursive( self.REQUEST):
rtn += proxy._getBodyContent(REQUEST)
rtn = proxy._getBodyContent(REQUEST)
elif proxy == self and proxy is not None and self.isEmbedded( REQUEST):
ref_obj = self.getRefObj()
if ref_obj is None:
ref = self.getObjProperty('attr_ref', REQUEST)
ref_obj = self.getLinkObj(ref)
if ref_obj is not None and ref_obj != self:
rtn += ref_obj._getBodyContent( REQUEST)
rtn = ref_obj._getBodyContent( REQUEST)
else:
rtn = self._getBodyContentContentEditable(self.metaobj_manager.renderTemplate( self))
if self.isEmbedded(REQUEST):
Expand All @@ -575,24 +568,23 @@ def renderShort(self, REQUEST):
ref = self.getObjProperty('attr_ref', REQUEST)

if self.getEmbedType() == 'remote':
i = ref.find('/content')
remote_ref = ref[:i]+'/++rest_api'+ref[i+len('/content'):] if i >=0 else
remote_ref = rest_api.get_rest_api_url( ref)
try:
rtn += self.http_import( ref+'/get_body_content')
rtn = self.http_import( remote_ref + '/get_body_content')
except:
rtn += standard.writeError(self, '[renderShort]: can\'t embed from remote: ref=%s'%ref)
rtn = standard.writeError(self, '[renderShort]: can\'t embed from remote_ref=%s'%remote_ref)

elif self.isEmbedded(REQUEST):
REQUEST.set('ZMS_RELATIVATE_URL', False)
if ref_obj is None:
ref_obj = self.getLinkObj(ref)
if ref_obj is None or ref_obj.isPage():
rtn += super(ZMSLinkElement, self).renderShort(REQUEST)
rtn = super(ZMSLinkElement, self).renderShort(REQUEST)
elif ref_obj != self:
rtn += ref_obj.renderShort(REQUEST)
rtn = ref_obj.renderShort(REQUEST)
REQUEST.set('ZMS_RELATIVATE_URL', True)
else:
rtn += self._getBodyContent( REQUEST)
rtn = self._getBodyContent( REQUEST)
return rtn


Expand Down

0 comments on commit dd3d931

Please sign in to comment.