sfPropelSpamTagBehaviorPlugin - 0.9.1

Spam Tag behavior for Propel.

You are currently browsing
the website for symfony 1

Visit the Symfony2 website

« Back to the Plugins Home


Forgot your password?
Create an account



advanced search
Information Readme Releases Changelog Contribute
Show source | Show as Markdown

sfPropelSpamTagBehaviorPlugin plugin

The sfPropelSpamTagBehaviorPlugin is a symfony plugin that provides a new Propel behavior.

If you enable this behavior for one of your model class, all objects of this class with the attribute is_spam set to true will no longer appear on database requests. etion.


  • Install the plugin

    $ symfony plugin-install http://plugins.symfony-project.com/sfPropelSpamTagBehaviorPlugin

  • Enable Propel behavior support in propel.ini:

    propel.builder.AddBehaviors = true

  • If you use symfony 1.0, change one builder class in propel.ini to avoid a bug in behaviors (not necessary in sf1.1):

    ; builder settings propel.builder.peer.class = plugins.sfPropelSpamTagBehaviorPlugin.lib.SfPeerBuilder

  • Each table for which you want this behavior enabled must have one integer column to support the moderation state. If there is none, add a moderation_status column in schema.yml

    propel: item: id: title: varchar(255) body: longvarchar created_at: updated_at: moderation_status: { type: integer, default: 1, index: true } # Add this column to each table

  • Activate the behavior for those of your Propel models that need spam moderation:

    // lib/model/Item.php class Item { }

    sfPropelBehavior::add('Item', array('spam_tag'));

    By default, the plugin will consider the moderation_status column for this model. You can also specify another column if your model doesn't allow you to use a moderation_status column:

    sfPropelBehavior::add('Item', array('spam_tag' => array('column' => 'my_spam_tag')));

    Note that the column must still be an integer with default value equal to '1'.

  • Rebuild your model:

    $ symfony propel-build-model


If you enable the behavior on a model, selection methods of this model (retrieveByPk, doCount, doSelect, doSelectOne, doSelectJoinXXX, doSelectJoinAll, doSelectJoinAllExceptXXX, doSelectRS) will not return objects marked as spam.

$item = new Item();
$id = $item->getId();
$item = ItemPeer::retrieveByPk($id);   // Returns null

You can inspect the spam tag of any object through the getSpamTag() method.

$spam_tag = $item->getSpamTag();
  case sfPropelSpamTagBehavior::TAGGED_SAFE:
    echo "The item has been checked and marked as safe";
  case sfPropelSpamTagBehavior::NOT_CHECKED:
    echo "The item is not yet checked";
  case sfPropelSpamTagBehavior::TAGGED_AUTO_SPAM:
    echo "The item has been checked by an automated service and marked as spam";
  case sfPropelSpamTagBehavior::TAGGED_SPAM:
    echo "The item has been checked and marked as spam";

By default, records with a NOT_CHECKED and TAGGED_SAFE status are shown, others are hidden. Nevertheless, if you want to force moderation, you just need to change one setting in the app.yml:

    display_treshold: 0     # Only allow records marked TAGGED_SAFE
   #display_treshold: 1     # Allow records marked TAGGED_SAFE, and NOT_CHECKED
   #display_treshold: 2     # Allow records marked TAGGED_SAFE, NOT_CHECKED, and TAGGED_AUTO_SPAM
   #display_treshold: 3     # Allow all records

With this setting, only records marked with TAGGED_SAFE are returned.

The behavior can be deactivated temporarily for all models through the sfPropelSpamTagBehavior::disable() method. This will allow you to query the database for tagged records.

$item = ItemPeer::retrieveByPk($id);   // Returns null
$item = ItemPeer::retrieveByPk($id);   // Returns an item

Don't forget to enable the behavior again afterwards:



  • Add a Report table to allow users to complain about a content (hash between user_id, object_id and object_class)
  • Add lists for moderators (reported content, latest published content, latest spammed content)
  • Add a batch to remove old contents marked as spam



2007-09-09 | 0.9.1 Beta

  • francois: Added unit tests
  • francois: Improved documentation
  • francois: Added getter and setter for spam tag column
  • francois: BC changed the spam column to a four-state integer field
  • francois: Added support for a priori and a posteriori moderation
  • francois: Made the plugin compatible with symfony 1.0

2007-03-23 | 0.9.0 Beta

  • francois: Initial release