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/core/database_search_show.inc.php
2008-11-26 14:50:40 -08:00

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;
}
?>