Platon Technologies
neprihlásený Prihlásiť Registrácia
SlovakEnglish
open source software development oslavujeme 10 rokov vývoja otvoreného softvéru! Piatok, 19. apríl 2024

Súbor: [Platon] / web-apps / call-centre-system / index.fcgi (stiahnutie)

Revízia 1.2, Sun May 1 00:24:20 2005 UTC (18 years, 11 months ago) by nepto


Zmeny od 1.1: +2 -2 [lines]

Added english translation of the application and made it as default.

#!/usr/bin/perl -w

#
# index.fcgi
#
# Developed by Ondrej Jombik <nepto@platon.sk>
# Copyright (c) 2004 Platon SDG, http://platon.sk/
# Licensed under terms of GNU General Public License.
# All rights reserved.
#
# Changelog:
# 16/01/2004 - created
#

# $Platon: web-apps/call-centre-system/index.fcgi,v 1.1 2004/03/10 11:34:51 nepto Exp $

package main;

$| = 1;
use strict;
umask 022;

use lib qw( ./modules );

use FCGI;
use CGI::Lite;
use DBI qw(:sql_types);
use Template;
use Template::Plugin;
use Template::Exception;
use Date::Calc qw(Today);
use Time::HiRes qw(gettimeofday tv_interval);
use Cwd;
use File::Basename qw( basename fileparse );

use Customer;
use Product;
use User;
use Call;
use Order;

use vars qw (
  $cgi $req $tmpl $current_user %query %cookie
  $runcount $runlimit
  $fastcgi_name
);

$req  = FCGI::Request();
$cgi  = CGI::Lite->new();
$tmpl = Template->new( {
        INCLUDE_PATH => [ './templates/en', './templates' ],
        AUTHOR       => 'Ondrej Jombik',
        PRE_PROCESS  => 'defaults.tt2',
        VARIABLES    => {
            fastcgi_script => 'index.fcgi',
            fastcgi_title  => 'CALL CENTRE SYSTEM',
            image_edit     => 'images/pme-change.png',
            image_view     => 'images/pme-view.png',
            image_delete   => 'images/pme-delete.png',
            image_copy     => 'images/pme-copy.png'
        },
} );

# 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(); };

# }}}

$runcount = 0;
$runlimit = 1000;
while ( ( $runcount++ < $runlimit ) && ( $req->Accept() >= 0 ) ) {

    %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{$_} );
        $query{$1}{$2} = $query{$_} if ( $_ =~ /^(.+)\[(.+)\]$/ );
    }
    foreach ( keys(%cookie) ) {    # simplify cookies if they are arrays
        $cookie{$_} = $cookie{$_}[0] if ( ref $cookie{$_} );
    }

    $current_user = User->new( $cookie{'SESSIONID'} );

    #
    # Default action
    #
    if ( !defined( $query{action} ) or $query{action} eq '' ) {
        $query{action} = 'welcome';
    }

    #
    # DB Insert/Update/Delete actions
    #
    if ( $query{action} eq 'login' && $current_user->isAnonymous() ) {
        my $success = $current_user->login( $query{'login'}, $query{'password'} );
        $query{action} = $success ? 'welcome' : 'login_page';
    } elsif ( $query{action} eq 'logout' && !$current_user->isAnonymous() ) {
        $current_user->logout();
        $query{action} = 'welcome';
    } elsif ( $query{action} eq 'customer_save' ) {
        customerSave();
        $query{action} = 'customer_list';
    } elsif ( $query{action} eq 'customer_delete' ) {
        customerDelete();
        $query{action} = 'customer_list';
    } elsif ( $query{action} eq 'product_save' ) {
        productSave();
        $query{action} = 'product_list';
    } elsif ( $query{action} eq 'product_delete' ) {
        productDelete();
        $query{action} = 'product_list';
    } elsif ( $query{action} eq 'user_save' ) {
        userSave();
        $query{action} = 'user_list';
    } elsif ( $query{action} eq 'user_delete' ) {
        userDelete();
        $query{action} = 'user_list';
    } elsif ( $query{action} eq 'call_save' ) {
        callSave();
        $query{action} = $query{customer_calls} ? 'customer_view' : 'call_list';
    } elsif ( $query{action} eq 'call_delete' ) {
        callDelete();
        $query{action} = $query{customer_calls} ? 'customer_view' : 'call_list';
    }

    #
    # Screen actions
    #
    if ( $query{action} eq 'login_page' && $current_user->isAnonymous() ) {
        loginPage();
    } elsif ( $query{action} eq 'customer_list' ) {
        customerList();
    } elsif ( $query{action} eq 'customer_view' ) {
        customerView();
    } elsif ( $query{action} eq 'customer_edit' ) {
        customerEdit();
    } elsif ( $query{action} eq 'customer_copy' ) {
        customerCopy();
    } elsif ( $query{action} eq 'product_list' ) {
        productList();
    } elsif ( $query{action} eq 'product_view' ) {
        productView();
    } elsif ( $query{action} eq 'product_edit' ) {
        productEdit();
    } elsif ( $query{action} eq 'product_copy' ) {
        productCopy();
    } elsif ( $query{action} eq 'user_list' ) {
        userList();
    } elsif ( $query{action} eq 'user_view' ) {
        userView();
    } elsif ( $query{action} eq 'user_edit' ) {
        userEdit();
    } elsif ( $query{action} eq 'user_copy' ) {
        userCopy();
    } elsif ( $query{action} eq 'call_list' ) {
        callList();
    } elsif ( $query{action} eq 'call_view' ) {
        callView();
    } elsif ( $query{action} eq 'call_edit' ) {
        callEdit('edit');
    } elsif ( $query{action} eq 'call_copy' ) {
        callEdit('copy');
    } else {    # default "welcome" screen
        welcome();
    }

    $current_user->updateLastAccess();

    if ( -M $ENV{SCRIPT_FILENAME} < 0 ) {    # Autorestart
        my $seconds = -86400.0 * -M $ENV{SCRIPT_FILENAME};
        warn "FastCGI MODIFIED $seconds seconds after startup, restarting ...\n";
        $req->LastCall();
    }
    $req->Finish();

    undef %cookie;
    undef %query;
}

