_performSearch($query, $modules, $offset);
$str = '
';
$actions=0;
$foundData = false;
foreach($results as $m=>$data){
if(empty($data['data'])){
continue;
}
$foundData = true;
$countRemaining = $data['pageData']['offsets']['total'] - count($data['data']);
if($offset > 0) $countRemaining -= $offset;
$more = '';
$data['pageData']['offsets']['next']++;
if($countRemaining > 0){
$more = <<
($countRemaining more)
EOHTML;
}
$modDisplayString = $m;
if(isset($GLOBALS['app_list_strings']['moduleList'][$m]))
$modDisplayString = $GLOBALS['app_list_strings']['moduleList'][$m];
$str.= "{$modDisplayString} $more
";
$str.= '';
foreach($data['data'] as $row){
$name = '';
if(!empty($row['NAME'])){
$name = $row['NAME'];
}else{
foreach($row as $k=>$v){
if(strpos($k, 'NAME') !== false){
$name = $v;
break;
}
}
}
$str .= <<$name
EOHTML;
}
$str.= '
';
}
$str .= <<{$GLOBALS['app_strings']['LBL_EMAIL_SHOW_READ']}
EOHTML;
return $str;
}
/**
* Returns the array containing the $searchFields for a module
*
* @param $moduleName string
* @return array
*/
protected function getSearchFields(
$moduleName
)
{
if(file_exists("modules/{$moduleName}/metadata/SearchFields.php")) {
$searchFields = array();
require "modules/{$moduleName}/metadata/SearchFields.php" ;
return $searchFields;
}
else {
return array();
}
}
/**
* Performs the search
*
* @param $query string what we are searching for
* @param $modules array modules we are searching in
* @param $offset int search result offset
* @return array
*/
protected function _performSearch(
$query,
$modules,
$offset = -1
)
{
$primary_module='';
$results = array();
require_once 'include/SearchForm/SearchForm2.php' ;
$where = '';
$searchEmail = preg_match('/^([^\%]|\%)*@([^\%]|\%)*$/', $query);
foreach($modules as $moduleName){
if (empty($primary_module)) $primary_module=$moduleName;
$searchFields = SugarSpot::getSearchFields($moduleName);
$class = $GLOBALS['beanList'][$moduleName];
$return_fields = array();
$seed = new $class();
if (empty($searchFields[$moduleName]))
continue;
if ($class == 'aCase') {
$class = 'Case';
}
foreach($searchFields[$moduleName] as $k=>$v){
$keep = false;
$searchFields[$moduleName][$k]['value'] = $query;
if(!empty($GLOBALS['dictionary'][$class]['unified_search'])){
if(empty($GLOBALS['dictionary'][$class]['fields'][$k]['unified_search'])){
if(isset($searchFields[$moduleName][$k]['db_field'])){
foreach($searchFields[$moduleName][$k]['db_field'] as $field){
if(!empty($GLOBALS['dictionary'][$class]['fields'][$field]['unified_search'])){
$return_fields[] = $field;
$keep = true;
}
}
}
if(!$keep){
if(strpos($k,'email') === false || !$searchEmail) {
unset($searchFields[$moduleName][$k]);
}
}
}else{
$return_fields[] = $k;
}
}else if(empty($GLOBALS['dictionary'][$class]['fields'][$k]) ){;
unset($searchFields[$moduleName][$k]);
}else{
switch($GLOBALS['dictionary'][$class]['fields'][$k]['type']){
case 'id':
case 'date':
case 'datetime':
case 'bool':
unset($searchFields[$moduleName][$k]);
default:
$return_fields[] = $k;
}
}
}
$searchForm = new SearchForm ( $seed, $moduleName ) ;
$searchForm->setup (array ( $moduleName => array() ) , $searchFields , '' , 'saved_views' /* hack to avoid setup doing further unwanted processing */ ) ;
$where_clauses = $searchForm->generateSearchWhere() ;
$where = "";
if (count($where_clauses) > 0){
$where = '(('. implode(' ) OR ( ', $where_clauses) . '))';
}
$lvd = new ListViewData();
$lvd->additionalDetails = false;
$max = ( !empty($sugar_config['max_spotresults_initial']) ? $sugar_config['max_spotresults_initial'] : 5 );
if($offset !== -1){
$max = ( !empty($sugar_config['max_spotresults_more']) ? $sugar_config['max_spotresults_more'] : 20 );
}
$params = array();
if ( $moduleName == 'Reports') {
$params['overrideOrder'] = true;
$params['orderBy'] = 'name';
}
$results[$moduleName]= $lvd->getListViewData($seed, $where, $offset, $max, $return_fields,$params,'id') ;
}
return $results;
}
/**
* Function used to walk the array and find keys that map the queried string.
* if both the pattern and module name is found the promote the string to thet top.
*/
protected function _searchKeys(
$item1,
$key,
$patterns
)
{
//make the module name singular....
if ($patterns[1][strlen($patterns[1])-1] == 's') {
$patterns[1]=substr($patterns[1],0,(strlen($patterns[1])-1));
}
$module_exists = stripos($key,$patterns[1]); //primary module name.
$pattern_exists = stripos($key,$patterns[0]); //pattern provided by the user.
if ($module_exists !== false and $pattern_exists !== false) {
$GLOBALS['matching_keys']= array_merge(array(array('NAME'=>$key, 'ID'=>$key, 'VALUE'=>$item1)),$GLOBALS['matching_keys']);
}
else {
if ($pattern_exists !== false) {
$GLOBALS['matching_keys'][]=array('NAME'=>$key, 'ID'=>$key, 'VALUE'=>$item1);
}
}
}
}