/usr/local/CPAN/Blikistan/Blikistan/MagicEngine/Perl.pm


package Blikistan::MagicEngine::Perl;
use strict;
use warnings;
use base 'Blikistan::MagicEngine::TT2';
use base 'Blikistan::MagicEngine::YamlConfig';
use URI::Escape;

sub print_blog {
    my $self = shift;
    my $r = $self->{rester};
    
    my $params = $self->load_config;
    $params->{rester} = $r;
    $params->{blog_tag} ||= $self->{blog_tag};

    if (my $who = $self->{subblog}) {
        my $sub_tag = $params->{subblogs}{$who};
        $params->{blog_tag} = $sub_tag ? $sub_tag->{blog_tag} : $who;
    }

    my $show_latest = delete $params->{show_latest_posts}
        || $self->{show_latest_posts};

    my @posts = $r->get_taggedpages($params->{blog_tag});
    @posts = splice @posts, 0, $show_latest;

    $r->accept('text/html');
    $params->{posts} = [
        map { 
            title => $_, 
            content => _get_page($r, $_),
            permalink => _linkify($r, $_),
            date => scalar($r->response->header('Last-Modified')),
        }, @posts,
    ];

    return $self->render_template( $params );
}

sub _linkify {
    my $r = shift;
    my $page = uri_escape(shift);
    return $r->server . '/' . $r->workspace . "/index.cgi?$page";
}

sub _get_page {
    my $r = shift;
    my $page_name = shift;
    my $html = $r->get_page($page_name) || '';

    while ($html =~ s/<a href="([\w_]+)"\s*/'<a href="' . _linkify($r, $1) . '"'/eg) {}

    $html =~ s#^<div class="wiki">(.+)</div>\s*$#$1#s;
    return $html;
}

1;