#!/usr/bin/perl package Bloggie; use base qw(CGI::Application); use strict; use warnings; use CGI::Carp qw/fatalsToBrowser/; use CGI::Application::Plugin::TT; use DB_File; sub setup { my $self = shift @_; $self->start_mode('start'); $self->mode_param('rm'); $self->run_modes( 'start' => 'start', 'new post form' => 'new_post_form', 'new post success' => 'new_post_success', 'redirect' => 'redirect', ); } sub cgiapp_get_query { require CGI::Simple; CGI::Simple->new(); } sub cgiapp_init { my $self = shift; my $dataname = "data.dbm"; my %database; die("Can't open ${dataname}: $!\n") unless dbmopen %database, $dataname, 438; $$self{'DATA'} = \%database; } sub start { my $self = shift; my $templatename = 'start.tt'; my %database = %{ $$self->{'DATA'}; }; my $posts = $database{'POSTS'}; my $vars = { 'posts', $posts }; return $self->tt_process( $templatename, $vars ); } sub new_post_form { my $self = shift; my $templatename = 'new_post_form.tt'; return $self->tt_process($templatename); } sub new_post_success { my $self = shift; my $templatename = "new_post_success.tt"; my (%database) = %{ $$self->{'DATA'}; }; my @posts = (); my $post; if ( defined $database{'POSTS'} ) { @posts = @{ $database{'POSTS'}; }; } my $query = $self->query; my $title = $self->param('title'); my $content = $self->param('content'); $post = { title => $title, content => $content }; my $vars = { title => $title, content => $content }; push @posts, $post; $database{'POSTS'} = \@posts; return $self->tt_process( $templatename, $vars ); } 1;