App-ZofCMS
view release on metacpan or search on metacpan
lib/App/ZofCMS/Plugin/AntiSpamMailTo.pm view on Meta::CPAN
use HTML::Entities;
sub new { bless {}, shift }
sub process {
my ( $self, $template, $config ) = @_[0,1,3];
return
unless $template->{plug_anti_spam_mailto}
or $config->conf->{plug_anti_spam_mailto};
my $c_data = delete $config->conf->{plug_anti_spam_mailto};
my $t_data = delete $template->{plug_anti_spam_mailto};
my $data;
if ( defined $c_data and defined $t_data ) {
if ( ref $c_data ne ref $t_data ) {
$data = $t_data;
}
else {
$data = ref $t_data eq 'ARRAY'
? $data = [ @$t_data, @$c_data ]
: ref $t_data eq 'HASH'
? $data = { %$c_data, %$t_data }
: [ $t_data, $c_data ];
}
}
elsif ( defined $t_data ) {
$data = $t_data;
}
else {
$data = $c_data;
}
if ( ref $data eq 'ARRAY' ) {
$data = {
map +( "mailto_$_" => $data->[$_] ),
0.. $#$data
};
}
elsif ( not ref $data ) {
$data = { 'mailto' => $data };
}
encode_entities $_, '\w\W'
for values %$data;
@{ $template->{t} }{ keys %$data } = values %$data;
return 1;
}
1;
__END__
=encoding utf8
=head1 NAME
App::ZofCMS::Plugin::AntiSpamMailTo - "smart" HTML escapes to protect mailto:foo@bar.com links from not-so-smart spam bots
=head1 SYNOPSIS
In your Main Config file or ZofCMS template:
# include the plugin
plugins => [ qw/AntiSpamMailTo/ ],
# then this:
plug_anti_spam_mailto => 'bar',
# or this:
plug_anti_spam_mailto => [ qw/foo bar baz/ ],
# or this:
plug_anti_spam_mailto => {
foo => 'bar',
baz => 'beer',
},
In your L<HTML::Template> template:
<tmpl_var name="mailto">
# or this:
<tmpl_var name="mailto_0"> <tmpl_var name="mailto_1"> <tmpl_var name="mailto_2">
# or this:
<tmpl_var name="foo"> <tmpl_var name="baz">
=head1 DESCRIPTION
The module is an L<App::ZofCMS> plugin which provides means to deploy a
technique that many
claim to be effective in protecting your
C<< <a href="mailto:foo@bar.com"></a> >> links
from dumb spam bots.
The technique is quite simple (and simple to circumvent, but we are
talking about B<dumb>
spam bots) - the entire contents of C<href=""> attribute are encoded
as HTML entities. Dumb
spam bots miss the C<mailto:> and go their way. As of the day of this
writing, I have about 14 sites that have been using this plugin for
3+ years and I might have received one spam email to the email address
shown by the plugin. Anyway, on to the business.
This documentation assumes you have read L<App::ZofCMS>,
L<App::ZofCMS::Config> and L<App::ZofCMS::Template>
=head1 MAIN CONFIG/ZofCMS TEMPLATE FIRST-LEVEL KEYS
=head2 C<plug_anti_spam_mailto>
plug_anti_spam_mailto => 'bar',
plug_anti_spam_mailto => [ qw/foo bar baz/ ],
plug_anti_spam_mailto => {
foo => 'bar',
baz => 'beer',
},
The plugin takes it's data from C<plug_anti_spam_mailto> first-level key that is in either
( run in 0.731 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )