Initial Commit of AgileBill Open Source
This commit is contained in:
405
modules/core/graph.inc.php
Normal file
405
modules/core/graph.inc.php
Normal file
@@ -0,0 +1,405 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* AgileBill - Open Billing Software
|
||||
*
|
||||
* This body of work is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the Open AgileBill License
|
||||
* License as published at http://www.agileco.com/agilebill/license1-4.txt
|
||||
*
|
||||
* For questions, help, comments, discussion, etc., please join the
|
||||
* Agileco community forums at http://forum.agileco.com/
|
||||
*
|
||||
* @link http://www.agileco.com/
|
||||
* @copyright 2004-2008 Agileco, LLC.
|
||||
* @license http://www.agileco.com/agilebill/license1-4.txt
|
||||
* @author Tony Landis <tony@agileco.com>
|
||||
* @package AgileBill
|
||||
* @version 1.4.93
|
||||
*/
|
||||
|
||||
class CORE_graph
|
||||
{
|
||||
|
||||
|
||||
########################################################################
|
||||
### Create a Bar Graph
|
||||
########################################################################
|
||||
|
||||
function PIE_graph($module, $method, $type, $start, $extra_fields)
|
||||
{
|
||||
global $C_translate, $C_auth;
|
||||
include_once(PATH_CORE . 'validate.inc.php');
|
||||
$dt = new CORE_validate;
|
||||
|
||||
include (PATH_GRAPH."jpgraph.php");
|
||||
|
||||
####################################################################
|
||||
### Check if 'search' is authorized for this account
|
||||
####################################################################
|
||||
|
||||
# check the validation for this function
|
||||
if($C_auth->auth_method_by_name($module,'search'))
|
||||
{
|
||||
# validate this file exists, and include it.
|
||||
if (file_exists(PATH_MODULES . '/' . $module . '/' . $module . '.inc.php'))
|
||||
{
|
||||
include_once(PATH_MODULES . '/' . $module . '/' . $module . '.inc.php');
|
||||
}
|
||||
else
|
||||
{
|
||||
### Not exist!
|
||||
$error = $C_translate->translate('module_non_existant','','');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
### Not auth
|
||||
$error = $C_translate->translate('module_non_auth','','');
|
||||
}
|
||||
|
||||
|
||||
if(isset($error))
|
||||
{
|
||||
include (PATH_GRAPH."jpgraph_canvas.php");
|
||||
// Create the graph.
|
||||
$graph = new CanvasGraph(460,55,"auto");
|
||||
$t1 = new Text($error);
|
||||
$t1->Pos(0.2,0.5);
|
||||
$t1->SetOrientation("h");
|
||||
$t1->SetBox("white","black",'gray');
|
||||
$t1->SetFont(FF_FONT1,FS_NORMAL);
|
||||
$t1->SetColor("black");
|
||||
$graph->AddText($t1);
|
||||
$graph->Stroke();
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
# initialize the module, if it has not already been initialized
|
||||
$eval = '$' . $module . ' = new ' . $module . '; ';
|
||||
$eval .= '$this_Obj = $' . $module . ';';
|
||||
eval ($eval);
|
||||
|
||||
# run the function
|
||||
$array = call_user_func (array($module, $method), $start_str, $end_str, $constraint_array, $default_array, $extra_fields);
|
||||
|
||||
|
||||
include (PATH_GRAPH."jpgraph_pie.php");
|
||||
include (PATH_GRAPH."jpgraph_pie3d.php");
|
||||
|
||||
|
||||
$data = $array['data'];
|
||||
$legends = $array['legends'];
|
||||
|
||||
// Create the Pie Graph.
|
||||
$graph = new PieGraph(500,250,"auto");
|
||||
$graph->SetScale("textlin");
|
||||
$graph->SetMarginColor('#F9F9F9');
|
||||
$graph->SetFrame(true,'#FFFFFF',0);
|
||||
$graph->SetColor('#F9F9F9');
|
||||
|
||||
// Create pie plot
|
||||
$p1 = new PiePlot3d($data);
|
||||
$p1->SetTheme("water");
|
||||
$p1->SetCenter(0.4);
|
||||
$p1->SetAngle(30);
|
||||
$p1->value->SetFont(FF_FONT1,FS_NORMAL,8);
|
||||
$p1->SetLegends($legends);
|
||||
|
||||
// Explode the larges slice:
|
||||
$largest = 0;
|
||||
for($i=0; $i<count($data); $i++)
|
||||
{
|
||||
if ($data[$i] > $largest)
|
||||
{
|
||||
$largest = $data[$i];
|
||||
$explode = $i;
|
||||
}
|
||||
}
|
||||
if($explode)
|
||||
$p1->ExplodeSlice($explode);
|
||||
|
||||
$graph->Add($p1);
|
||||
$graph->Stroke();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
########################################################################
|
||||
### Create a Bar Graph
|
||||
########################################################################
|
||||
|
||||
function BAR_graph($module, $type, $start, $extra_fields)
|
||||
{
|
||||
global $C_translate, $C_auth;
|
||||
include_once(PATH_CORE . 'validate.inc.php');
|
||||
$dt = new CORE_validate;
|
||||
|
||||
include (PATH_GRAPH."jpgraph.php");
|
||||
|
||||
####################################################################
|
||||
### Check if 'search' is authorized for this account
|
||||
####################################################################
|
||||
|
||||
# check the validation for this function
|
||||
if($C_auth->auth_method_by_name($module,'search'))
|
||||
{
|
||||
# validate this file exists, and include it.
|
||||
if (file_exists(PATH_MODULES . '/' . $module . '/' . $module . '.inc.php'))
|
||||
{
|
||||
include_once(PATH_MODULES . '/' . $module . '/' . $module . '.inc.php');
|
||||
}
|
||||
else
|
||||
{
|
||||
### Not exist!
|
||||
$error = $C_translate->translate('module_non_existant','','');
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
### Not auth
|
||||
$error = $C_translate->translate('module_non_auth','','');
|
||||
}
|
||||
|
||||
|
||||
if(isset($error))
|
||||
{
|
||||
include (PATH_GRAPH."jpgraph_canvas.php");
|
||||
// Create the graph.
|
||||
$graph = new CanvasGraph(460,55,"auto");
|
||||
$t1 = new Text($error);
|
||||
$t1->Pos(0.2,0.5);
|
||||
$t1->SetOrientation("h");
|
||||
$t1->SetBox("white","black",'gray');
|
||||
$t1->SetFont(FF_FONT1,FS_NORMAL);
|
||||
$t1->SetColor("black");
|
||||
$graph->AddText($t1);
|
||||
$graph->Stroke();
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
####################################################################
|
||||
### BY WEEK
|
||||
####################################################################
|
||||
|
||||
if ($type == 'week')
|
||||
{
|
||||
$FONT_SIZE= 7;
|
||||
$AbsWidth = 12;
|
||||
$interval = 4;
|
||||
|
||||
$type = $C_translate->translate('week','','');
|
||||
if($start == "" || $start <= 12)
|
||||
{
|
||||
## Get the beginning/end of this week
|
||||
$start_str = mktime (24,0,0,12, 31, date("Y")-1);
|
||||
$start = date(UNIX_DATE_FORMAT, $start_str);
|
||||
$end_str = mktime (24,0,0,12, 30, date("Y",$start_str));
|
||||
$end = date(UNIX_DATE_FORMAT, $end_str);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
## Get the beginning/end of the specified week
|
||||
$start_str = mktime (24,0,0,12, 31, date("$start")-1);
|
||||
$start = date(UNIX_DATE_FORMAT, $start_str);
|
||||
$end_str = mktime (24,0,0,12, 30, date("Y",$start_str));
|
||||
$end = date(UNIX_DATE_FORMAT, $end_str);
|
||||
|
||||
}
|
||||
|
||||
### Set the constraint array:
|
||||
$curr_str = $start_str;
|
||||
while ( $curr_str <= $end_str )
|
||||
{
|
||||
$new_curr_str = mktime (0,0,0,date("m",$curr_str), date("d",$curr_str)+7, date("Y",$curr_str));
|
||||
$constraint_array[] = Array('start' => $curr_str, 'end' => $new_curr_str);
|
||||
$curr_str = $new_curr_str;
|
||||
$default_array[] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
####################################################################
|
||||
### MONTH
|
||||
####################################################################
|
||||
|
||||
else if ($type == 'month')
|
||||
{
|
||||
$FONT_SIZE = 10;
|
||||
$AbsWidth = 12;
|
||||
$TickLables = $gDateLocale->GetShortMonth();
|
||||
$interval =1;
|
||||
$type = $C_translate->translate('month','','');
|
||||
|
||||
if($start == "" || $start < 12)
|
||||
{
|
||||
## Get the beginning/end of this week
|
||||
$start_str = mktime (24,0,0,12, 31, date("Y")-1);
|
||||
$start = date(UNIX_DATE_FORMAT, $start_str);
|
||||
$end_str = mktime (24,0,0,12, 30, date("Y",$start_str));
|
||||
$end = date(UNIX_DATE_FORMAT, $end_str);
|
||||
}
|
||||
else
|
||||
{
|
||||
## Get the beginning/end of the specified week
|
||||
## Get the beginning/end of this week
|
||||
$start_str = mktime (24,0,0,12, 31, date("$start")-1);
|
||||
$start = date(UNIX_DATE_FORMAT, $start_str);
|
||||
$end_str = mktime (24,0,0,12, 30, date("Y",$start_str));
|
||||
$end = date(UNIX_DATE_FORMAT, $end_str);
|
||||
}
|
||||
|
||||
### Set the constraint array:
|
||||
$curr_str = $start_str;
|
||||
while ( $curr_str <= $end_str )
|
||||
{
|
||||
$new_curr_str = mktime (0,0,0,date("m",$curr_str)+1, date("d",$curr_str), date("Y",$curr_str));
|
||||
$constraint_array[] = Array('start' => $curr_str, 'end' => $new_curr_str);
|
||||
$curr_str = $new_curr_str;
|
||||
$default_array[] = 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
####################################################################
|
||||
### BY YEAR
|
||||
####################################################################
|
||||
|
||||
else if ($type == 'year')
|
||||
{
|
||||
$FONT_SIZE = 10;
|
||||
$interval =1;
|
||||
$AbsWidth = 13;
|
||||
|
||||
$type = $C_translate->translate('year','','');
|
||||
|
||||
|
||||
## Get the beginning/end of this year - 10
|
||||
$start_str = mktime (0,0,0,1,1, date("Y")-9);
|
||||
$start = date(UNIX_DATE_FORMAT, $start_str);
|
||||
$end_str = mktime (0,0,0,12,30, date("Y",$start_str)+9);
|
||||
$end = date(UNIX_DATE_FORMAT, $end_str);
|
||||
|
||||
|
||||
### Set the constraint array:
|
||||
$curr_str = $start_str;
|
||||
while ( $curr_str <= $end_str )
|
||||
{
|
||||
$new_curr_str = mktime (0,0,0,date("m",$curr_str), date("d",$curr_str), date("Y",$curr_str)+1);
|
||||
$constraint_array[] = Array('start' => $curr_str, 'end' => $new_curr_str);
|
||||
$TickLables[] = date("Y",$curr_str);
|
||||
$curr_str = $new_curr_str;
|
||||
$default_array[] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
####################################################################
|
||||
### BY DAY
|
||||
####################################################################
|
||||
|
||||
else
|
||||
{
|
||||
$FONT_SIZE= 8;
|
||||
$interval = 3;
|
||||
$AbsWidth = 4;
|
||||
$type = $C_translate->translate('day','','');
|
||||
|
||||
if($start == "" || $start > 12 || $start < 1 )
|
||||
{
|
||||
## Get the beginning/end of this week
|
||||
$start_str = mktime (0,0,0,date("m"), 1, date("Y"));
|
||||
$start = date(UNIX_DATE_FORMAT, $start_str);
|
||||
$end_str = mktime (0,0,0,date("m",$start_str)+1, 1, date("Y",$start_str));
|
||||
$end = date(UNIX_DATE_FORMAT, $end_str);
|
||||
}
|
||||
else
|
||||
{
|
||||
## Get the beginning/end of the specified week
|
||||
$start_str = mktime (0,0,0,date("$start"), 1, date("Y"));
|
||||
$start = date(UNIX_DATE_FORMAT, $start_str);
|
||||
$end_str = mktime (0,0,0,date("m",$start_str)+1, 1, date("Y",$start_str));
|
||||
$end = date(UNIX_DATE_FORMAT, $end_str);
|
||||
|
||||
}
|
||||
|
||||
### Set the constraint array:
|
||||
$curr_str = $start_str;
|
||||
while ( $curr_str < $end_str )
|
||||
{
|
||||
$new_curr_str = mktime (0,0,0,date("m",$curr_str), date("d",$curr_str)+1, date("Y",$curr_str));
|
||||
$constraint_array[] = Array('start' => $curr_str, 'end' => $new_curr_str);
|
||||
$TickLables[] = date("j",$curr_str);
|
||||
$curr_str = $new_curr_str;
|
||||
$default_array[] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# initialize the module, if it has not already been initialized
|
||||
$eval = '$' . $module . ' = new ' . $module . '; ';
|
||||
$eval .= '$this_Obj = $' . $module . ';';
|
||||
eval ($eval);
|
||||
|
||||
# run the function
|
||||
$array = call_user_func (array($module, "graph"), $start_str, $end_str, $constraint_array, $default_array, $extra_fields);
|
||||
|
||||
|
||||
include (PATH_GRAPH."jpgraph_bar.php");
|
||||
|
||||
$datay=$array['results'];
|
||||
|
||||
// Create the graph. These two calls are always required
|
||||
$graph = new Graph(550,200,"auto");
|
||||
$graph->SetScale("textlin");
|
||||
$graph->yaxis->scale->SetGrace(25);
|
||||
$graph->SetMarginColor('#F9F9F9');
|
||||
$graph->SetFrame(true,'darkgreen',0);
|
||||
$graph->SetColor('#FFFFFF');
|
||||
#$graph->SetFrame(false);
|
||||
|
||||
|
||||
// Adjust the margin a bit to make more room for titles
|
||||
$graph->img->SetMargin(45,10,15,25);
|
||||
|
||||
// Create a bar pot
|
||||
$bplot = new BarPlot($datay);
|
||||
|
||||
// Set the X
|
||||
if(isset($TickLables))
|
||||
$graph->xaxis->SetTickLabels($TickLables);
|
||||
$graph->xaxis->SetTextLabelInterval($interval);
|
||||
$graph->xaxis->SetColor("navy");
|
||||
$graph->yaxis->SetColor("navy");
|
||||
|
||||
// Adjust fill color
|
||||
$bplot->SetFillColor('#506DC7');
|
||||
$bplot->value->Show();
|
||||
$bplot->value->SetFont(FF_FONT1,FS_NORMAL,$FONT_SIZE);
|
||||
$bplot->value->SetAngle(90);
|
||||
$bplot->value->SetFormat('%0.0f');
|
||||
$bplot->value->SetColor("darkblue");
|
||||
$graph->Add($bplot);
|
||||
|
||||
// Setup the titles
|
||||
$title = $array['title'];
|
||||
$graph->title->Set($title . " $start - $end");
|
||||
$graph->title->SetFont(FF_FONT1,FS_BOLD);
|
||||
$graph->title->SetColor("black");
|
||||
|
||||
|
||||
// Display the graph
|
||||
$graph->Stroke();
|
||||
}
|
||||
}
|
||||
?>
|
Reference in New Issue
Block a user