Skip to content

Commit

Permalink
json serializable blob-fields
Browse files Browse the repository at this point in the history
  • Loading branch information
zmsdev committed Jul 17, 2023
1 parent dd3d931 commit 2a58a8a
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1294,7 +1294,6 @@ ZMIObjectTree.prototype.addPages = function(pages) {
var page_is_page = $page.attr("is_page")=='1' || $page.attr("is_page")=='True';
var page_is_pageelement = $page.attr("is_pageelement")=='1' || $page.attr("is_pageelement")=='True';
var page_meta_type = $page.attr("meta_id");
var page_type = $page.attr("attr_dc_type");
var page_titlealt = $page.attr("titlealt");
var page_icon = $page.attr("zmi_icon");
var anchor = "";
Expand All @@ -1314,11 +1313,6 @@ ZMIObjectTree.prototype.addPages = function(pages) {
if (page_is_restricted) {
css.push("restricted");
};
if (typeof(page_type) != 'undefined') {
if ( page_type.length > 0 ) {
css.push('type-'+page_type)
}
};
html += '<ul data-id="' + page_id + '" data-home-id="' + page_home_id + '" class="zmi-page ' + page_meta_type + '">';
html += '<li class="' + css.join(' ') + '">';
html += $ZMI.icon("fas fa-caret-right toggle",'title="+" onclick="$ZMI.objectTree.toggleClick(this' + (typeof callback=="undefined"?'':',' + callback) + ')"') + ' ';
Expand Down
25 changes: 22 additions & 3 deletions Products/zms/rest_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
# Imports.
import copy
import json
# Product Imports.
from Products.zms import _blobfields
from Products.zms import standard


def get_meta_data(node):
Expand All @@ -27,6 +30,8 @@ def get_meta_data(node):
data['meta_id'] = node.meta_id
data['uid'] = node.get_uid()
data['getPath'] = '/'.join(node.getPhysicalPath())
data['level'] = node.getLevel()
data['restricted'] = node.hasRestrictedAccess()
return data


Expand All @@ -37,7 +42,21 @@ def get_rest_api_url(url):
i = url.find('://')+len('://')
i = i+url[i:].find('/')
return '%s/++rest_api%s'%(url[:i],url[i:])



def get_attr(node, id):
value = node.attr(id)
if isinstance(value,_blobfields.MyBlob):
REQUEST = node.REQUEST
d = {}
d['href'] = value.getHref(REQUEST)
d['filename'] = value.getFilename()
d['content_type'] = value.getContentType()
d['size'] = value.get_size()
d['icon'] = standard.getMimeTypeIconSrc(value.getContentType())
value = d
return value


class RestApiController(object):
"""
Expand Down Expand Up @@ -121,9 +140,9 @@ def __call__(self, REQUEST=None, **kw):
if metaobj_attr['multilang']:
for lang in langs:
REQUEST.set('lang',lang)
data[id if monolang else '%s_%s'%(id,lang)] = context.attr(id)
data[id if monolang else '%s_%s'%(id,lang)] = get_attr(context,id)
else:
data[id] = context.attr(id)
data[id] = get_attr(context,id)
REQUEST.RESPONSE.setHeader('Content-Type','application/json')
return json.dumps(data)
return None
20 changes: 4 additions & 16 deletions Products/zms/zmsobject.py
Original file line number Diff line number Diff line change
Expand Up @@ -1219,7 +1219,6 @@ def ajaxGetNode(self, context=None, lang=None, xml_header=True, meta_types=None,
xml += " title=\"%s\""%standard.html_quote(self.getTitle(REQUEST))
xml += " titlealt=\"%s\""%standard.html_quote(self.getTitlealt(REQUEST))
xml += " restricted=\"%s\""%str(self.hasRestrictedAccess())
xml += " attr_dc_type=\"%s\""%(self.attr('attr_dc_type'))
xml += ">"
if REQUEST.form.get('get_attrs', 0):
obj_attrs = self.getObjAttrs()
Expand Down Expand Up @@ -1341,30 +1340,19 @@ def ajaxGetChildNodes(self, lang, xml_header=True, meta_types=None, REQUEST=None
if REQUEST.form.get('http_referer'):
REQUEST.set('URL', REQUEST.form.get('http_referer'))

# Add child-nodes.
obs = []
# Get child-nodes.
childNodes = self.getChildNodes(REQUEST, meta_types)

# Exclude meta-ids.
excludeMetaIds = self.getConfProperty('ZMS.ajaxGetChildNodes.excludeMetaIds','').split(',')
childNodes = [x for x in childNodes if x.meta_id not in excludeMetaIds]

# Sort.
sortedChildNodes = self.evalMetaobjAttr('sortChildNodes',childNodes=childNodes)
if isinstance(sortedChildNodes,list):
childNodes = sortedChildNodes

obs.extend(childNodes)

# Add trashcan.
if ( self.meta_type == 'ZMS') and \
( ( isinstance(meta_types, list) and 'ZMSTrashcan' in meta_types) or \
( isinstance(meta_types, str) and 'ZMSTrashcan' == meta_types)):
obs.append( self.getTrashcan())
# Portal-CLients
if self.meta_type == 'ZMS':
obs.extend( self.getPortalClients())
childNodes.extend( self.getPortalClients())

for ob in obs:
for ob in childNodes:
xml += ob.ajaxGetNode( context=context, lang=lang, xml_header=False, meta_types=meta_types, REQUEST=REQUEST)

xml += "</pages>"
Expand Down

0 comments on commit 2a58a8a

Please sign in to comment.