This repository has been archived on 2024-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
khosb/modules/report/report.inc.php

310 lines
7.8 KiB
PHP
Raw Normal View History

<?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
*/
/**
* Agileco Report Module
*/
class report
{
/**
* Get the list of available modules
*/
function module_menu($VAR)
{
global $C_translate;
if(!empty($VAR['report_module']))
$default = $VAR['report_module'];
else
$default = false;
$return = '';
$path = PATH_AGILE . 'reports/';
chdir($path);
$dir = opendir($path);
$count = 0;
while ($file_name = readdir($dir))
{
if( $file_name != '..' && $file_name != '.' && !ereg(".xml", $file_name) && !ereg(".php", $file_name))
{
$name = $C_translate->translate('menu', $file_name, '');
if(empty($name) && eregi("^[a-zA-Z0-9\-\_]{1,}", $file_name)) $name = strtoupper($file_name);
if(!empty($name))
{
$return .= "<option value=\"{$file_name}\"";
if($default == $file_name) $return .= " selected";
$return .= ">{$name}</option>\n";
$count++;
}
}
}
if($count > 10) $count = 10;
echo '<select id="report_module" name="report_module" size="'.$count.'" onChange="submit()" multiple>';
if($count==0)
echo '<option value="">No Reports Available</option>';
echo $return;
echo '</select>';
}
/**
* Get the list of available reports
*/
function report_menu($VAR)
{
global$C_translate;
$C_xml = new CORE_xml;
if(empty($VAR['report_module'])) {
echo $C_translate->translate('no_reports','report','');
return;
} else {
$module = $VAR['report_module'];
}
if(!empty($VAR['report_template']))
$default = $VAR['report_template'];
else
$default = false;
$return = '<select id="report_template" name="report_template" width="150" size="5" onChange="submit()" multiple>';
$path = PATH_AGILE . 'reports/'.$module.'/';
chdir($path);
$dir = opendir($path);
$count = 0;
while ($file_name = readdir($dir))
{
if($file_name != '..' && $file_name != '.' && ereg(".xml$", $file_name)) {
$template = $C_xml->xml_to_array($path.$file_name);
$name = $template['report']['title'];
$return .= "<option value=\"{$file_name}\"";
if($default == $file_name) $return .= " selected";
$return .= ">{$name}</option>\n";
$count++;
}
}
if($count==0)
$return .= '<option value="">'. $C_translate->translate('no_reports','report','').'</option>';
$return .= '</select>';
echo $return;
}
/**
* Get user criteria
*/
function get_user_criteria($VAR)
{
# validation
if(empty($VAR['report_module']) || empty($VAR['report_template'])) return false;
$module = $VAR['report_module'];
$report = $VAR['report_template'];
# include reporting classess
require_once PATH_MODULES . 'report/class.Report.php';
require_once PATH_MODULES . 'report/class.Level.php';
require_once PATH_MODULES . 'report/class.ReportParser.php';
$f = new HTML_ReportFormatter;
$r = new Reporting($f, true);
$p = new ReportParser($r);
$result = $p->setInputFile(PATH_AGILE.'reports/'.$module.'/'.$report);
$result = $p->parse();
# pre-process the user criteria array
$arr = $p->getUserCriteria();
if(is_array($arr)) {
foreach($arr as $cond) {
if($cond['type']=='menu') {
//print_r($cond);
}
}
}
global $smarty;
$smarty->assign('userCriteria', $arr);
}
/**
* Set user criteria and display report
*/
function view($VAR)
{
# validation
if(empty($VAR['report_module']) || empty($VAR['report_template'])) return false;
$module = $VAR['report_module'];
$report = $VAR['report_template'];
$format = $VAR['report_format'];
# include reporting classess
require_once PATH_MODULES . 'report/class.Report.php';
require_once PATH_MODULES . 'report/class.Level.php';
require_once PATH_MODULES . 'report/class.ReportParser.php';
set_time_limit(0);
if($format=='text')
$f = new TXT_ReportFormatter;
elseif($format=='html')
$f = new HTML_ReportFormatter;
elseif($format=='pdf')
$f = new PDF_ReportFormatter;
# Tell the formatter where to save the output
$dir = md5(tempnam(PATH_FILES, "s"));
$path = PATH_FILES.'reports/'.$dir;
@unlink($path);
mkdir($path, 0775);
$f->setOutputDirectory($path);
# set report construct file to use
$r = new Reporting($f, true);
$p = new ReportParser($r);
$result = $p->setInputFile(PATH_AGILE.'reports/'.$module.'/'.$report);
# Get user criteria
$arr = $p->getUserCriteria();
# Set the user criteria
if(!empty($VAR['report']['conditions']) && is_array($VAR['report']['conditions'])) {
foreach($VAR['report']['conditions'] as $arr) {
$exp = $arr['exp'];
$col = $arr['col'];
$val = $arr['value'];
$type= $arr['type'];
foreach($col as $i=>$name) {
if($type[$i] == 'date_year_month') {
$val[$i] = array('month'=> $val['month'][$i], 'year'=> $val['year'][$i]);
}
$this->setSQLCondition($p, $col[$i], $exp[$i], $val[$i], $type[$i]);
}
}
}
#echo '<pre>'.print_r($p,true).'</pre>'; exit;
$result = $p->parse();
#echo '<pre>'.print_r($p,true).'</pre>'; exit;
$r->display();
if($format=='text') {
header('Content-type: text/txt');
header('Content-Disposition: inline; filename="report.txt"');
echo file_get_contents($f->getOutput());
@unlink($f->getOutput());
} elseif($format=='html') {
$f->getOutput();
$url=URL.'includes/files/reports/'.$dir.'/report.html';
echo "<script>document.location='$url';</script>";
} elseif ($format=='pdf') {
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="report.pdf"');
readfile($f->getOutput());
@unlink($f->getOutput());
}
}
/**
* Get actual SQL contition from user input and add to userCondtions
*/
function setSQLCondition(&$reportObj, $column, $condition, $value=false, $type=false)
{
$o["EQ"] = '=';
$o["NOT"] = '<>';
$o["GT"] = '>';
$o["LT"] = '<';
$o["GTEQ"] = '>=';
$o["LTEQ"] = '<=';
$o["LIKE"] = 'LIKE';
$o["NLIKE"] = 'IS NOT LIKE';
$o["NULL"] = 'IS NULL';
$o["NNULL"] = 'IS NOT NULL';
// actual SQL condition
$c = $o["$condition"];
// determine value
if( $condition=="NULL" || $condition=="NNULL" )
$v=false;
elseif ($value=='')
return false;
else
$v=$value;
if($type=='date') {
$v=$this->convert_date_time($value);
$reportObj->setUserCriteria($column, $c, $v);
} elseif ($type=='date_year') {
$v=mktime(0,0,0,1,1,$value);
$reportObj->setUserCriteria($column, $c, $v);
} elseif ($type=='date_year_month') {
if(!empty($value['year'])) {
if(empty($value['month'])) $month=1; else $month=$value['month'];
$v=mktime(0,0,0,$month,1,$value['year']);
$reportObj->setUserCriteria($column, $c, $v);
}
} else {
$reportObj->setUserCriteria($column, $c, $v);
}
}
/**
* convert DEFAULT_DATE_TIME_FORMT to unix time stamp
*/
function convert_date_time ($date, $constraint=false)
{
if($date == '0' || $date == '')
return '';
$Arr_format = split(DEFAULT_DATE_DIVIDER, UNIX_DATE_FORMAT);
$Arr_date = split(DEFAULT_DATE_DIVIDER, $date);
for($i=0; $i<3; $i++)
{
if($Arr_format[$i] == 'd')
$day = $Arr_date[$i];
if($Arr_format[$i] == 'm')
$month = $Arr_date[$i];
if($Arr_format[$i] == 'Y')
$year = $Arr_date[$i];
}
$timestamp = mktime(23, 59, 59, $month, $day, $year);
return $timestamp;
}
}
?>