Skip to content

Commit

Permalink
make package more extensible
Browse files Browse the repository at this point in the history
  • Loading branch information
cekk committed Oct 16, 2023
1 parent cea20d6 commit 3ad0dae
Show file tree
Hide file tree
Showing 7 changed files with 127 additions and 146 deletions.
8 changes: 0 additions & 8 deletions src/design/plone/contenttypes/behaviors/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -251,14 +251,6 @@
provides=".contatti.IContattiEvent"
marker=".contatti.IContattiEvent"
/>
<plone:behavior
name="design.plone.contenttypes.behavior.geolocation_uo"
title="Geolocatable"
description="Behavior geolocatable per UO."
factory=".geolocation.GeolocatableUnitaOrganizzativa"
provides=".geolocation.IGeolocatableUnitaOrganizzativa"
marker=".geolocation.IGeolocatableUnitaOrganizzativa"
/>
<plone:behavior
name="design.plone.contenttypes.behavior.geolocation_venue"
title="Geolocatable"
Expand Down
15 changes: 9 additions & 6 deletions src/design/plone/contenttypes/events/evento.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
from Products.CMFPlone.interfaces import ISelectableConstrainTypes


GALLERIA_MAPPING = {"id": "immagini", "title": "Immagini"}

DOCUMENTI_TITLE = "Allegati"


def eventoCreateHandler(evento, event):
"""
Complete content type evento setup on added event, generating
Expand All @@ -16,12 +21,12 @@ def eventoCreateHandler(evento, event):
"""
if not IDesignPloneContenttypesLayer.providedBy(evento.REQUEST):
return
if "immagini" not in evento.keys():
if GALLERIA_MAPPING["id"] not in evento.keys():
galleria = api.content.create(
container=evento,
type="Document",
title="Immagini",
id="immagini",
title=GALLERIA_MAPPING["title"],
id=GALLERIA_MAPPING["id"],
)
create_default_blocks(context=galleria)

Expand All @@ -33,8 +38,6 @@ def eventoCreateHandler(evento, event):
with api.env.adopt_roles(["Reviewer"]):
api.content.transition(obj=galleria, transition="publish")

