252 lines
6.5 KiB
PHP
252 lines
6.5 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
|
||
|
*/
|
||
|
|
||
|
function CORE_database_search_show($VAR, &$construct, $type)
|
||
|
{
|
||
|
|
||
|
# set the field list for this method:
|
||
|
$arr = $construct->method[$type];
|
||
|
$field_list = '';
|
||
|
$i=0;
|
||
|
while (list ($key, $value) = each ($arr))
|
||
|
{
|
||
|
if($i == 0)
|
||
|
{
|
||
|
$field_var = $construct->table . '_' . $value;
|
||
|
$field_list .= AGILE_DB_PREFIX . $construct->table . "." . $value;
|
||
|
|
||
|
// determine if this record is linked to another table/field
|
||
|
if($construct->field[$value]["asso_table"] != "")
|
||
|
{
|
||
|
$construct->linked[] = array('field' => $value, 'link_table' => $construct->field[$value]["asso_table"], 'link_field' => $construct->field[$value]["asso_field"]);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$field_var = $construct->table . '_' . $value;
|
||
|
$field_list .= "," . AGILE_DB_PREFIX . $construct->table . "." . $value;
|
||
|
|
||
|
// determine if this record is linked to another table/field
|
||
|
if($construct->field[$value]["asso_table"] != "")
|
||
|
{
|
||
|
$construct->linked[] = array('field' => $value, 'link_table' => $construct->field[$value]["asso_table"], 'link_field' => $construct->field[$value]["asso_field"]);
|
||
|
}
|
||
|
}
|
||
|
$i++;
|
||
|
}
|
||
|
|
||
|
|
||
|
# get the search details:
|
||
|
if(isset($VAR['search_id']))
|
||
|
{
|
||
|
include_once(PATH_CORE . 'search.inc.php');
|
||
|
$search = new CORE_search;
|
||
|
$search->get($VAR['search_id']);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
# invalid search!
|
||
|
echo '<BR> The search terms submitted were invalid!<BR>'; # translate... # alert
|
||
|
|
||
|
if(isset($construct->trigger["$type"]))
|
||
|
{
|
||
|
include_once(PATH_CORE . 'trigger.inc.php');
|
||
|
$trigger = new CORE_trigger;
|
||
|
$trigger->trigger($construct->trigger["$type"], 0, $VAR);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# Check that this search has not been taken over by another account
|
||
|
if ($search->session != SESS && $search->account != SESS_ACCOUNT) {
|
||
|
global $C_debug;
|
||
|
$C_debug->alert('You are not authorized to view this search!');
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
# get the sort order details:
|
||
|
if(isset($VAR['order_by']) && $VAR['order_by'] != "")
|
||
|
{
|
||
|
$order_by = ' ORDER BY ' . $VAR['order_by'];
|
||
|
$smarty_order = $VAR['order_by'];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$order_by = ' ORDER BY ' . $construct->order_by;
|
||
|
$smarty_order = $search->order_by;
|
||
|
}
|
||
|
|
||
|
|
||
|
# determine the sort order
|
||
|
if(isset($VAR['desc'])) {
|
||
|
$order_by .= ' DESC';
|
||
|
$smarty_sort = 'desc=';
|
||
|
} else if(isset($VAR['asc'])) {
|
||
|
$order_by .= ' ASC';
|
||
|
$smarty_sort = 'asc=';
|
||
|
} else {
|
||
|
if (!eregi('date',$smarty_order)) {
|
||
|
$order_by .= ' ASC';
|
||
|
$smarty_sort = 'asc=';
|
||
|
} else {
|
||
|
$order_by .= ' DESC';
|
||
|
$smarty_sort = 'desc=';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
# generate the full query
|
||
|
$db = &DB();
|
||
|
$q = eregi_replace("%%fieldList%%", $field_list, $search->sql);
|
||
|
$q = eregi_replace("%%tableList%%", AGILE_DB_PREFIX.$construct->table, $q);
|
||
|
$q = eregi_replace("%%whereList%%", "", $q);
|
||
|
$q .= " site_id = '" . DEFAULT_SITE . "'";
|
||
|
$q .= $order_by;
|
||
|
|
||
|
///////////////////////
|
||
|
|
||
|
# determine the offset & limit
|
||
|
$current_page=1;
|
||
|
$offset=-1;
|
||
|
if (!empty($VAR['page'])) $current_page = $VAR['page'];
|
||
|
if (empty($search->limit)) $search->limit=25;
|
||
|
if($current_page>1) $offset = (($current_page * $search->limit) - $search->limit);
|
||
|
$result = $db->SelectLimit($q, $search->limit, $offset);
|
||
|
|
||
|
# error reporting
|
||
|
if ($result === false)
|
||
|
{
|
||
|
global $C_debug;
|
||
|
$C_debug->error('database.inc.php','search', $db->ErrorMsg());
|
||
|
|
||
|
if(isset($construct->trigger["$type"]))
|
||
|
{
|
||
|
include_once(PATH_CORE . 'trigger.inc.php');
|
||
|
$trigger = new CORE_trigger;
|
||
|
$trigger->trigger($construct->trigger["$type"], 0, $VAR);
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
### Put the results into a smarty accessable array
|
||
|
### Run any custom validation on this result for
|
||
|
### this module
|
||
|
if(isset($construct->custom_EXP))
|
||
|
{
|
||
|
$i=0;
|
||
|
$class_name = TRUE;
|
||
|
$results = 0;
|
||
|
while(!$result->EOF)
|
||
|
{
|
||
|
for($ei=0; $ei<count($construct->custom_EXP); $ei++)
|
||
|
{
|
||
|
$field = $construct->custom_EXP[$ei]["field"];
|
||
|
$value = $construct->custom_EXP[$ei]["value"];
|
||
|
if($result->fields["$field"] == $value)
|
||
|
{
|
||
|
$smart[$i] = $result->fields;
|
||
|
|
||
|
if($class_name)
|
||
|
{
|
||
|
$smart[$i]['_C'] = 'row1';
|
||
|
$class_name = FALSE;
|
||
|
} else {
|
||
|
$smart[$i]['_C'] = 'row2';
|
||
|
$class_name = TRUE;
|
||
|
}
|
||
|
$i++;
|
||
|
$ei = count($construct->custom_EXP);
|
||
|
$results++;
|
||
|
}
|
||
|
}
|
||
|
$result->MoveNext();
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$i=0;
|
||
|
$class_name = TRUE;
|
||
|
while (!$result->EOF) {
|
||
|
$smart[$i] = $result->fields;
|
||
|
|
||
|
if($class_name)
|
||
|
{
|
||
|
$smart[$i]['_C'] = 'row1';
|
||
|
$class_name = FALSE;
|
||
|
} else {
|
||
|
$smart[$i]['_C'] = 'row2';
|
||
|
$class_name = TRUE;
|
||
|
}
|
||
|
$result->MoveNext();
|
||
|
$i++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
# get any linked fields
|
||
|
if($i > 0) {
|
||
|
$db_join = new CORE_database;
|
||
|
$construct->result = $db_join->join_fields($smart, $construct->linked);
|
||
|
} else {
|
||
|
$construct->result = $smart;
|
||
|
}
|
||
|
|
||
|
# get the result count:
|
||
|
$results = $result->RecordCount();
|
||
|
|
||
|
# define the DB vars as a Smarty accessible block
|
||
|
global $smarty;
|
||
|
|
||
|
# define the results
|
||
|
$smarty->assign($construct->table, $construct->result);
|
||
|
$smarty->assign('page', $VAR['page']);
|
||
|
$smarty->assign('order', $smarty_order);
|
||
|
$smarty->assign('sort', $smarty_sort);
|
||
|
$smarty->assign('limit', $search->limit);
|
||
|
$smarty->assign('search_id',$search->id);
|
||
|
$smarty->assign('results', $search->results);
|
||
|
|
||
|
# get the total pages for this search:
|
||
|
if (empty($search->limit))
|
||
|
$construct->pages = 1;
|
||
|
else
|
||
|
$construct->pages = intval($search->results / $search->limit);
|
||
|
if ($search->results % $search->limit) $construct->pages++;
|
||
|
|
||
|
# total pages
|
||
|
$smarty->assign('pages', $construct->pages);
|
||
|
|
||
|
# current page
|
||
|
$smarty->assign('page', $current_page);
|
||
|
$page_arr = '';
|
||
|
for($i=0; $i <= $construct->pages; $i++)
|
||
|
if ($construct->page != $i) $page_arr[] = $i;
|
||
|
|
||
|
# page array for menu
|
||
|
$smarty->assign('page_arr', $page_arr);
|
||
|
|
||
|
if(isset($construct->trigger["$type"]))
|
||
|
{
|
||
|
include_once(PATH_CORE . 'trigger.inc.php');
|
||
|
$trigger = new CORE_trigger;
|
||
|
$trigger->trigger($construct->trigger["$type"], 1, $VAR);
|
||
|
}
|
||
|
return $construct->result;
|
||
|
}
|
||
|
?>
|