sfPropelActAsCommentableBehaviorPlugin
Introduction
This behavior permits to attach comments to Propel objects.
Features
- add/remove comment(s) on an object
- unit-tested
Philosophy of the stuff
- commentable objects must have a primary key
- comments can only be attached on objects that have already been saved
- comments are saved when applied
Get it installed
go to your project's root
Install the plugin:
./symfony plugin-install http://plugins.symfony-project.com/sfPropelActAsCommentableBehaviorPlugin
if not already done, enabled behaviors in config/propel.ini:
propel.builder.addBehaviors = true
edit the classes that you want to make taggable. For instance, for lib/model/Post.php:
[php]
save();
$post->addComment('This is a cool comment.');
$post->addComment(array('title' => 'this is a cool title', 'text' => 'this is a cool comment', 'author_id' => sfContext::getInstance()->getUser()->getUserId()));
$post->addComment(array('This is a cool comment.', 'this is one other comment'));
### Retrieving one object's tags
It is possible to retrieve tags from a taggable object:
[php]
getTags();
foreach ($tags as $tag)
{
echo $tag.'
';
}
Removing one object's tags
Of course, tags can also be removed:
<?php
$post = PostPeer::retrieveByPk(1);
$post->removeTag('toto');
$post->removeTag('toto, tutu');
$post->removeAllTags();
API
The behavior implement the following methods:
* addComment($comment) - Adds a comment to the object. The "comment" param can be an associative array (in which each element represents one of the comment properties), or an array of associative arrays. In this case, it adds all the comments to the object.
* clearComments() - Deletes all the comments attached to the object
* getComments($options = array()) - Returns the list of the comments attached to the object. The options array can contain several options
* getNbComments() - Returns the number of the comments attached to the object.
* removeComment($comment_id) - Removes one comment from the object.
The behavior class also implement the following method, which is a facility for preloading all the tags for a set of taggable objects
* preloadTags($objects) - Preload tags for a set of objects
Unit testing
The plugin has been deeply unit-tested. The tests are located in test/unit/sfPropelActAsCommentableBehaviorTest.php. If you want to run them:
* install the plugin
* configure a model for using it, for instance "Post"
* edit this file and, if required, modify the application name and the TEST_CLASS constant, line 3:
define('TEST_CLASS', 'Post');
License and credits
This plugin is licensed under the MIT license. You can contact the maintainer at xavier@lacot.org
Changelog
version 0.1 - 2007-09-13
Initial public release. Features comments attachment to heterogene Propel objects.
Roadmap
- add a symfony module for posting and displaying comments
- handle other custom fields in comments
- use sfPropelActAsPolymorphicBehaviorPlugin ? :)