* @copyright 2009 Deon George * @link http://osb.leenooks.net * * @link http://www.agileco.com/ * @copyright 2004-2008 Agileco, LLC. * @license http://www.agileco.com/agilebill/license1-4.txt * @author Tony Landis * @package AgileBill * @subpackage Core */ /** * The main AgileBill CORE Database SEARCH_SHOW Method * * @uses CORE_search * @uses CORE_trigger */ function CORE_database_search_show($VAR, &$construct, $type) { # Set the field list for this method: $arr = $construct->method[$type]; $field_list = ''; $construct->linked = array(); $i=0; while (list($key,$value) = each($arr)) { $field_var = sprintf('%s_%s',$construct->table,$value); if ($i == 0) $field_list .= sprintf('%s%s.%s',AGILE_DB_PREFIX,$construct->table,$value); else $field_list .= sprintf(',%s%s.%s',AGILE_DB_PREFIX,$construct->table,$value); # Determine if this record is linked to another table/field if ($construct->field[$value]['asso_table'] != '') array_push($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 '
The search terms submitted were invalid!
'; 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 = sprintf(' ORDER BY %s',$VAR['order_by']); $smarty_order = $VAR['order_by']; } else { $order_by = sprintf(' ORDER BY %s',$construct->order_by); $smarty_order = $search->order_by; } # Determine the sort order if (isset($VAR['desc'])) { $order_by .= ' DESC'; $smarty_sort = 'desc='; } elseif (isset($VAR['asc'])) { $order_by .= ' ASC'; $smarty_sort = 'asc='; } else { if (! preg_match('/date/',$smarty_order)) { $order_by .= ' ASC'; $smarty_sort = 'asc='; } else { $order_by .= ' DESC'; $smarty_sort = 'desc='; } } # Generate the full query $db = &DB(); $q = str_replace('%%fieldList%%',$field_list,$search->sql); $q = str_replace('%%tableList%%',AGILE_DB_PREFIX.$construct->table,$q); $q = str_replace('%%whereList%%','',$q); $q .= sprintf(' %s.site_id = %s',AGILE_DB_PREFIX.$construct->table,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(__FILE__,__METHOD__,$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; } # Run any custom validation on this result for this module $i = 0; $class_name = true; if (isset($construct->custom_EXP)) { while (! $result->EOF) { for ($ei=0; $eicustom_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); } } $result->MoveNext(); } } else { 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('search_show',$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 = array(); for ($i=0; $i<=$construct->pages; $i++) if ($construct->page != $i) array_push($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; } ?>