#!/bin/perl -wT use diagnostics; use strict; use warnings; use CGI::Pretty; my $Path = 'SENSITIVE_DATA_EDITTED_OUT'; push @INC, $Path; my $WebPage = new CGI::Pretty; if(defined $WebPage->param('Reset')) { $WebPage->delete_all ;} my $NextNumber = 0; require "PerlDesk.pl"; my $dbh = &_databaseConnect(); my $Tickets = &databaseEntrys('select id,category,time,status,ownership,username from perldesk.calls', 'id'); my $Customer = &databaseEntrys('select username,name,company from perldesk.users', 'username'); my $INTStaff = &databaseEntrys('select username,name from perldesk.staff', 'username'); $dbh->disconnect; ################################################################ sub databaseEntrys { my ($QUERY, $ORDER) = ($_[0], $_[1]); if ((!(defined($QUERY))) || (!(defined($ORDER)))) { return; } my $self = {}; my $sth = $dbh->prepare("$QUERY"); $sth->execute; while (my $rows = $sth->fetchrow_hashref) { $self->{$rows->{$ORDER}} = $rows; } $sth->finish; return $self; } ####################################################### sub UniqueList { my ($Hashish, $Section) = ($_[0], $_[1]); my @List = (); foreach my $entry (keys %{$Hashish}) { if ($entry eq 0) { push @List, '--ALL--'; next; } #Trim out duplicates my $Entry = $Hashish->{$entry}->{$Section}; my $check = 'passed'; foreach my $i (@List) { if ($i eq $Entry) { $check = 'failed'; } } push @List, $Entry unless($check eq 'failed'); $check = 'passed'; } @List = sort (@List); return $WebPage->popup_menu ( -values => \@List, -name => $Hashish->{0}->{$Section}, -default => '--ALL--' ); } ####################################################### sub table_header { my ($Hashish) = $_[0]; return join ( '', $WebPage->Tr ( $WebPage->td ( { -class => $Hashish->{0}->{7} }, [ $Hashish->{0}->{1}, $Hashish->{0}->{2}, $Hashish->{0}->{3}, $Hashish->{0}->{4}, $Hashish->{0}->{5}, $Hashish->{0}->{6}, $Hashish->{0}->{7} ] ) ), $WebPage->Tr ( $WebPage->td ( { -class => 'OPEN' }, [ '', &UniqueList($Hashish,2), &UniqueList($Hashish,3), &UniqueList($Hashish,4), &UniqueList($Hashish,5), &UniqueList($Hashish,6), &UniqueList($Hashish,7) ], ) ) ); } ############################################################################### sub WebPageParameter { my ($VALUE, $PARAM) = ($_[0],$_[1]); if (!defined($WebPage->param($PARAM))) { return 1; } if ( ($WebPage->param($PARAM) ne $VALUE ) && ($WebPage->param($PARAM) ne '--ALL--') ) { return undef; } return 1; } ############################################################################## sub Filtered { my ($Hash, $Entry) = ($_[0], $_[1]); return undef unless defined(WebPageParameter($Hash->{$Entry}->{2}, $Hash->{0}->{2})); return undef unless defined(WebPageParameter($Hash->{$Entry}->{3}, $Hash->{0}->{3})); return undef unless defined(WebPageParameter($Hash->{$Entry}->{4}, $Hash->{0}->{4})); return undef unless defined(WebPageParameter($Hash->{$Entry}->{5}, $Hash->{0}->{5})); return undef unless defined(WebPageParameter($Hash->{$Entry}->{6}, $Hash->{0}->{6})); return undef unless defined(WebPageParameter($Hash->{$Entry}->{7}, $Hash->{0}->{7})); return 1; } ############################################################################### sub table_entry { my ($Hashish, $StartEntry, $FinishEntry) = ($_[0], $_[1], $_[2]); my $RETURN = ''; for (my $i = $StartEntry; $i <= $FinishEntry; $i++) { next unless defined(Filtered($Hashish, $i)); my $OTHER = $WebPage->Tr ( $WebPage->td ( { -class => $Hashish->{$i}->{7} }, [ $Hashish->{$i}->{1}, $Hashish->{$i}->{2}, $Hashish->{$i}->{3}, $Hashish->{$i}->{4}, $Hashish->{$i}->{5}, $Hashish->{$i}->{6}, $Hashish->{$i}->{7} ] ) ); $RETURN = join (' ', $RETURN, $OTHER); } return $RETURN; } ############################################################################### sub processData { my $self = {}; $self->{0}->{1} = 'Ticket'; $self->{0}->{2} = 'Product'; $self->{0}->{3} = 'Assignee'; $self->{0}->{4} = 'Customer'; $self->{0}->{5} = 'Company'; $self->{0}->{6} = 'Opened'; $self->{0}->{7} = 'Status'; foreach my $Entry ( keys %{$Tickets} ) { $NextNumber++; my $Number = $Tickets->{$Entry}->{id}; $Tickets->{$Entry}->{time} = reverse join('-', (split('-', $Tickets->{$Entry}->{time}))[0..2]); $self->{$Number}->{TicketNumber} = $Tickets->{$Entry}->{id}; $self->{$Number}->{0} = "{$Entry}->{id}\" />"; $self->{$Number}->{1} = $WebPage->a ( { -href => "cgi-bin/staff.cgi?do=ticket&cid=$Tickets->{$Entry}->{id}", -class => "$Tickets->{$Entry}->{status}", -target=> '_new' }, "$Tickets->{$Entry}->{id}" ); $self->{$Number}->{2} = $Tickets->{$Entry}->{category}; $self->{$Number}->{3} = $INTStaff->{$Tickets->{$Entry}->{ownership}}->{name}; $self->{$Number}->{4} = $Customer->{$Tickets->{$Entry}->{username}}->{name}; $self->{$Number}->{5} = $Customer->{$Tickets->{$Entry}->{username}}->{company}; $self->{$Number}->{6} = $Tickets->{$Entry}->{time}; $self->{$Number}->{7} = $Tickets->{$Entry}->{status}; } return $self; } sub resetForm { $WebPage->delete_all; print displayWebPage(); } ########################################################################### sub displayWebPage { return $WebPage->header, $WebPage->start_html ( -title => 'Interactive Network Technologies, Inc - PerlDesk', -style => { -src => "SupportDesk_Style.css" } ), $WebPage->startform, $WebPage->table ( $WebPage->td ( {-align => 'center'}, $WebPage->a({-href => 'SENSITIVE_DATA_EDITTED_OUT', -target => '_new'}, "[ Attachments ]"), $WebPage->a({-href => 'SENSITIVE_DATA_EDITTED_OUT', -target => '_new'}, "[ Admin ]"), $WebPage->a({-href => 'SENSITIVE_DATA_EDITTED_OUT', -target => '_new'}, "[ Staff ]"), $WebPage->a({-href => 'SENSITIVE_DATA_EDITTED_OUT', -target => '_new'}, "[ Users ]"), $WebPage->a({-href => 'SENSITIVE_DATA_EDITTED_OUT', -target => '_new'}, "[ Customer_Database ]") ) ), $WebPage->table ( $WebPage->td ( $WebPage->textfield ( -name => 'StartingNumber', -default => 1, -size => 5, -maxlength=> 5 ), $WebPage->b("Show from Ticket"), $WebPage->br, $WebPage->textfield ( -name => 'EndingNumber', -default => $NextNumber, -size => 5, -maxlength=> 5 ), $WebPage->b("To Ticket"), "(last number: $NextNumber)" ), $WebPage->td ( $WebPage->submit (value => 'Activate Filter'), $WebPage->checkbox ( -name => 'Reset', -label => 'Check here, and Activate Filter to reset defaults' ), ) ), $WebPage->table ({-border => 'solid'}, @_ ), $WebPage->end_form, $WebPage->end_html; return; } ##################################################################### my $Entities = &processData(); my $start = 0; my $final = $NextNumber; $start = $WebPage->param('StartingNumber') if (defined ($WebPage->param('StartingNumber'))); $final = $WebPage->param('EndingNumber') if (defined ($WebPage->param('EndingNumber'))); if ($start le 0) { $start = 1; } if (($final < $start) || ($final > $NextNumber)) { $final = $NextNumber; } $WebPage->param('EndingNumber', $final); $WebPage->param('StartingNumber', $start); print displayWebPage(table_header($Entities),table_entry($Entities,$start, $final)); 1;