exit 0;

#########################################################################
##
## FUNCTIONS
##
#########################################################################

sub welcome    # {{{
{
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
    };
    $tmpl->process( 'welcome.tt2', $template_data ) or die $tmpl->error(), "\n";
}              # }}}

sub loginPage  # {{{
{
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
    };
    $tmpl->process( 'login_page.tt2', $template_data ) or die $tmpl->error(), "\n";
}              # }}}

# CUSTOMERS routines {{{

sub customerSave    # {{{
{
    Customer::set( $query{'data'}{'cid'}, $query{'data'}, $current_user->getUserID() );
}                   # }}}

sub customerDelete  # {{{
{

    Customer::delete( $query{'data'}{'cid'} );
}                   # }}}

sub customerList    # {{{
{
    my $customers = Customer::getFilteredList( $query{'filter'}, $query{'sort'} );
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        customers    => $customers
    };
    $tmpl->process( 'customer_list.tt2', $template_data ) or die $tmpl->error(), "\n";
}                   # }}}

sub customerView    # {{{
{
    my $cid      = $query{'data'}{'cid'};
    my $customer = Customer::get($cid);
    $query{'filter2'}{'cid'} = $cid;
    $query{'sort2'} ||= '-call_date';
    $customer->{'calls'} = Call::getFilteredList( $query{'filter2'}, $query{'sort2'} );
    my $template_data = {
        current_user   => $current_user->get(),
        query          => \%query,
        customer       => $customer,
        customer_calls => 1
    };
    $tmpl->process( 'customer_view.tt2', $template_data ) or die $tmpl->error(), "\n";
}    # }}}

sub customerEdit    # {{{
{
    my $cid           = $query{'data'}{'cid'};
    my $customer      = Customer::get($cid);
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        customer     => $customer
    };
    $tmpl->process( 'customer_edit.tt2', $template_data ) or die $tmpl->error(), "\n";
}                   # }}}

sub customerCopy    # {{{
{
    my $cid      = $query{'data'}{'cid'};
    my $customer = Customer::get($cid);
    $customer->{'cid'} = 0;
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        customer     => $customer,
    };
    $tmpl->process( 'customer_edit.tt2', $template_data ) or die $tmpl->error(), "\n";
}                   # }}}

# }}}

# PRODUCTS routines {{{

sub productSave     # {{{
{
    Product::set( $query{'data'}{'prod_id'}, $query{'data'}, $current_user->getUserID() );
}                   # }}}

sub productDelete   # {{{
{

    Product::delete( $query{'data'}{'prod_id'} );
}                   # }}}

sub productList     # {{{
{
    my $products = Product::getFilteredList( $query{'filter'}, $query{'sort'} );
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        products     => $products
    };
    $tmpl->process( 'product_list.tt2', $template_data ) or die $tmpl->error(), "\n";
}                   # }}}

sub productView     # {{{
{
    my $prod_id       = $query{'data'}{'prod_id'};
    my $product       = Product::get($prod_id);
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        product      => $product
    };
    $tmpl->process( 'product_view.tt2', $template_data ) or die $tmpl->error(), "\n";
}                   # }}}

sub productEdit     # {{{
{
    my $prod_id       = $query{'data'}{'prod_id'};
    my $product       = Product::get($prod_id);
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        product      => $product
    };
    $tmpl->process( 'product_edit.tt2', $template_data ) or die $tmpl->error(), "\n";
}                   # }}}

