Skip to content

collective/collective.contentalerts

Repository files navigation

Coveralls

collective.contentalerts

Get alerts whenever a (two custom lists of) word is found on a content object, be that object of any content type (Dexterity or comments).

Can be used to:

  • moderate: used as a blacklist.
  • highlight: used as a whitelist.

The main idea is to use the power of plone.app.contentrules to inspect content being generated by users for certain words.

Upon that, regular plone.app.contentrules actions can be triggered: send an email, notify the user, apply a workflow transition...

The secondary idea is to be able to do different actions on the content depending on if the words where found on one or the other list.

Features

  • manage two lists of words that will be used to search (blacklist/whitelist)
    • named forbidden_words and inadequate_words
  • integration with plone.app.contentrules:
    • conditions to look for stop words (either from any list or from a specific one)
    • string substitutions to add on emails the snippets where the stop words where found (one for documents and one for comments)
  • standalone utility
    • with methods to either look for words on both lists or only on one of them
  • provide different word lists if you need them, either two general ones (plone.registry based) or on a per contentrule basis
  • look for stop words on comments and dexterity content types
  • apply a marker interface to objects that are found to have stop words
  • mark objects as reviewed
  • monitor the list of words for changes and search for the new stop words on already reviewed objects
    • if [async] extra is enable this review will be done via an asynchronous job (via collective.taskqueue)

Where it searches on

collective.contentalerts searches either on the comments' text or on text (for Dexterity based content types).

Standalone usage

While the main integration within Plone is via a plone.app.contentrules condition, collective.contentalerts can also be used as a standalone utility.

Use the provided utility (collective.contentalerts.interfaces.IAlert).

Documentation

Full documentation for end users can be found in the "docs" folder.

Installation

Install collective.contentalerts by adding it to your buildout:

[buildout]

 ...

 eggs =
     collective.contentalerts

and then running "bin/buildout"

Upgrade notes

Version 3.0

This version is meant to be compatible with Plone 5.2 (still on python 2.7).

Version 2.0

This version only supports Plone 5 and Dexterity, if you are using Archetypes or Plone 4.3.x stick with version 1.x.

So far only the migration to Plone 5 differs from the last 1.x release.

Keep an eye on CHANGES.rst.

Version 1.0 and below

If you are upgrading from 0.7 to any later version there's one manual step that needs to be done.

On version 1.0 the single list of stop words was split into inadequate_words and forbidden_words.

As it can not be guessed which list the former list is supposed to map, no automatic migration is provided.

An upgrade step needs to be written then.

See below an example on how to migrate the former list to the new forbidden_words list:

from plone import api
from plone.registry.interfaces import IRegistry
from zope.component import getUtility

# safe the stop words on the old location
old_setting = 'collective.contentalerts.interfaces.IStopWords.stop_words'
current_forbidden_words = api.portal.get_registry_record(name=old_setting)

# update registry
setup = api.portal.get_tool('portal_setup')
setup.runImportStepFromProfile(
    'profile-collective.contentalerts:default',
    'plone.app.registry'
)

# set the stop words on the new field
api.portal.set_registry_record(
    name='collective.contentalerts.interfaces.IStopWords.forbidden_words',
    value=current_forbidden_words
)

# remove the old setting
registry = getUtility(IRegistry)
del registry.records[old_setting]

Contribute

License

The project is licensed under the GPLv2.

Credits

der Freitag sponsored the creation of this add-on.