if not IDesignPloneContenttypesLayer.providedBy(evento.REQUEST):
return
if "video" not in evento.keys():
galleria_video = api.content.create(
container=evento,
Expand Down Expand Up @@ -72,7 +75,7 @@ def eventoCreateHandler(evento, event):
documenti = api.content.create(
container=evento,
type="Document",
title="Allegati",
title=DOCUMENTI_TITLE,
id="documenti",
)
create_default_blocks(context=documenti)
Expand Down
53 changes: 27 additions & 26 deletions src/design/plone/contenttypes/events/persona.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,33 @@
from plone import api
from Products.CMFPlone.interfaces import ISelectableConstrainTypes

FOLDERS = [
{
"id": "foto-e-attivita-politica",
"title": "Foto e attività politica",
"contains": ("Image",),
},
{"id": "curriculum-vitae", "title": "Curriculum vitae", "contains": ("File",)},
{
"id": "situazione-patrimoniale",
"title": "Situazione patrimoniale",
"contains": ("File",),
},
{
"id": "dichiarazione-dei-redditi",
"title": "Dichiarazione dei redditi",
"contains": ("File",),
},
{"id": "spese-elettorali", "title": "Spese elettorali", "contains": ("File",)},
{
"id": "variazione-situazione-patrimoniale",
"title": "Variazione situazione patrimoniale",
"contains": ("File",),
},
{"id": "altre-cariche", "title": "Altre cariche", "contains": ("File",)},
{"id": "incarichi", "title": "Incarichi", "contains": ("Incarico",)},
]


def personaCreateHandler(persona, event):
"""
Expand All @@ -14,32 +41,6 @@ def personaCreateHandler(persona, event):
@param event: Event that triggers the method (onAdded event)
"""

FOLDERS = [
{
"id": "foto-e-attivita-politica",
"title": "Foto e attività politica",
"contains": ("Image",),
},
{"id": "curriculum-vitae", "title": "Curriculum vitae", "contains": ("File",)},
{
"id": "situazione-patrimoniale",
"title": "Situazione patrimoniale",
"contains": ("File",),
},
{
"id": "dichiarazione-dei-redditi",
"title": "Dichiarazione dei redditi",
"contains": ("File",),
},
{"id": "spese-elettorali", "title": "Spese elettorali", "contains": ("File",)},
{
"id": "variazione-situazione-patrimoniale",
"title": "Variazione situazione patrimoniale",
"contains": ("File",),
},
{"id": "altre-cariche", "title": "Altre cariche", "contains": ("File",)},
{"id": "incarichi", "title": "Incarichi", "contains": ("Incarico",)},
]
for folder in FOLDERS:
if folder["id"] in persona:
continue
Expand Down
59 changes: 23 additions & 36 deletions src/design/plone/contenttypes/restapi/serializers/dxcontent.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,59 +16,46 @@
from zope.interface import implementer


class MetaTypeSerializer(object):
def get_design_meta_type(self):
ttool = api.portal.get_tool("portal_types")
if self.context.portal_type == "News Item" and self.context.tipologia_notizia:
taxonomy = getUtility(
ITaxonomy, name="collective.taxonomy.tipologia_notizia"
)
taxonomy_voc = taxonomy.makeVocabulary(self.request.get("LANGUAGE"))
if isinstance(self.context.tipologia_notizia, list):
token = self.context.tipologia_notizia[0]
else:
token = self.context.tipologia_notizia
title = taxonomy_voc.inv_data.get(token, None)

if title and title.startswith(PATH_SEPARATOR):
return title.replace(PATH_SEPARATOR, "", 1)
return translate(ttool[self.context.portal_type].Title(), context=self.request)


@implementer(ISerializeToJson)
@adapter(IDexterityContent, IDesignPloneContenttypesLayer)
class SerializeToJson(BaseSerializer):
class SerializeToJson(BaseSerializer, MetaTypeSerializer):
def __call__(self, version=None, include_items=True):
result = super(SerializeToJson, self).__call__(
version=version, include_items=include_items
)
ttool = api.portal.get_tool("portal_types")
result["design_italia_meta_type"] = translate(
ttool[self.context.portal_type].Title(), context=self.request
)
if self.context.portal_type == "News Item":
if self.context.tipologia_notizia:
taxonomy = getUtility(
ITaxonomy, name="collective.taxonomy.tipologia_notizia"
)
taxonomy_voc = taxonomy.makeVocabulary(self.request.get("LANGUAGE"))

title = taxonomy_voc.inv_data.get(self.context.tipologia_notizia, None)

if title and title.startswith(PATH_SEPARATOR):
result["design_italia_meta_type"] = title.replace(
PATH_SEPARATOR, "", 1
)
result["design_italia_meta_type"] = self.get_design_meta_type()
return result


@implementer(ISerializeToJson)
@adapter(IDexterityContainer, IDesignPloneContenttypesLayer)
class SerializeFolderToJson(BaseFolderSerializer):
class SerializeFolderToJson(BaseFolderSerializer, MetaTypeSerializer):
def __call__(self, version=None, include_items=True):
result = super(SerializeFolderToJson, self).__call__(
version=version, include_items=include_items
)
result["@id"] = self.context.absolute_url()
ttool = api.portal.get_tool("portal_types")

result["design_italia_meta_type"] = translate(
ttool[self.context.portal_type].Title(), context=self.request
)
if self.context.portal_type == "News Item":
if self.context.tipologia_notizia:
taxonomy = getUtility(
ITaxonomy, name="collective.taxonomy.tipologia_notizia"
)
taxonomy_voc = taxonomy.makeVocabulary(self.request.get("LANGUAGE"))

title = taxonomy_voc.inv_data.get(self.context.tipologia_notizia, None)
result["design_italia_meta_type"] = self.get_design_meta_type()

if title and title.startswith(PATH_SEPARATOR):
result["design_italia_meta_type"] = title.replace(
PATH_SEPARATOR, "", 1
)
if "items_total" not in result:
# siamo in un sotto-elemento di quello richiesto dalla query.
#  ritorniamo il numero di elementi totale, senza doverli ritornare
Expand Down
5 changes: 0 additions & 5 deletions src/design/plone/contenttypes/vocabularies/configure.zcml
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,4 @@
component=".reference_vocabularies.UOLocationVocabularyFactory"
/>

<utility
name="design.plone.contenttypes.RuoliPersona"
component=".people_vocabulary.RuoliPersonaFactory"
/>

</configure>
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
from zope.schema.interfaces import IVocabularyFactory
from zope.schema.vocabulary import SimpleTerm
from zope.schema.vocabulary import SimpleVocabulary
from zope.site.hooks import getSite
from zope.component.hooks import getSite


class ReferencesVocabulary(object):
Expand Down
131 changes: 67 additions & 64 deletions src/design/plone/contenttypes/vocabularies/tags_vocabulary.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,77 +14,80 @@ def __init__(self, token, value):
self.value = value


TAGS_MAPPING = [
("accesso_all_informazione", _("Accesso all'informazione")),
("acqua", _("Acqua")),
("agricoltura", _("Agricoltura")),
("animale_domestico", _("Animale domestico")),
("aria", _("Aria")),
("assistenza_agli_anziani", _("Assistenza agli invalidi")),
("assistenza_sociale", _("Assistenza sociale")),
("associazioni", _("Associazioni")),
("bilancio", _("Bilancio")),
("commercio_all_ingresso", _("Commercio all'ingrosso")),
("commercio_al_minuto", _("Commercio al minuto")),
("commercio_ambulante", _("Commercio ambulante")),
("comunicazione_istituzionale", _("Comunicazione istituzionale")),
("comunicazione_politica", _("Comunicazione politica")),
("concordi", _("Concorsi")),
("covid_19", _("Covid - 19")),
("elezioni", _("Elezioni")),
("energie_rinnovabili", _("Energie rinnovabili")),
("estero", _("Estero")),
("foreste", _("Foreste")),
("formazione_professionale", _("Formazione professionale")),
("gemellaggi", _("Gemellaggi")),
("gestione_rifiuti", _("Gestione rifiuti")),
("giustizia", _("Giustizia")),
("igiene_pubblica", _("Igiene pubblica")),
("immigrazione", _("Immigrazione")),
("imposte", _("Imposte")),
("imprese", _("Imprese")),
("inquinamento", _("Inquinamento")),
("integrazione_sociale", _("Integrazione sociale")),
("isolamento_termico", _("Isolamento termico")),
("istruzione", _("Istruzione")),
("lavoro", _("Lavoro")),
("matrimonio", _("Matrimonio")),
("mercato", _("Mercato")),
("mobilita_sostenibile", _("Mobilità sostenibile")),
("morte", _("Morte")),
("nascita", _("Nascita")),
("parcheggi", _("Parcheggi")),
("patrimonio_culturale", _("Patrimonio culturale")),
("pesca", _("Pesca")),
("piano_di_sviluppo", _("Piano di sviluppo")),
("pista_ciclabile", _("Pista ciclabile")),
("politica_commerciale", _("Politica commerciale")),
("polizia", _("Polizia")),
("prodotti_alimentari", _("Prodotti alimentari")),
("protezione_civile", _("Protezione civile")),
("residenza", _("Residenza")),
("risposta_alle_emergenze", _("Risposta alle emergenze")),
("sistema_giuridico", _("Sistema giuridico")),
("spazio_verde", _("Spazio Verde")),
("sport", _("Sport")),
("sviluppo_sostenibile", _("Sviluppo sostenibile")),
("tassa_sui_servizi", _("Tassa sui servizi")),
("tempo_libero", _("Tempo libero")),
("trasparenza_amministrativa", _("Trasparenza amministrativa")),
("trasporto_pubblico", _("Trasporto pubblico")),
("turismo", _("Turismo")),
("urbanizzazione", _("Urbanizzazione")),
("viaggi", _("Viaggi")),
("zone_pedonali", _("Zone pedonali")),
("ztl", _("ZTL")),
]


@implementer(IVocabularyFactory)
class TagsVocabulary(object):
""" """

def __call__(self, context):
# Just an example list of content for our vocabulary,
# this can be any static or dynamic data, a catalog result for example.
items = [
VocabItem("accesso_all_informazione", _("Accesso all'informazione")),
VocabItem("acqua", _("Acqua")),
VocabItem("agricoltura", _("Agricoltura")),
VocabItem("animale_domestico", _("Animale domestico")),
VocabItem("aria", _("Aria")),
VocabItem("assistenza_agli_anziani", _("Assistenza agli invalidi")),
VocabItem("assistenza_sociale", _("Assistenza sociale")),
VocabItem("associazioni", _("Associazioni")),
VocabItem("bilancio", _("Bilancio")),
VocabItem("commercio_all_ingresso", _("Commercio all'ingrosso")),
VocabItem("commercio_al_minuto", _("Commercio al minuto")),
VocabItem("commercio_ambulante", _("Commercio ambulante")),
VocabItem("comunicazione_istituzionale", _("Comunicazione istituzionale")),
VocabItem("comunicazione_politica", _("Comunicazione politica")),
VocabItem("concordi", _("Concorsi")),
VocabItem("covid_19", _("Covid - 19")),
VocabItem("elezioni", _("Elezioni")),
VocabItem("energie_rinnovabili", _("Energie rinnovabili")),
VocabItem("estero", _("Estero")),
VocabItem("foreste", _("Foreste")),
VocabItem("formazione_professionale", _("Formazione professionale")),
VocabItem("gemellaggi", _("Gemellaggi")),
VocabItem("gestione_rifiuti", _("Gestione rifiuti")),
VocabItem("giustizia", _("Giustizia")),
VocabItem("igiene_pubblica", _("Igiene pubblica")),
VocabItem("immigrazione", _("Immigrazione")),
VocabItem("imposte", _("Imposte")),
VocabItem("imprese", _("Imprese")),
VocabItem("inquinamento", _("Inquinamento")),
VocabItem("integrazione_sociale", _("Integrazione sociale")),
VocabItem("isolamento_termico", _("Isolamento termico")),
VocabItem("istruzione", _("Istruzione")),
VocabItem("lavoro", _("Lavoro")),
VocabItem("matrimonio", _("Matrimonio")),
VocabItem("mercato", _("Mercato")),
VocabItem("mobilita_sostenibile", _("Mobilità sostenibile")),
VocabItem("morte", _("Morte")),
VocabItem("nascita", _("Nascita")),
VocabItem("parcheggi", _("Parcheggi")),
VocabItem("patrimonio_culturale", _("Patrimonio culturale")),
VocabItem("pesca", _("Pesca")),
VocabItem("piano_di_sviluppo", _("Piano di sviluppo")),
VocabItem("pista_ciclabile", _("Pista ciclabile")),
VocabItem("politica_commerciale", _("Politica commerciale")),
VocabItem("polizia", _("Polizia")),
VocabItem("prodotti_alimentari", _("Prodotti alimentari")),
VocabItem("protezione_civile", _("Protezione civile")),
VocabItem("residenza", _("Residenza")),
VocabItem("risposta_alle_emergenze", _("Risposta alle emergenze")),
VocabItem("sistema_giuridico", _("Sistema giuridico")),
VocabItem("spazio_verde", _("Spazio Verde")),
VocabItem("sport", _("Sport")),
VocabItem("sviluppo_sostenibile", _("Sviluppo sostenibile")),
VocabItem("tassa_sui_servizi", _("Tassa sui servizi")),
VocabItem("tempo_libero", _("Tempo libero")),
VocabItem("trasparenza_amministrativa", _("Trasparenza amministrativa")),
VocabItem("trasporto_pubblico", _("Trasporto pubblico")),
VocabItem("turismo", _("Turismo")),
VocabItem("urbanizzazione", _("Urbanizzazione")),
VocabItem("viaggi", _("Viaggi")),
VocabItem("zone_pedonali", _("Zone pedonali")),
VocabItem("ztl", _("ZTL")),
]
items = [VocabItem(token=token, value=value) for token, value in TAGS_MAPPING]

# Fix context if you are using the vocabulary in DataGridField.
# See https://github.com/collective/collective.z3cform.datagridfield/issues/31: # NOQA: 501
Expand Down

0 comments on commit 3ad0dae

Please sign in to comment.