diff --git a/CHANGES.rst b/CHANGES.rst index 85f4547..86668b4 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -6,6 +6,8 @@ Changelog - Fix bug search event restapi (#148) [mamico] +- Added new service to list blocks types and where are used. + [daniele] 5.9.3 (2025-11-24) diff --git a/src/redturtle/volto/restapi/services/blocks/__init__.py b/src/redturtle/volto/restapi/services/blocks/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/redturtle/volto/restapi/services/blocks/configure.zcml b/src/redturtle/volto/restapi/services/blocks/configure.zcml new file mode 100644 index 0000000..ae9df9e --- /dev/null +++ b/src/redturtle/volto/restapi/services/blocks/configure.zcml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/src/redturtle/volto/restapi/services/blocks/get.py b/src/redturtle/volto/restapi/services/blocks/get.py new file mode 100644 index 0000000..a555efc --- /dev/null +++ b/src/redturtle/volto/restapi/services/blocks/get.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- +from plone.dexterity.interfaces import IDexterityContainer +from plone.restapi.services import Service +from zope.component import adapter +from zope.interface import Interface +from plone import api +from plone.restapi.interfaces import ISerializeToJson +from zope.component import getMultiAdapter +import json + +# @adapter(IDexterityContainer, Interface) +# class BlocksHandler(object): +# def __init__(self, context, request): +# self.context = context +# self.request = request + +# def __call__(self): +# import pdb;pdb.set_trace() + +# catalog = api.portal.get_tool("portal_catalog") +# zcatalog = catalog._catalog + +# blocks_index = zcatalog.getIndex("block_types") +# data_indexed = blocks_index._index + +# results = {} + +# for docids in data_indexed.values(): +# for docid in docids: +# zcinfo = zcatalog.getIndexDataForRID(docid) +# for btype in zcinfo.get("block_types", []): +# tmp_list = results.get(btype, []) +# brain_path = zcinfo.get("path", "") +# if brain_path not in tmp_list: +# tmp_list.append(brain_path) + +# results.update({btype: tmp_list}) + +# import pdb;pdb.set_trace() + +# #results = getMultiAdapter((results, self.request), ISerializeToJson)() +# return results + +# # for key, value in data_indexed.iteritems(): +# # for item in value.values(): +# # pass +# # #results.update(key: "") + + +# # brains = catalog(index="block_types") +# # if not brains: +# # return + +# # for brain in brains: + + + +class BlocksGet(Service): + def reply(self): + catalog = api.portal.get_tool("portal_catalog") + zcatalog = catalog._catalog + + blocks_index = zcatalog.getIndex("block_types") + data_indexed = blocks_index._index + + results = {} + + for docids in data_indexed.values(): + for docid in docids: + zcinfo = zcatalog.getIndexDataForRID(docid) + for btype in zcinfo.get("block_types", []): + tmp_list = results.get(btype, []) + brain_path = zcinfo.get("path", "") + if brain_path not in tmp_list: + tmp_list.append(brain_path) + + results.update({btype: tmp_list}) + + return json.dumps(results) + diff --git a/src/redturtle/volto/restapi/services/configure.zcml b/src/redturtle/volto/restapi/services/configure.zcml index 25e3acb..e8e02f1 100644 --- a/src/redturtle/volto/restapi/services/configure.zcml +++ b/src/redturtle/volto/restapi/services/configure.zcml @@ -3,6 +3,7 @@ xmlns:zcml="http://namespaces.zope.org/zcml" > +