Skip to content

Commit

Permalink
add new field and @search-filters endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
cekk committed Aug 18, 2024
1 parent 1d89311 commit 0e69cde
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src/iosanita/policy/interfaces.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,18 @@ class IIoSanitaSettings(Interface):
required=False,
)

quick_search_sections = SourceText(
title=_(
"quick_search_sections_label", default="Percorsi per la ricerca rapida"
),
description=_(
"search_sections_help",
default="Inserire una lista di sezioni per la ricerca rapida.",
),
default="",
required=False,
)

show_modified_default = Bool(
title=_("show_modified_default_label", default="Mostra la data di modifica"),
description=_(
Expand Down
2 changes: 2 additions & 0 deletions src/iosanita/policy/restapi/services/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@
>

<include package=".search_tassonomie" />
<include package=".search_filters" />


</configure>
Empty file.
16 changes: 16 additions & 0 deletions src/iosanita/policy/restapi/services/search_filters/configure.zcml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:plone="http://namespaces.plone.org/plone"
>

<plone:service
method="GET"
accept="application/json,application/schema+json"
factory=".get.SearchFiltersGET"
for="*"
permission="zope2.View"
layer="iosanita.policy.interfaces.IIosanitaPolicyLayer"
name="@search-filters"
/>

</configure>
66 changes: 66 additions & 0 deletions src/iosanita/policy/restapi/services/search_filters/get.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# -*- coding: utf-8 -*-
from iosanita.policy import _
from plone import api
from plone.restapi.interfaces import ISerializeToJsonSummary
from plone.restapi.services import Service
from zope.component import getMultiAdapter
from iosanita.policy.interfaces import IIoSanitaSettings
from AccessControl.unauthorized import Unauthorized

import json


class SearchFiltersGET(Service):
def reply(self):
return {
"sections": self.get_section_data(field_id="search_sections"),
"quick_search_sections": self.get_section_data(
field_id="quick_search_sections"
),
}

def get_section_data(self, field_id):
try:
values = api.portal.get_registry_record(
field_id, interface=IIoSanitaSettings, default="[]"
)
except KeyError:
return []
utils = api.portal.get_tool(name="plone_utils")

sections = []
for setting in json.loads(values or "[]"):
items = []
for section_settings in setting.get("items") or []:
for uid in section_settings.get("linkUrl") or []:
try:
section = api.content.get(UID=uid)
except Unauthorized:
# private folder
continue
if not section:
continue
item_infos = getMultiAdapter(
(section, self.request),
ISerializeToJsonSummary,
)()
children = section.listFolderContents(
contentFilter={"portal_type": utils.getUserFriendlyTypes()}
)
item_infos["items"] = [
getMultiAdapter(
(x, self.request),
ISerializeToJsonSummary,
)()
for x in children
]
item_infos["title"] = section_settings.get("title", "")
items.append(item_infos)
if items:
sections.append(
{
"rootPath": setting.get("rootPath", ""),
"items": items,
}
)
return sections

0 comments on commit 0e69cde

Please sign in to comment.