Bot-BasicBot-Pluggable

 view release on metacpan or  search on metacpan

examples/chump.cgi  view on Meta::CPAN

# this won't work out the box. I'll fix it in a later release. But it's what
# we use to look at the output from the chumping module (Blog). See
# http://2lmc.org/blog

use strict;
use Template;
use CGI;
use Time::Local;
use Calendar::Simple;
use Digest::MD5 qw(md5_hex);
use LWP::Simple;
use Image::Size;
use DBI;

my $vars = {};

my $db = DBI->connect("DBI:mysql:database=jerakeen", "2lmc", "2lmc");

my %title;
if (open(TITLES, "titles.txt")) {
    while (<TITLES>) {
        chomp;
        next unless $_;
        my ($url, $title) = split(/\s+/, $_, 2);
        $title{$url} = $title if $title;
    }
    close(TITLES);
}


my $timestamp = CGI::param("timestamp");
my $blog_id = CGI::param("blog_id");
my $upper = CGI::param("upper");
my $lower = CGI::param("lower");
my $search = CGI::param("search");

my $day = CGI::param("day");
my $month = CGI::param("month");
my $year = CGI::param("year");

my $title;

if ($day and $month and $year) {
    $lower = timegm(0, 0, 0, $day, $month-1, $year-1900);
    $upper = timegm(59, 59, 23, $day, $month-1, $year-1900);
    $title = sprintf("%04d/%02d/%02d", $year, $month, $day);
} elsif ($month and $year) {
    $lower = timegm(0, 0, 0, 1, $month-1, $year-1900);
    $upper = timegm(0, 0, 0, 1, $month, $year-1900) if $month < 12;
    $upper = timegm(0, 0, 0, 1, 0, $year-1899) if $month >= 12;
    $title = sprintf("%04d/%02d", $year, $month);
} elsif ($year) {
    $lower = timegm(0, 0, 0, 1, 0, $year-1900);
    $upper = timegm(59, 59, 23, 1, 0, $year-1899);
    $title = sprintf("%04d", $year);
}

$upper = 1500000000 unless defined($upper); # TODO - fix before Fri Jul 14 02:40:00 2017
$lower = 0 unless defined($lower);

my @calendar = calendar($month, $year, 1);
my $dates_ref = get_link_days($month, $year);
@calendar = merge(\@calendar, $dates_ref);

my @lt = localtime;
$vars->{calendar} = \@calendar;
$vars->{month} = $month || $lt[4]+1;
$vars->{year} = $year || $lt[5]+1900;
$vars->{today} = $day || $lt[3];
my @monthnames = (qw(dummy Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec));
$vars->{monthnames} = \@monthnames;
my @entries;

my $entry;

my $query;
if ($search) {
    my $sql = "SELECT DISTINCT mindblog.* FROM mindblog,mindblog_comments ";
    $sql .= "WHERE mindblog.blog_id=mindblog_comments.blog_id AND (";
    my @terms = split(/[\s,]+/, $search);
    $sql .= join(" AND ", map { "(mindblog.data LIKE '%$_%' OR mindblog_comments.data LIKE '%$_%')" } @terms);
    $sql .= ") ORDER BY mindblog.timestamp DESC LIMIT 20";

    print STDERR $sql;
    
    $query = $db->prepare($sql);
    $query->execute();
    $title = "search results for ".join(", ", @terms);

} elsif ($blog_id) {
    $query = $db->prepare("SELECT * FROM mindblog WHERE blog_id=? ORDER BY timestamp DESC");
    $query->execute($blog_id);

} elsif ($timestamp) {
    $query = $db->prepare("SELECT * FROM mindblog WHERE timestamp=? ORDER BY timestamp DESC");
    $query->execute($timestamp);
    
} elsif ($upper and $lower) {
    $query = $db->prepare("SELECT * FROM mindblog WHERE timestamp>? AND timestamp<? ORDER BY timestamp DESC");
    $query->execute($lower, $upper);

} else {
    $query = $db->prepare("SELECT * FROM mindblog ORDER BY timestamp DESC LIMIT 20");
    $query->execute();
    $title = "recent entries";
}

my $comment_query = $db->prepare("SELECT * FROM mindblog_comments WHERE blog_id=? ORDER BY timestamp");

while (my $row = $query->fetchrow_hashref) {

    $row->{data} =~ s/#\s*$//;

    if ($row->{data} =~ /^http:\S+$/) {
        my $title = get_title($row->{data});
        $row->{data} = "[$row->{data}|$title]" if $title;
    }
    $row->{message} = blog_filter($row->{data});

    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime($row->{timestamp});
    $row->{date} = sprintf("%04d/%02d/%02d %02d:%02d", $year+1900, $mon+1, $mday, $hour, $min);

    $comment_query->execute($row->{blog_id});
    my $comments = [];
    while (my $comment = $comment_query->fetchrow_hashref) {
        $comment->{message} = blog_filter($comment->{data});



( run in 1.899 second using v1.01-cache-2.11-cpan-39a47a84364 )