App-ZofCMS
view release on metacpan or search on metacpan
lib/App/ZofCMS/Plugin/YouTube.pm view on Meta::CPAN
my $dbh = DBI->connect_cached(
@$conf{ qw/dsn user pass opt/ },
);
$dbh->do(
"INSERT INTO $conf->{table} VALUES(?, ?, ?, ?, ?, ?);",
undef,
@$query{ qw/
plug_youtube_title
plug_youtube_link
plug_youtube_description
/},
$code,
time(),
do { my $id = rand() . time() . rand(); $id =~ tr/.//d; $id },
);
$t->param( form_ok => 1 );
}
}
return $t->output;
}
sub _check_add_form {
my ( $self, $query, $t ) = @_;
my $error;
unless ( defined $query->{plug_youtube_title}
and length $query->{plug_youtube_title}
) {
$error = q|Missing 'Title' parameter|;
}
unless ( defined $query->{plug_youtube_link}
and length $query->{plug_youtube_link}
) {
$error = q|Missing 'Link' parameter|;
}
unless ( $query->{plug_youtube_link} =~ /youtube[.]com/ ) {
$error = q|Incorrect YouTube link|;
}
unless ( defined $query->{description} ) {
$query->{description} = '';
}
if ( defined $error ) {
$t->param( error => $error );
return;
}
return 1;
}
sub _form_template {
return <<'END_HTML_TEMPLATE_CODE';
<tmpl_if name="form_ok">
<p>Video was successfully added.</p>
<p><a href="/index.pl?page=<tmpl_var escape='html' name='page'>&dir=<tmpl_var escape='html' name='dir'>">Add another video</a></p>
<tmpl_else>
<form action="" method="POST" id="plug_youtube_form">
<div>
<tmpl_if name="error"><p class="error"><tmpl_var escape='html' name='error'></tmpl_if>
<input type="hidden" name="page" value="<tmpl_var escape='html' name='page'>">
<input type="hidden" name="dir" value="<tmpl_var escape='html' name='dir'>">
<ul>
<li>
<label for="plug_youtube_title">Title: </label
><input type="text" id="plug_youtube_title" name="plug_youtube_title" value="<tmpl_var escape='html' name='plug_youtube_title'>">
</li>
<li>
<label for="plug_youtube_link">Link: </label
><input type="text" id="plug_youtube_link" name="plug_youtube_link" value="<tmpl_var escape='html' name='plug_youtube_link'>">
</li>
<li>
<label for="plug_youtube_description">Description: </label
><textarea id="plug_youtube_description" name="plug_youtube_description" cols="60" rows="10"><tmpl_var escape='html' name='plug_youtube_description'></textarea>
</li>
</ul>
<input type="submit" name="plug_youtube_submit" value="Add">
</div>
</form>
</tmpl_if>
END_HTML_TEMPLATE_CODE
}
sub _list_template {
return <<'END_HTML_TEMPLATE_CODE';
<tmpl_if name='has_vids'>
<ul id="plug_youtube_list">
<tmpl_loop name='vids'>
<li<tmpl_if name='alt_class'> class="alt"</tmpl_if>>
<h<tmpl_var name='h_level'>><a href="<tmpl_var escape='html' name='link'>"><tmpl_var escape='html' name='title'></a></h<tmpl_var name='h_level'>>
<p class="plug_youtube_time">Posted on: <tmpl_var name='time'></p>
<div class="plug_youtube_video"><tmpl_var name='embed'></div>
<p class="plug_youtube_description"><tmpl_var name='description'></p>
<tmpl_if name='edit'>
<form action="" method="POST">
<div>
<input type="hidden" name="plug_youtube_vid_edit_id" value="<tmpl_var escape='html' name='id'>">
<input type="hidden" name="page" value="<tmpl_var escape='html' name='page'>">
<input type="hidden" name="dir" value="<tmpl_var escape='html' name='dir'>">
<input type="submit" class="input_submit submit_button_edit" name="plug_youtube_vid_edit_action" value="Edit">
<input type="submit" class="input_submit submit_button_delete" name="plug_youtube_vid_edit_action" value="Delete">
</div>
</form>
</tmpl_if>
</li>
</tmpl_loop>
</ul>
<tmpl_else>
<p class="plug_youtube_no_vids">Currently there are no videos.</p>
</tmpl_if>
END_HTML_TEMPLATE_CODE
}
1;
__END__
=encoding utf8
=head1 NAME
App::ZofCMS::Plugin::YouTube - CRUD-type plugin to manage YouTube videos
=head1 SYNOPSIS
In your Main Config File or ZofCMS Template template:
plugins => [ qw/YouTube/, ],
plug_youtube => {
dsn => "DBI:mysql:database=test;host=localhost", # everything below is pretty much optional
user => '',
pass => '',
opt => { RaiseError => 1, AutoCommit => 1 },
t_name => 'plug_youtube',
table => 'videos',
create_table => 0,
h_level => 3,
size => 1,
no_form => 0,
no_list => 0,
allow_edit => 0,
ua_args => [
agent => 'Opera 9.2',
timeout => 30,
],
filter => {
title => qr/Foo/,
description => qr/Bar/,
link => qr/234fd343/,
},
},
In your L<HTML::Template> template:
<h2>Post new video</h2>
<tmpl_var name='plug_youtube_form'>
<h2>Existing Videos</h2>
<tmpl_var name='plug_youtube_list'>
( run in 3.241 seconds using v1.01-cache-2.11-cpan-a49fcb8fa48 )