#!/usr/bin/perl -w # # index.fcgi # # Developed by Lubomir Host 'rajo' # 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ÀØSŠT�UÚÙÜVWXYÝZŽaáäbcèdïeéìëfghiíjklå¾mnòoóôöpqràøsšt�uúùüvwxyýzž/AAABCCDDEEEEFGHIIJKLLLMNNOOOOPQRRRSSTTUUUUVWXYYZZaaabccddeeeefghiijklllmnnoooopqrrrssttuuuuvwxyyzz/; return $str; } # }}} # vim: ft=perl # vim600: fdm=marker fdl=0 fdc=3