jifty::plugin::comment::model::comment(3pm) [debian man page]
Jifty::Plugin::Comment::Model::Comment(3pm) User Contributed Perl Documentation Jifty::Plugin::Comment::Model::Comment(3pm)NAME
Jifty::Plugin::Comment::Model::Comment - comments attached to anything
SYNOPSIS
# to customize...
package App::Model::Comment;
use base qw/ Jifty::Plugin::Comment::Model::Comment /;
use Jifty::DBI::Schema;
use App::Record schema {
# Add a reference to the current user that creates this comment
column by_user =>
references App::Model::User,
;
};
# make it so that any logged user can comment, but anyone can view, except
# that we don't really want everyone seeing all those personal bits...
sub current_user_can {
my $self = shift;
my ($right, %args) = @_;
if ($right eq 'create') {
return 1 if $self->current_user->id;
}
if ($right eq 'read') {
return $self->published
unless $args{column} =~ /^
(?: email
| status
| ip_addr
| http_refer
| http_user_agent ) $/x;
}
# otherwise only superuser gets in
return $self->SUPER::current_user_can(@_);
}
DESCRIPTION
This model is the repository for all comments in your application, if you use the Jifty::Plugin::Comment plugin.
SCHEMA
title
This is the title of the comment.
body
This is the body of the comment.
created_on
This is the timestamp of when the comment was created.
your_name
This is the name the author of the comment has claimed.
web_site
This is the name of the web site the author claims as her own.
email
This is the email address the author is claiming.
published
This is a boolean flag indicating whether the comment should be shown or not when viewed.
status
This is a flag containing one of two values: "spam" or "ham". It indicates whether the comment has been evaluated as spam or not by
Net::Akismet.
ip_addr
This is the IP address of the remote client of the author that made the comment.
http_referer
This is the HTTP referer that was sent by the browser when the author made the comment.
http_user_agent
This is the HTTP user agent that was sent by the browser when the author made the comment.
METHODS
table
Returns the database table name for the comments table.
before_create
It is assumed that your comments will be made available for create with very little restriction. This trigger is used to perform aggressive
cleanup on the data stored and will attempt to check to see if the comment is spam by using Net::Akismet.
before_set_status
This trigger is called when changing the status of the message. If Net::Akismet is in use, this trigger will notify Akismet that this
message is being marked as spam or as ham, depending upon the new value.
current_user_can
This method is not actually implemented by this class, but you will either want to implementt this method in your application or add a
"before_access" trigger that grants access. Otherwise, your comments won't be very interesting to anyone but a superuser.
See the "SYNOPSIS" for a recommended implementation.
AUTHOR
Andrew Sterling Hanenkamp "<hanenkamp@cpan.org>"
COPYRIGHT AND LICENSE
Copyright 2007 Boomer Consulting, Inc. All Rights Reserved.
This program is free software and may be modified and distributed under the same terms as Perl itself.
perl v5.12.4 2009-03-09 Jifty::Plugin::Comment::Model::Comment(3pm)
Check Out this Related Man Page
Jifty::Plugin::Comment(3pm) User Contributed Perl Documentation Jifty::Plugin::Comment(3pm)NAME
Jifty::Plugin::Comment - Add comments to any record
SYNOPSIS
Setup the config.yml
Plugins:
- Comment:
# Set this if you want spam checking by Net::Akismet
Akismet:
Key: 1234567890a
Url: http://example.com
# Set this if you want to customize the HTML scrubbing of comments
Scrubber:
message: "Comments may only contain <strong>, <em>, and <a> tags."
allow:
- strong
- em
- a
default:
- 0
-
'*': 0
href: !!perl/regexp:
REGEXP: '^(?!(?:java)?script)'
MODIFIERS: i
Setup a model that has comments:
package App::Model::Fooble;
use Jifty::DBI::Schema;
use App::Record schema {
column scribble => type is 'text';
column wobble => type is 'int';
};
use Jifty::Plugin::Comment::Mixin::Model::Commented;
sub allow_owner_update_delete {
my $self = shift;
my ($right, %args) = @_;
if ($right eq 'create') {
return 'allow' ;#if $self->current_user->id;
}
if ($right eq 'update' || $right eq 'delete') {
return 'allow' if $self->current_user->id;
}
if ($right eq 'read') {
return 'allow';
}
return 'deny';
};
App::Model::FoobleComment->add_trigger( name => 'before_access', callback => &allow_owner_update_delete);
App::Model::Comment->add_trigger( name => 'before_access', callback => &allow_owner_update_delete);
Setup a view for creating, viewing, and managing the comments:
# assuming $fooble here isa App::Action::UpdateFooble object
template 'fooble/view' => page {
my $fooble = get 'fooble';
render_action $fooble, undef, { render_mode => 'read' };
render_region
name => 'fooble-comments',
path => '__comment/list_and_add',
defaults => {
comment_upon => $fooble->record->for_commenting,
initial_title => 'Re: '.substr($fooble->scribble, 0, 20).'...',
},
;
};
DESCRIPTION
This plugin allows you to attach comments to any model. You do this using the three steps listed in the synopsis. For variations on these
steps, see the other classes that handle the individual parts.
COMMENTED RECORDS
To set up a commented model, you will need to do the following:
1 Add ths plugin to your project by modifying your config.yml.
1 Add the Jifty::Plugin::Comment::Mixin::Model::Commented mixin to the model or models that you want to have comments attached to. See that
class for details on how it works. You may also want to examine Jifty::Plugin::Comment::Model::Comment on how to customize that class for
your application.
1 Create a view that appends a comment editor to your edit form (or on a separate page or wherever you feel like comments work best in your
application). You should be able to use these views from either Template::Declare or HTML::Mason templates. See
Jifty::Plugin::Comment::View for additional details on what views are available.
METHODS
init
Called during initialization. This will setup the Net::Akismet object if it is configured and available.
akismet
This returns an instance of Net::Akismet that is used to check to see if a new comment posted contains spam. No such checking is performed
if this returns "undef", which indicates that "Net::Akismet" is unavailable, wasn't configured, or there was an error configuring it (e.g.,
the Akismet server was unavailable during Jifty startup).
scrubber
This returns an instance of HTML::Scrubber that is used to clean up HTML submitted in comments.
TO DO
Right now the module depends directly upon HTML::Scrubber to do the work of cleaning up the text. You might want to use something else to
do this. It also provides no mechanism for customizing any other aspect of the formatting. For example, your application might want to use
Markdown, or BBCode, or just turn line breaks in the BR-tags, or anything else to format the comment text.
In the future, I'd like to consider something like Text::Pipe or a similar API to allow these formats to be customized more easily.
SEE ALSO
Net::Akismet, HTML::Scrubber
AUTHOR
Andrew Sterling Hanenkamp, "<hanenkamp@cpan.org>"
COPYRIGHT AND LICENSE
Copyright 2007 Boomer Consulting, Inc. All Rights Reserved.
This program is free software and may be modified and distributed under the same terms as Perl itself.
perl v5.12.4 2009-06-26 Jifty::Plugin::Comment(3pm)