Notifiche mail in Plone? collective.contentrules.mail

9 settembre 2009

Richiesta tipica di estensione per Plone: inviare notifiche mail a revisori, creatori dei contenuti, manager in caso di nuovo documento, cambio di stato del documento, modifica del documento.

Plone sa rispondere al 90% della richiesta con il suo Content Rules Engine [vedi http://plone.org/documentation/how-to/content-rules/ per sapere di che si tratta!].

Tuttavia tra le possibilità di base manca un modo sufficientemente flessibile di costruire le mail che vengono spedite.

collective.contentrules.mail [http://pypi.python.org/pypi/collective.contentrules.mail] è la risposta a tale esigenza! Offre infatti la possibilità di costruire le mail usando espressioni dipendenti dal contesto (chi scatena la transizione, chi è il proprietario del contenuto da notificare, etc.).


La cosa veramente notevole del prodotto è che rapidissimamente potrete costruire le vostre espressioni! Come dice il readme del prodotto: “E’ possibile fornire nuovi ‘replacer’ definendo un’interfaccia con un adapter associato e registrando una nuova utility IMailModel”.

In soldoni, ecco come.

Definite la vostra interfaccia con le espressioni da renderizzare in un modulo (il mio si chiama mail.py), avendo l’accortezza di ereditare da quella di base offerta da collective.contentrules.mail:

from zope import schema
from zope.interface import implements
from zope.component import adapts
from Products.CMFCore.interfaces import IDublinCore
from collective.contentrules.mail.model import MailModel
from collective.contentrules.mail.interfaces import IMailReplacer
from collective.contentrules.mail.adapter import MailReplacer

class ICustomMailReplacer(IMailReplacer):
    location = schema.TextLine(title="The Location for the content")

Definite poi l’adapter che registreremo per calcolare tale espressione, anche qui ereditando dall’adapter di base:

class CustomMailReplacer(MailReplacer):
    """Provides attributes which can be used in a mail model"""

    implements(ICustomMailReplacer)
    adapts(IDublinCore)

    @property
    def location(self):
        return self.context.location

Infine create la factory per la vostra utility, sempre derivando da quella di base:

CustomMailModel = MailModel(title=u"custom model for plone content",
                                               replacer_interface=ITBizMailReplacer)

Non resta che registrare il tutto in un bel zcml e il gioco è fatto!

<configure
    xmlns="http://namespaces.zope.org/zope"
    i18n_domain="custom.package">

    <utility
        component=".mail.CustomMailModel"
        name="custom.contentrules.mail.model.base"
    />

    <adapter
    provides="custom.package.mail.ICustomMailReplacer"
    factory=".mail.CustomMailReplacer" />

</configure>

a presto!
Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: