#!/usr/bin/perl -w
#
# index.fcgi
#
# Developed by Lubomir Host 'rajo' <rajo AT platon.sk>
# Copyright (c) 2004 Platon SDG, http://platon.sk/
# Licensed under terms of GNU General Public License.
# All rights reserved.
#
# Changelog:
# 08/02/2004 - created
#
# $Platon: web-apps/finance-manager/index.fcgi,v 1.4 2004/04/09 09:18:15 rajo Exp $
use strict;
umask 022;
use lib qw( ./modules );
use FCGI;
use CGI::Lite;
use Time::HiRes qw(gettimeofday tv_interval);
use globals;
use template;
use db;
use Event;
use Source;
use restart;
use vars qw (
$in_reply
$cgi $req $globals
$template $dbh
$event $source
$restart
);
#
# Function declaration
#
sub to_ascii($;);
sub Main($;);
sub Sources($;);
sub NewSource($;);
sub EditSource($;);
sub Events($;);
sub NewEvent($;);
sub EditEvent($;);
$cgi = CGI::Lite->new();
$req = FCGI::Request();
$globals = globals->new();
$template = template->new($globals);
$dbh = db->new($globals);
$event = Event->new($globals, $dbh);
$source = Source->new($globals, $dbh);
$restart = restart->new({
restart_func => sub { $req->LastCall() },
CHECK_USER_MODULES => 'true',
CHECK_SYSTEM_MODULES => 'false',
});
# signal handlers {{{
local $SIG{ALRM}= sub { $req->LastCall(); };
local $SIG{SEGV}= sub { die "SIGSEGV received!!: $!"; };
local $SIG{TERM}= sub { $req->LastCall(); };
local $SIG{ABRT}= sub { $req->LastCall(); };
local $SIG{KILL}= sub { $req->LastCall(); };
local $SIG{XCPU}= sub { $req->LastCall(); };
local $SIG{XFSZ}= sub { $req->LastCall(); };
# }}}
# All modules loaded, push them to the restart.pm:
$restart->add_loaded_modules();
#
# MAIN:
#
# {{{
while ( $globals->run && ($req->Accept() >= 0) ) {
my %query;
my %cookie;
$in_reply = 0; # no output yet
%query = $cgi->parse_new_form_data();
%cookie = $cgi->parse_cookies();
foreach (keys(%query)) { # simplify query if they are arrays
$query{$_} = $query{$_}[0] if (ref $query{$_});
}
foreach (keys(%cookie)) { # simplify cookies if they are arrays
$cookie{$_} = $cookie{$_}[0] if (ref $cookie{$_});
}
if (!defined($query{action}) or $query{action} eq '') {
$query{action} = "default";
}
if ($query{action} eq 'default') {
Main(\%query);
}
if ($query{action} eq 'newsource') {
NewSource(\%query);
}
elsif ($query{action} eq 'editsource') {
EditSource(\%query);
}
elsif ($query{action} eq 'newevent') {
NewEvent(\%query);
}
elsif ($query{action} eq 'editevent') {
EditEvent(\%query);
}
if ($query{action} eq 'sources') {
Sources(\%query);
}
elsif ($query{action} eq 'events') {
Events(\%query);
}
elsif ($query{action} eq 'about') {
my $template_data = {
query => \%query,
};
$in_reply = 1;
$template->process('about.tt2', $template_data) or die $template->error(), "\n";
}
if ($in_reply == 0) {
Main(\%query);
}
$restart->restart($ENV{SCRIPT_FILENAME});
$req->Finish();
undef %cookie;
undef %query;
} # }}}
exit 0;
sub Main($;)
{ # {{{
my ($ref_query) = @_;
my $template_data = {
query => $ref_query,
};
$in_reply = 1;
$template->process('index.tt2', $template_data) or die $template->error(), "\n";
} # }}} Main
sub Sources($;)
{ # {{{
my ($ref_query) = @_;
my $template_data = {
query => $ref_query,
sources => $source->list(),
};
$in_reply = 1;
$template->process('sources.tt2', $template_data) or die $template->error(), "\n";
} # }}} Sources
sub NewSource($;)
{ # {{{
my ($ref_query) = @_;
my $template_data;
if (defined $ref_query->{store} and $ref_query->{store} eq '1') { # save data into db
$template_data = {
query => $ref_query,
};
$ref_query->{active} = (defined($ref_query->{active}) and $ref_query->{active} =~ m/^\d$/) ? $ref_query->{active} : 0;
$source->new_source($ref_query);
$ref_query->{action} = "sources";
}
else {
$template_data = {
query => $ref_query,
};
$in_reply = 1;
$template->process('newsource.tt2', $template_data) or die $template->error(), "\n";
}
} # }}} EditSource
sub EditSource($;)
{ # {{{
my ($ref_query) = @_;
my $template_data;
if (defined $ref_query->{store} and $ref_query->{store} eq '1') { # save data into db
$template_data = {
query => $ref_query,
};
$ref_query->{active} = (defined($ref_query->{active}) and $ref_query->{active} =~ m/^\d$/) ? $ref_query->{active} : 0;
$source->update_source($ref_query);
$ref_query->{action} = "sources";
}
else { # read data from db and fill formular
$template_data = {
query => $ref_query,
source => $source->get($ref_query->{sourceid}),
};
$in_reply = 1;
$template->process('editsource.tt2', $template_data) or die $template->error(), "\n";
}
} # }}} EditSource
sub Events($;)
{ # {{{
my ($ref_query) = @_;
my $template_data = {
query => $ref_query,
events => $event->list(),
sources => $source->list(),
};
$in_reply = 1;
$template->process('events.tt2', $template_data) or die $template->error(), "\n";
} # }}} Events
sub NewEvent($;)
{ # {{{
my ($ref_query) = @_;
my $template_data;
if (defined $ref_query->{store} and $ref_query->{store} eq '1') { # save data into db
$template_data = {
query => $ref_query,
};
$ref_query->{active} = (defined($ref_query->{active}) and $ref_query->{active} =~ m/^\d$/) ? $ref_query->{active} : 0;
$event->new_event($ref_query);
$ref_query->{action} = "events";
}
else {
$template_data = {
query => $ref_query,
};
$in_reply = 1;
$template->process('newevent.tt2', $template_data) or die $template->error(), "\n";
}
} # }}} EditEvent
sub EditEvent($;)
{ # {{{
my ($ref_query) = @_;
my $template_data;
if (defined $ref_query->{store} and $ref_query->{store} eq '1') { # save data into db
$template_data = {
query => $ref_query,
};
$ref_query->{active} = (defined($ref_query->{active}) and $ref_query->{active} =~ m/^\d$/) ? $ref_query->{active} : 0;
$event->update_event($ref_query);
$ref_query->{action} = "events";
}
else { # read data from db and fill formular
$template_data = {
query => $ref_query,
event => $event->get($ref_query->{eventid}),
};
$in_reply = 1;
$template->process('editevent.tt2', $template_data) or die $template->error(), "\n";
}
} # }}} EditEvent
sub to_ascii($;)
{ # {{{
my ($str) = @_;
$str =~ tr/AÁÄBCČDĎEÉĚËFGHIÍJKLĹźMNŇOÓÔÖPQRŔŘSTUÚŮÜVWXYÝZaáäbcčdďeéěëfghiíjklĺžmnňoóôöpqrŕřstuúůüvwxyýz/AAABCCDDEEEEFGHIIJKLLLMNNOOOOPQRRRSSTTUUUUVWXYYZZaaabccddeeeefghiijklllmnnoooopqrrrssttuuuuvwxyyzz/;
return $str;
} # }}}
# vim: ft=perl
# vim600: fdm=marker fdl=0 fdc=3
Platon Group <platon@platon.sk> http://platon.sk/
|