262 lines
7.2 KiB
PHP
262 lines
7.2 KiB
PHP
<?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_database
|
|
{
|
|
function add($VAR, &$construct, $type)
|
|
{
|
|
include_once(PATH_CORE . 'database_add.inc.php');
|
|
return CORE_database_add($VAR, $construct, $type);
|
|
}
|
|
|
|
function update($VAR, &$construct, $type)
|
|
{
|
|
include_once(PATH_CORE . 'database_update.inc.php');
|
|
return CORE_database_update($VAR, $construct, $type);
|
|
}
|
|
|
|
function search_form($VAR, &$construct, $type)
|
|
{
|
|
include_once(PATH_CORE . 'database_search_form.inc.php');
|
|
return CORE_database_search_form($VAR, $construct, $type);
|
|
}
|
|
|
|
function search($VAR, &$construct, $type)
|
|
{
|
|
include_once(PATH_CORE . 'database_search.inc.php');
|
|
return CORE_database_search($VAR, $construct, $type);
|
|
}
|
|
|
|
function search_show($VAR, &$construct, $type)
|
|
{
|
|
include_once(PATH_CORE . 'database_search_show.inc.php');
|
|
return CORE_database_search_show($VAR, $construct, $type);
|
|
}
|
|
|
|
function view($VAR, &$construct, $type)
|
|
{
|
|
include_once(PATH_CORE . 'database_view.inc.php');
|
|
return CORE_database_view($VAR, $construct, $type);
|
|
}
|
|
|
|
function mass_delete($VAR, &$construct, $type)
|
|
{
|
|
include_once(PATH_CORE . 'database_mass_delete.inc.php');
|
|
return CORE_database_mass_delete($VAR, $construct, $type);
|
|
}
|
|
|
|
function delete($VAR, &$construct, $type)
|
|
{
|
|
include_once(PATH_CORE . 'database_delete.inc.php');
|
|
return CORE_database_delete($VAR, $construct, $type);
|
|
}
|
|
|
|
function join_fields($result, $linked)
|
|
{
|
|
include_once(PATH_CORE . 'database_join_fields.inc.php');
|
|
return CORE_database_join_fields($result, $linked);
|
|
}
|
|
|
|
// replaced in v1.4.91 (use sqlSelect)
|
|
function sql_select($TableList, $FieldList, $Conditions, $Order, &$db) {
|
|
return sqlSelect( $db, $TableList, $FieldList, $Conditions, $Order);
|
|
}
|
|
|
|
/**
|
|
* Remove fields from the standard construct type to ingore insert/select/validation rules set in construct
|
|
*
|
|
* @param array $ignore_fields
|
|
* @param string $construct_fields
|
|
* @return array
|
|
*/
|
|
function ignore_fields($ignore_fields,$construct_fields) {
|
|
if(!is_array($construct_fields)) $fields = split(",", $construct_fields); else $fields = $construct_fields;
|
|
foreach($fields as $id=>$fld) {
|
|
if(in_array($fld,$ignore_fields)) {
|
|
unset($fields[$id]);
|
|
}
|
|
}
|
|
return $fields;
|
|
}
|
|
}
|
|
|
|
|
|
class CORE_debugger
|
|
{
|
|
var $sql_count;
|
|
|
|
function sql_count() {
|
|
if(!isset($this->sql_count)) $this->sql_count = 0;
|
|
$this->sql_count++;
|
|
}
|
|
|
|
function alert($message) {
|
|
$this->alert = Array ($message);
|
|
}
|
|
|
|
function error($module, $method, $message) {
|
|
$this->error = $module . ':'. $method . ' =>   ' . $message . '<br>';
|
|
if(defined("ERROR_REPORTING") && ERROR_REPORTING > 0) $this->alert($this->error);
|
|
$db = &DB();
|
|
$this->record_id = $db->GenID(AGILE_DB_PREFIX . "" . 'log_error_id');
|
|
$q = "INSERT INTO ".AGILE_DB_PREFIX."log_error
|
|
SET
|
|
id = ". $db->qstr($this->record_id).",
|
|
date_orig = ". $db->qstr(time()).",
|
|
account_id = ". @$db->qstr(SESS_ACCOUNT).",
|
|
module = ". $db->qstr($module).",
|
|
method = ". $db->qstr($method).",
|
|
message = ". $db->qstr($message).",
|
|
site_id = ". @$db->qstr(DEFAULT_SITE);
|
|
$result = $db->Execute($q);
|
|
}
|
|
}
|
|
|
|
|
|
function &DB($debug=false) {
|
|
static $saved_db_conn;
|
|
|
|
if (isset($saved_db_conn) && defined("AGILE_DB_CACHE")) {
|
|
#echo '<b>Cached:</b><pre>'.print_r($saved_db_conn,true).'</pre><br>';
|
|
if($debug) $saved_db_conn->debug=true; else $saved_db_conn->debug=false;
|
|
return $saved_db_conn;
|
|
}
|
|
|
|
$saved_db_conn = NewADOConnection(AGILE_DB_TYPE);
|
|
if(defined("AGILE_DB_PCONNECT") && AGILE_DB_PCONNECT == true)
|
|
$saved_db_conn->PConnect(AGILE_DB_HOST,AGILE_DB_USERNAME,AGILE_DB_PASSWORD,AGILE_DB_DATABASE);
|
|
else
|
|
$saved_db_conn->Connect(AGILE_DB_HOST,AGILE_DB_USERNAME,AGILE_DB_PASSWORD,AGILE_DB_DATABASE);
|
|
#echo '<b>Original:</b><pre>'.print_r($saved_db_conn,true).'</pre><br>';
|
|
|
|
if($debug) $saved_db_conn->debug=true; else $saved_db_conn->debug=false;
|
|
return $saved_db_conn;
|
|
}
|
|
|
|
function sqlGenID(&$db, $table) {
|
|
return $db->GenID( AGILE_DB_PREFIX . $table . '_id' );
|
|
}
|
|
|
|
function sqlConditions( &$db, $Conditions=false, $Tables=false )
|
|
{
|
|
$where = " WHERE ";
|
|
|
|
if($Conditions) {
|
|
if(preg_match('/::/', $Conditions) ) {
|
|
$s = explode('::', $Conditions);
|
|
$ii=1;
|
|
$Conditions = '';
|
|
for($i=0; $i<count($s); $i++) {
|
|
if($ii==1) {
|
|
$Conditions .= " {$s[$i]} ";
|
|
$ii++;
|
|
} else {
|
|
$Conditions .= $db->qstr($s[$i]);
|
|
$ii=1;
|
|
}
|
|
}
|
|
}
|
|
$where .= $Conditions . " AND ";
|
|
}
|
|
|
|
if(!is_array($Tables)) {
|
|
$where .= " site_id = ". DEFAULT_SITE;
|
|
} else {
|
|
$tbarr = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S', 'T','U','V');
|
|
for($i=0; $i<count($Tables); $i++) {
|
|
if( $i > 0 ) $where .= " AND ";
|
|
$where .= " {$tbarr[$i]}.site_id = ". DEFAULT_SITE;
|
|
}
|
|
}
|
|
|
|
if( $where ) return $where;
|
|
}
|
|
|
|
function sqlDelete(&$db, $table, $conditions) {
|
|
$conditions = sqlConditions( $db, $conditions);
|
|
return "DELETE FROM ".AGILE_DB_PREFIX."$table $conditions";
|
|
}
|
|
|
|
function sqlInsert(&$db, $table, $fields, $id=false) {
|
|
if(!$id) $id = sqlGenID( $db,$table);
|
|
$fields['id'] = $id;
|
|
if(empty($fields['site_id'])) $fields['site_id'] = DEFAULT_SITE;
|
|
$tab = AGILE_DB_PREFIX.''.$table;
|
|
return $db->GetInsertSQL($tab, $fields, get_magic_quotes_gpc());
|
|
}
|
|
|
|
function sqlUpdate(&$db, $table, $fields, $conditions, $force=false) {
|
|
$rs = $db->Execute( sqlSelect( $db, $table, '*', $conditions) );
|
|
if(empty($fields['site_id'])) $fields['site_id'] = DEFAULT_SITE;
|
|
return $db->GetUpdateSQL( $rs, $fields, false, get_magic_quotes_gpc());
|
|
}
|
|
|
|
function sqlSelect(&$db, $TableList, $FieldList, $Conditions, $Order=false, $Limit=false, $DISTINCT='', $GroupBy=false )
|
|
{
|
|
### Table(s)
|
|
if(is_array($TableList)) {
|
|
$tbarr = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S', 'T','U','V');
|
|
$table = '';
|
|
$site_id_where = '';
|
|
for($i=0;$i<count($TableList); $i++) {
|
|
$as = $tbarr[$i];
|
|
if($i>0) {
|
|
$table .= ",".AGILE_DB_PREFIX.$TableList[$i] . " AS $as";
|
|
} else {
|
|
$table .= AGILE_DB_PREFIX.$TableList[$i] . " AS $as";
|
|
}
|
|
}
|
|
} else {
|
|
$table = AGILE_DB_PREFIX.$TableList;
|
|
}
|
|
|
|
### Field(s)
|
|
if(is_array($FieldList)) {
|
|
$fields = '';
|
|
for($i=0;$i<count($FieldList); $i++) {
|
|
if($i>0)
|
|
$fields .= ",".$FieldList[$i];
|
|
else
|
|
$fields .= $FieldList[$i];
|
|
}
|
|
} else {
|
|
$fields = $FieldList;
|
|
}
|
|
|
|
### Condition(s)
|
|
$where = sqlConditions( $db, $Conditions, $TableList);
|
|
|
|
### Order By
|
|
if(!empty($Order)) {
|
|
$where .= " ORDER BY $Order ";
|
|
}
|
|
|
|
### Group By
|
|
if(!empty($GroupBy)) {
|
|
$where .= " GROUP BY $GroupBy ";
|
|
}
|
|
|
|
$where = str_replace('{p}', AGILE_DB_PREFIX, $where );
|
|
|
|
if(!empty($DISTINCT)) $DISTINCT = 'DISTINCT';
|
|
|
|
return "SELECT $DISTINCT $fields FROM $table $where";
|
|
}
|
|
?>
|