package TTXCommon;
#
# This module is a part of Trouble Ticket Express package
# http://www.troubleticketexpress.com
#
# COPYRIGHT: 2002-2005, United Web Coders
# http://www.unitedwebcoders.com
#
# $Revision: 286 $
# $Date: 2006-10-17 11:52:21 +0400 (Tue, 17 Oct 2006) $
#
$TTXCommon::VERSION='2.22';
BEGIN {
$TTXCommon::REVISION = '$Revision: 286 $';
if ($TTXCommon::REVISION =~ /(\d+)/) {
$TTXCommon::REVISION = $1;
}
};
use strict;
require TTXData;
require TTXDictionary;
my %id2name = (
PND => 'Pending',
OPN => 'Open',
WFR => 'Responded',
'(OPN|WFR)' => 'Active',
'(PND|OPN|WFR)' => 'Not solved',
'(OPN|PND)' => 'Hot',
CLS => 'Solved'
);
my @week = ('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
# ====================================================================== cfldcnt
sub cfldcnt {
my $cnt = 10;
my $cfg = TTXData::get('CONFIG');
if ($cfg ne undef) {
my $n = int ($cfg->get('cfldcnt'));
if ($n > 10 && $n <= 100) {
$cnt = $n;
}
}
return $cnt;
}
# ======================================================================== logit
sub logit {
my $cfg = TTXData::get('CONFIG');
my $fn = $cfg->get('basedir')."/ttxlog.txt";
if (open(TTXLOG, ">>$fn")) {
flock(TTXLOG,2);
seek(TTXLOG, 0, 2);
print TTXLOG time()."|$_[0]\n";
close TTXLOG;
}
}
# ======================================================================== tmtxt
sub tmtxt {
return "-" if !$_[0];
my $cfg = TTXData::get('CONFIG');
my $tz = $cfg->get('timezone') * 60;
my $tm = $_[0] + $tz;
my ($sec,$min,$hour,$mday,$mon,$year, $wday) = gmtime($tm);
my ($sec1,$min1,$hour1,$mday1,$mon1,$year1) = gmtime(time() + $tz);
my $date;
my $wkday;
if ($cfg->get('time.weekday')) {
$wkday = TTXDictionary::translate($week[$wday]).' ';
}
if ($year != $year1 || $cfg->get('time.long')) {
$year += 1900; $year =~ s/^\d\d//;
$mon++; $mon = "0$mon" if $mon < 10;
$mday = "0$mday" if $mday < 10;
$date = $wkday . ($cfg->get('etime') ? "$mday/$mon/$year" : "$mon/$mday/$year");
} elsif ($mon != $mon1 || $mday != $mday1) {
$mon++; $mon = "0$mon" if $mon < 10;
$mday = "0$mday" if $mday < 10;
$date = $wkday . ($cfg->get('etime') ? "$mday/$mon" : "$mon/$mday");
}
$date .= " " if $date ne undef;
$hour = "0$hour" if $hour < 10;
$min = "0$min" if $min < 10;
$date .= "$hour:$min";
return $date;
}
# ======================================================================== dbtik
sub dbtik {
my $cfg = TTXData::get('CONFIG');
return undef if $cfg eq undef;
if ($cfg->get('dbmode') eq undef || $cfg->get('dbmode') eq 'plaintext') {
eval "use TTXFileTickets";
return TTXFileTickets->new();
} elsif ($cfg->get('dbmode') eq 'mysql') {
eval "use TTXMySQLTickets";
return TTXMySQLTickets->new();
} elsif ($cfg->get('dbmode') eq 'mssql') {
eval "use TTXMSSQLTickets";
return TTXMSSQLTickets->new() if !$@;
}
return TTXTickets->new();
}
# ======================================================================= status
sub status {
return $id2name{$_[0]};
}
# ====================================================================== cleanit
sub cleanit {
my ($query, $input) = @_;
my $val = $query->param($input);
$val =~ s/^\s+//;
$val =~ s/\s+$//;
$query->param(-name => $input, -value => $val);
return $val;
}
# ======================================================================== blank
sub blank {
my ($cfg, $query, $data) = @_;
return undef;
}
# ===================================================================== cfldscnt
sub cfldscnt {
my @list = grep(/^x/, $_[0]->vars());
my @editable = split(/;/, $_[0]->get('editablefields'));
my $cnt = 0;
foreach my $id (@list) {
my $cid = $_[0]->get($id);
next if $cid !~ /^\d\d?$/;
$cid = "c$cid";
++$cnt if grep(/^$cid$/, @editable);
}
return $cnt;
}
# =================================================================== tickedvars
sub tickedvars {
my ($cfg, $data) = @_;
$data->{TICKEDHEIGHT} = 250 + cfldscnt($cfg) * 30;
if ($cfg->get('editclosedate')) {
$data->{TICKEDHEIGHT} += 50;
}
if ($data->{TICKEDHEIGHT} > 600) {
$data->{TICKEDHEIGHT} = 600;
}
}
my @months = ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
# ===================================================================== pickdate
sub pickdate {
my ($query, $pref, $start) = @_;
my $buff;
my $year = $query->param($pref.'year');
my $mon = $query->param($pref.'mon');
my $day = $query->param($pref.'day');
if ($year =~ /\D/ || $year > 137) {
$year = '';
}
if ($mon =~ /\D/ || $mon > 11) {
$mon = '';
}
if ($day =~ /\D/ || $day > 31) {
$day = '';
}
if ($year eq '') {
$mon = '';
$day = '';
} else {
if ($mon eq '') {
$mon = $start ? 0:11;
$day = $start ? 1:31;
} elsif ($day eq '') {
if ($start) {
$day = 1;
} else {
my @daysmo = (31, ($year % 4) ? 28:29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$day = $daysmo[$mon];
}
}
}
$query->param(-name => $pref.'year', -value => $year);
$query->param(-name => $pref.'mon', -value => $mon);
$query->param(-name => $pref.'day', -value => $day);
$buff .= "\n\n";
return $buff;
}
# ================================================================== checkdrange
sub checkdrange {
my ($query, $start, $end) = @_;
my $year = $query->param($start.'year');
return if $year eq undef;
my $mon = $query->param($start.'mon');
my $day = $query->param($start.'day');
my $year1 = $query->param($end.'year');
my $mon1 = $query->param($end.'mon');
my $day1 = $query->param($end.'day');
if ($mon eq undef || $mon =~ /\D/ || $mon > 11) {
$mon = 0;
$day = 1;
} elsif ($day =~ /\D/ || !$day) {
$day = 1;
} else {
my @daysmo = (31, ($year % 4) ? 28:29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$day = $daysmo[$mon] if $day > $daysmo[$mon];
}
if ($year1 eq undef || $year1 =~ /\D/) {
$year1 = $year;
}
if ($mon1 eq undef || $mon1 =~ /\D/ || $mon1 > 11) {
$mon1 = 11;
$day1 = 31;
} else {
if ($day1 =~ /\D/ || !$day1) {
$day1 = 31;
}
my @daysmo = (31, ($year1 % 4) ? 28:29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
$day1 = $daysmo[$mon1] if $day1 > $daysmo[$mon1];
}
eval "use Time::Local";
if ($@ eq undef) {
my $stm = Time::Local::timegm(0,0,0,$day,$mon,$year);
my $etm = Time::Local::timegm(59,59,23,$day1,$mon1,$year1);
if ($etm < $stm) {
$etm = $stm + 24*3600;
}
($day, $mon, $year) = (gmtime($stm))[3,4,5];
($day1, $mon1, $year1) = (gmtime($etm))[3,4,5];
}
$query->param(-name => $start.'year', -value => $year);
$query->param(-name => $start.'mon', -value => $mon);
$query->param(-name => $start.'day', -value => $day);
$query->param(-name => $end.'year', -value => $year1);
$query->param(-name => $end.'mon', -value => $mon1);
$query->param(-name => $end.'day', -value => $day1);
}
1;
#