sub productCopy     # {{{
{
    my $prod_id = $query{'data'}{'prod_id'};
    my $product = Product::get($prod_id);
    $product->{'prod_id'} = 0;
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        product      => $product
    };
    $tmpl->process( 'product_edit.tt2', $template_data ) or die $tmpl->error(), "\n";
}                   # }}}

# }}}

# USER routines {{{

sub userSave        # {{{
{
    User::set( $query{'data'}{'uid'}, $query{'data'}, $current_user->getUserID() );
}                   # }}}

sub userDelete      # {{{
{
    User::delete( $query{'data'}{'uid'} );
}                   # }}}

sub userList        # {{{
{
    my $users = User::getFilteredList( $query{'filter'}, $query{'sort'} );
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        users        => $users
    };
    $tmpl->process( 'user_list.tt2', $template_data ) or die $tmpl->error(), "\n";
}                   # }}}

sub userView        # {{{
{
    my $uid           = $query{'data'}{'uid'};
    my $user          = User::get($uid);
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        user         => $user
    };
    $tmpl->process( 'user_view.tt2', $template_data ) or die $tmpl->error(), "\n";
}                   # }}}

sub userEdit        # {{{
{
    my $uid = $query{'data'}{'uid'};
    my $user = $uid ? User::get($uid) : undef;
    $user->{'parents'} = User::getLoginList();
    $user->{'parents'}{0} = 'N/A';
    delete $user->{'parents'}{$uid};
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        user         => $user
    };
    $tmpl->process( 'user_edit.tt2', $template_data ) or die $tmpl->error(), "\n";
}    # }}}

sub userCopy    # {{{
{
    my $uid  = $query{'data'}{'uid'};
    my $user = User::get($uid);
    $user->{'uid'} = 0;
    my $template_data = {
        current_user => $current_user->get(),
        query        => \%query,
        user         => $user
    };
    $tmpl->process( 'user_edit.tt2', $template_data ) or die $tmpl->error(), "\n";
}               # }}}

# }}}

# CALL routines {{{

sub callSave    # {{{
{
    $query{'data'}{'uid'} ||= $current_user->getUserID();
    Call::set( $query{'data'}{'call_id'}, $query{'data'}, $current_user->getUserID() );
}               # }}}

sub callDelete  # {{{
{
    Call::delete( $query{'data'}{'call_id'} );
}               # }}}

sub callList    # {{{
{
    my ( $year, $month, $day ) = Date::Calc::Today();
    $query{'filter2'}{'call_date'} = sprintf( '%04d-%02d-%02d', $year, $month, $day )
      if ( !defined $query{'filter2'}{'call_date'} );
    $query{'filter2'}{'uid'} = $current_user->getUserID();
    $query{'sort2'} ||= '-call_date';
    my $calls = Call::getFilteredList( $query{'filter2'}, $query{'sort2'} );
    my $template_data = {
        current_user   => $current_user->get(),
        query          => \%query,
        calls          => $calls,
        customer_calls => 0
    };
    $tmpl->process( 'call_list.tt2', $template_data ) or die $tmpl->error(), "\n";
}    # }}}

sub callView    # {{{
{
    my $customer_calls = $query{'customer_calls'} ? 1 : 0;
    my $call_id       = $query{'data'}{'call_id'};
    my $call          = Call::get($call_id);
    my $template_data = {
        current_user   => $current_user->get(),
        query          => \%query,
        call           => $call,
        customer_calls => $customer_calls
    };
    $tmpl->process( 'call_view.tt2', $template_data ) or die $tmpl->error(), "\n";
}               # }}}

sub callEdit    # {{{
{
    my $customer_calls = $query{'customer_calls'} ? 1 : 0;
    my $operation = shift;
    my $call_id = $query{'data'}{'call_id'};
    my $call    = Call::get($call_id);
    $call->{'call_id'} = 0 if ( $operation eq 'copy' );
    $call->{'logins'}    = User::getLoginList();
    $call->{'customers'} = Customer::getNameList();
    $call->{'cid'}      ||= $query{'data'}{'cid'};
    $call->{'customer'} ||= $call->{'customers'}->{ $call->{'cid'} };
    my $template_data = {
        current_user   => $current_user->get(),
        query          => \%query,
        call           => $call,
        customer_calls => $customer_calls
    };
    $tmpl->process( 'call_edit.tt2', $template_data ) or die $tmpl->error(), "\n";
}    # }}}

# }}}

# vim: ft=perl
# vim600: fdm=marker fdl=0 fdc=3


Platon Group <platon@platon.sk> http://platon.sk/
Copyright © 2002-2006 Platon Group
Stránka používa redakčný systém Metafox
Na začiatok