1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
<?php
/**
* Class to manage reports. Note how this class is designed to use
* the functions provided by the database driver exclusively, and hence
* will work with any database without modification.
*
* $Id: Reports.php,v 1.18 2007/04/16 11:02:35 mr-russ Exp $
*/
class Reports {
// A database driver
var $driver;
var $conf;
/* Constructor */
function __construct(&$conf, &$status) {
global $misc, $data;
$this->conf = $conf;
// Check to see if the reports database exists
$rs = $data->getDatabase($this->conf['reports_db']);
if ($rs->recordCount() != 1) $status = -1;
else {
// Create a new database access object.
$this->driver = $misc->getDatabaseAccessor($this->conf['reports_db']);
// Reports database should have been created in public schema
$this->driver->setSchema($this->conf['reports_schema']);
$status = 0;
}
}
/**
* Finds all reports
* @return A recordset
*/
function getReports() {
global $misc;
// Filter for owned reports if necessary
if ($this->conf['owned_reports_only']) {
$server_info = $misc->getServerInfo();
$filter['created_by'] = $server_info['username'];
$ops = array('created_by' => '=');
}
else $filter = $ops = array();
$sql = $this->driver->getSelectSQL($this->conf['reports_table'],
array('report_id', 'report_name', 'db_name', 'date_created', 'created_by', 'descr', 'report_sql', 'paginate'),
$filter, $ops, array('db_name' => 'asc', 'report_name' => 'asc'));
return $this->driver->selectSet($sql);
}
/**
* Finds a particular report
* @param $report_id The ID of the report to find
* @return A recordset
*/
function getReport($report_id) {
$sql = $this->driver->getSelectSQL($this->conf['reports_table'],
array('report_id', 'report_name', 'db_name', 'date_created', 'created_by', 'descr', 'report_sql', 'paginate'),
array('report_id' => $report_id), array('report_id' => '='), array());
return $this->driver->selectSet($sql);
}
/**
* Creates a report
* @param $report_name The name of the report
* @param $db_name The name of the database
* @param $descr The comment on the report
* @param $report_sql The SQL for the report
* @param $paginate The report should be paginated
* @return 0 success
*/
function createReport($report_name, $db_name, $descr, $report_sql, $paginate) {
global $misc;
$server_info = $misc->getServerInfo();
$temp = array(
'report_name' => $report_name,
'db_name' => $db_name,
'created_by' => $server_info['username'],
'report_sql' => $report_sql,
'paginate' => $paginate ? 'true' : 'false',
);
if ($descr != '') $temp['descr'] = $descr;
return $this->driver->insert($this->conf['reports_table'], $temp);
}
/**
* Alters a report
* @param $report_id The ID of the report
* @param $report_name The name of the report
* @param $db_name The name of the database
* @param $descr The comment on the report
* @param $report_sql The SQL for the report
* @param $paginate The report should be paginated
* @return 0 success
*/
function alterReport($report_id, $report_name, $db_name, $descr, $report_sql, $paginate) {
global $misc;
$server_info = $misc->getServerInfo();
$temp = array(
'report_name' => $report_name,
'db_name' => $db_name,
'created_by' => $server_info['username'],
'report_sql' => $report_sql,
'paginate' => $paginate ? 'true' : 'false',
'descr' => $descr
);
return $this->driver->update($this->conf['reports_table'], $temp,
array('report_id' => $report_id));
}
/**
* Drops a report
* @param $report_id The ID of the report to drop
* @return 0 success
*/
function dropReport($report_id) {
return $this->driver->delete($this->conf['reports_table'], array('report_id' => $report_id));
}
}
?>
|