function general_search() { // Init vars $search_dimension = array_var($_GET, 'search_dimension'); $filteredResults = 0; $uid = logged_user()->getId(); if (!isset($search_dimension)) { $members = active_context_members(false); } else { if ($search_dimension == 0) { $members = array(); } else { $members = array($search_dimension); } } // click on search everywhere if (array_var($_REQUEST, 'search_all_projects')) { $members = array(); } $revisionObjectTypeId = ObjectTypes::findByName("file revision")->getId(); $members_sql = ""; if (count($members) > 0) { $context_condition = "(EXISTS\r\n\t\t\t\t\t\t\t\t\t\t(SELECT om.object_id\r\n\t\t\t\t\t\t\t\t\t\t\tFROM " . TABLE_PREFIX . "object_members om\r\n\t\t\t\t\t\t\t\t\t\t\tWHERE\tom.member_id IN (" . implode(',', $members) . ") AND so.rel_object_id = om.object_id\r\n\t\t\t\t\t\t\t\t\t\t\tGROUP BY object_id\r\n\t\t\t\t\t\t\t\t\t\t\tHAVING count(member_id) = " . count($members) . "\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t)"; $context_condition_rev = "(EXISTS\r\n\t\t\t\t\t\t\t\t\t\t(SELECT fr.object_id FROM " . TABLE_PREFIX . "object_members om\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "project_file_revisions fr ON om.object_id=fr.file_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "objects ob ON fr.object_id=ob.id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tWHERE fr.file_id = so.rel_object_id AND ob.object_type_id = {$revisionObjectTypeId} AND member_id IN (" . implode(',', $members) . ")\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tGROUP BY object_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tHAVING count(member_id) = " . count($members) . "\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t)"; $members_sql = "AND ( " . $context_condition . " OR " . $context_condition_rev . ")"; $this->search_dimension = implode(',', $members); } else { $this->search_dimension = 0; } $listableObjectTypeIds = implode(",", ObjectTypes::getListableObjectTypeIds()); $can_see_all_tasks_cond = ""; if (!SystemPermissions::userHasSystemPermission(logged_user(), 'can_see_assigned_to_other_tasks')) { $can_see_all_tasks_cond = " AND IF((SELECT ot.name FROM " . TABLE_PREFIX . "object_types ot WHERE ot.id=o.object_type_id)='task',\r\n\t\t\t (SELECT t.assigned_to_contact_id FROM " . TABLE_PREFIX . "project_tasks t WHERE t.object_id=o.id) = " . logged_user()->getId() . ",\r\n\t\t\t true)"; } $search_string = trim(array_var($_REQUEST, 'query', '')); $search_string = mysql_real_escape_string($search_string, DB::connection()->getLink()); $start = array_var($_REQUEST, 'start', 0); $orig_limit = array_var($_REQUEST, 'limit'); $limit = $orig_limit + 1; $useLike = false; if (user_config_option("search_engine") == 'like') { $useLike = true; } if (strlen($search_string) < 4) { $useLike = true; } if (strlen($search_string) > 0) { $this->search_for = $search_string; $logged_user_pgs = implode(',', logged_user()->getPermissionGroupIds()); $sql = "\r\n\t\t\tSELECT DISTINCT so.rel_object_id AS id, so.content AS text_match, so.column_name AS field_match\r\n\t\t\tFROM " . TABLE_PREFIX . "searchable_objects so\r\n\t\t\tWHERE " . ($useLike ? " so.content LIKE '%{$search_string}%' " : " MATCH (so.content) AGAINST ('\"{$search_string}\"' IN BOOLEAN MODE) ") . "\r\n\t\t\tAND (EXISTS\r\n\t\t\t\t(SELECT o.id\r\n\t\t\t\t FROM " . TABLE_PREFIX . "objects o\r\n\t\t\t\t\t\t\t WHERE\to.id = so.rel_object_id AND (\r\n\t\t\t\t\t\t\t (o.object_type_id = {$revisionObjectTypeId} AND\r\n\t\t\t\t\t\t\t EXISTS (\r\n\t\t\t\t\t\t\t SELECT group_id FROM " . TABLE_PREFIX . "sharing_table WHERE object_id = ( SELECT file_id FROM " . TABLE_PREFIX . "project_file_revisions WHERE object_id = o.id )\r\n\t\t\t\t\t\t\t\t\tAND group_id IN ({$logged_user_pgs})\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\tOR (\r\n\t\t\t\t\t\t\t\t\t\t\t\t(EXISTS\r\n\t\t\t\t\t\t\t\t\t\t\t\t(SELECT object_id\r\n\t\t\t\t\t\t\t\t\t\t\t\tFROM " . TABLE_PREFIX . "sharing_table sh\r\n\t\t\t\t\t\t\t\t\t\tWHERE o.id = sh.object_id\r\n\t\t\t\t\t\t\t\t\t\tAND sh.group_id IN (\r\n\t\t\t\t\t\t\t\t\t\t\t{$logged_user_pgs}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t) AND o.object_type_id IN ({$listableObjectTypeIds}) " . $members_sql . $can_see_all_tasks_cond . "\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t)\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\tGROUP BY(id)\t\r\n\t\t\t\t\t\tORDER BY(id) DESC\t\t\t\t\t\t\t\r\n\t\t\t\t\t\tLIMIT {$start}, {$limit}"; $rows = DB::executeAll($sql); if (!is_array($rows)) { $rows = array(); } // show more $show_more = false; if (count($rows) > $orig_limit) { array_pop($rows); $show_more = true; } if ($show_more) { ajx_extra_data(array('show_more' => $show_more)); } $search_results = array(); $object_ids = array(); foreach ($rows as $ob_data) { // basic data $data = array('id' => $ob_data['id'], 'text_match' => $this->highlightOneResult($ob_data['text_match']), 'field_match' => $ob_data['field_match']); $object_ids[] = $ob_data['id']; $search_results[] = $data; } if (count($object_ids) > 0) { $result = ContentDataObjects::listing(array("extra_conditions" => " AND o.id IN (" . implode(",", $object_ids) . ") ", "include_deleted" => true)); $objects = $result->objects; foreach ($objects as $object) { foreach ($search_results as $key => $search_result) { if ($search_result['id'] == $object->getId()) { $search_results[$key]['name'] = $object->getObjectName(); $class = 'ico-' . $object->getObjectTypeName(); $search_results[$key]['iconCls'] = $class; $search_results[$key]['url'] = $object->getViewUrl(); continue; } } } } $row = "search-result-row-medium"; ajx_extra_data(array('row_class' => $row)); ajx_extra_data(array('search_results' => $search_results)); } ajx_current("empty"); }
/** * Execute search * TODO: Performance gus: * Fetch only ids and execute a select statement by pk (fer each result) * @param void * @return null */ function search() { // Init vars $search_for = array_var($_GET, 'search_for'); $search_dimension = array_var($_GET, 'search_dimension'); $advanced = array_var($_GET, 'advanced'); $minWordLength = $this->minWordLength($search_for); $useLike = ( $minWordLength && ($this->ignoreMinWordLength) && ($minWordLength < self::$MYSQL_MIN_WORD_LENGHT) ); $search_pieces= explode(" ", $search_for); $search_string = ""; if (!$useLike){ // Prepare MATCH AGAINST string foreach ($search_pieces as $word ) { if (( strpos($word, "@") || strpos($word, ".") || strpos($word, ",")) === false ) { // STRING Dont containt special characheters that mysql use as separator. Noramal flow if ($this->wildCardSearch) { $word.="*"; } }else{ $word = str_replace($this->mysqlWordSeparator, " +", $word) ; } if ( !str_starts_with($word, " ") ) { $word = " +".$word; } $search_string .= mysql_real_escape_string( $word ). " "; } $search_string = substr($search_string, 0 , -1); }else{ // USE Like Query $search_string = mysql_real_escape_string($search_for, DB::connection()->getLink()); } $this->search_for = $search_for; $limit = $this->limit; $start = array_var($_REQUEST, 'start' , $this->start); $this->start = $start; $limitTest = max( $this->limitTest , $this->limit); $filteredResults = 0; $uid = logged_user()->getId(); if(!isset($search_dimension)){ $members = active_context_members(false); }else{ if($search_dimension == 0){ $members = array(); }else{ $members = array($search_dimension); } } // click on search everywhere if (array_var($_REQUEST, 'search_all_projects')) { $members = array(); } $revisionObjectTypeId = ObjectTypes::findByName("file revision")->getId(); $members_sql = ""; if(count($members) > 0){ $members_sql = "AND (rel_object_id IN (SELECT object_id FROM " . TABLE_PREFIX . "object_members om WHERE member_id IN (" . implode ( ',', $members ) . ") GROUP BY object_id HAVING count(member_id) = ".count($members).") OR o.object_type_id = $revisionObjectTypeId AND rel_object_id IN (SELECT fr.object_id FROM " . TABLE_PREFIX . "object_members om INNER JOIN ".TABLE_PREFIX."project_file_revisions fr ON om.object_id=fr.file_id WHERE member_id IN (" . implode ( ',', $members ) . ") GROUP BY object_id HAVING count(member_id) = ".count($members)."))"; $this->search_dimension = implode ( ',', $members ); }else{ $this->search_dimension = 0; } $listableObjectTypeIds = implode(",",ObjectTypes::getListableObjectTypeIds()); if($_POST) { $conditions = array_var($_POST, 'conditions'); $search = array_var($_POST, 'search'); $type_object = array_var($search, 'search_object_type_id'); if(!is_array($conditions)) $conditions = array(); $where_condiition = ''; $conditions_view = array(); $cont = 0; $joincp =""; foreach($conditions as $condition){ $condValue = array_key_exists('value', $condition) ? $condition['value'] : ''; if($condition['field_type'] == 'boolean'){ $value = array_key_exists('value', $condition); }else if($condition['field_type'] == 'date'){ if ($condValue != '') { $dtFromWidget = DateTimeValueLib::dateFromFormatAndString(user_config_option('date_format'), $condValue); $value = date("m/d/Y", $dtFromWidget->getTimestamp()); } }else{ $value = mysql_real_escape_string($condValue, DB::connection()->getLink()); } $condition_condition = mysql_real_escape_string(array_var($condition, 'condition'), DB::connection()->getLink()); $condition_field_name = mysql_real_escape_string(array_var($condition, 'field_name'), DB::connection()->getLink()); $conditionLocal = "like"; tpl_assign('type_object', $type_object); if (isset($condition['custom_property_id']) and is_numeric($condition['custom_property_id'])){ $condition_field_name = 'value'; $joincp = 'JOIN fo_custom_property_values cp ON cp.object_id = so.rel_object_id'; }; if ($condition_condition == "=" or $condition_condition == ">" or $condition_condition == "<" or $condition_condition == "<>" or $condition_condition == ">=" or $condition_condition == "<="){ $conditionLocal = $condition_condition; }; if($condition_field_name == "id"){ $condition_field_name = "o`.`id" ; }; if($condition_condition == "like"){ $where_condiition .= " AND `" . $condition_field_name . "` " . "like" . " '%" . $value . "%' "; }else if($condition_condition == "ends with"){ $where_condiition .= " AND `" . $condition_field_name . "` " . "like" . " '%" . $value . "' "; }else if($condition_condition == "start with"){ $where_condiition .= " AND `" . $condition_field_name . "` " . "like" . " '" . $value . "%' "; }else if($condition_condition == "not like"){ $where_condiition .= " AND `" . $condition_field_name . "` " . "not like" . " '%" . $value . "%' "; }else{ $where_condiition .= " AND `" . $condition_field_name . "` " . $conditionLocal . " '" . $value . "' "; } $conditions_view[$cont]['id'] = $condition['id']; $conditions_view[$cont]['custom_property_id'] = $custom_prop_id; $conditions_view[$cont]['field_name'] = $condition['field_name']; $conditions_view[$cont]['condition'] = $condition['condition']; $conditions_view[$cont]['value'] = $value; $cont++; } tpl_assign('conditions', $conditions_view); if($type_object){ $object_table = ObjectTypes::findById($type_object); $table = $object_table->getTableName(); } $sql = " SELECT distinct(so.rel_object_id) AS id FROM ".TABLE_PREFIX."searchable_objects so ".$joincp." INNER JOIN ".TABLE_PREFIX.$table." nto ON nto.object_id = so.rel_object_id INNER JOIN ".TABLE_PREFIX."objects o ON o.id = so.rel_object_id WHERE ( ( so.rel_object_id IN ( SELECT object_id FROM ".TABLE_PREFIX."sharing_table WHERE group_id IN ( SELECT permission_group_id FROM ".TABLE_PREFIX."contact_permission_groups WHERE contact_id = $uid ) ) ) ) " . $where_condiition . $members_sql . " ORDER by o.updated_on DESC LIMIT $start, $limitTest "; } else { $type_object = ''; $sql = " SELECT distinct(so.rel_object_id) AS id FROM ".TABLE_PREFIX."searchable_objects so INNER JOIN ".TABLE_PREFIX."objects o ON o.id = so.rel_object_id WHERE ( ( o.object_type_id = $revisionObjectTypeId AND EXISTS ( SELECT id FROM ".TABLE_PREFIX."sharing_table WHERE object_id = ( SELECT file_id FROM ".TABLE_PREFIX."project_file_revisions WHERE object_id = o.id ) AND group_id IN (SELECT permission_group_id FROM ".TABLE_PREFIX."contact_permission_groups WHERE contact_id = $uid ) ) ) OR ( so.rel_object_id IN ( SELECT object_id FROM ".TABLE_PREFIX."sharing_table WHERE group_id IN ( SELECT permission_group_id FROM ".TABLE_PREFIX."contact_permission_groups WHERE contact_id = $uid ) ) ) )" . (($useLike) ? "AND so.content LIKE '%$search_string%' " : "AND MATCH (so.content) AGAINST ('$search_string' IN BOOLEAN MODE) ") . " AND o.object_type_id IN ($listableObjectTypeIds) " . $members_sql . " ORDER by o.updated_on DESC LIMIT $start, $limitTest "; } tpl_assign('type_object', $type_object); $db_search_results = array(); $search_results_ids = array(); $timeBegin = time(); $res = DB::execute($sql); $timeEnd = time(); while ($row = $res->fetchRow() ) { $search_results_ids[] = $row['id'] ; } // Prepare results for view to avoid processing at presentation layer $search_results = $this->prepareResults($search_results_ids, $null, $limit); // Calculate or approximate total for pagination $total = count($search_results_ids) + $start ; if ( count ( $search_results_ids ) < $limitTest ) { $total = count($search_results_ids) + $start ; }else{ $total = "Many" ; } //$total -= $filteredResults ; $this->total = $total ; // Pagination $this->buildPagination($search_results, $search_for); // Extra data $extra = new stdClass() ; if ($this->showQueryTime) { $extra->time = $timeEnd-$timeBegin ; } //$extra->filteredResults = $filteredResults ; // Template asigns tpl_assign('pagination', $this->pagination); tpl_assign('search_string', $search_for); tpl_assign('search_dimension', $this->search_dimension); tpl_assign('search_results', $search_results); tpl_assign('advanced', $advanced); tpl_assign('extra', $extra ); $types = array(array("", lang("select one"))); $object_types = ObjectTypes::getAvailableObjectTypes(); foreach ($object_types as $ot) { $types[] = array($ot->getId(), lang($ot->getName())); } // if ($selected_type != '') // tpl_assign('allowed_columns', $this->get_allowed_columns($selected_type)); tpl_assign('object_types', $types); //Ajax if (!$total && !$advanced){ if($_POST && count($search_results < 0)){ tpl_assign('msg_advanced', true); }else{ $this->setTemplate('no_results'); } } ajx_set_no_toolbar(true); }
/** * Execute search * TODO: Performance gus: * Fetch only ids and execute a select statement by pk (fer each result) * @param void * @return null */ function search() { // Init vars $search_for = array_var($_GET, 'search_for'); $search_dimension = array_var($_GET, 'search_dimension'); $advanced = array_var($_GET, 'advanced'); $minWordLength = $this->minWordLength($search_for); $useLike = $minWordLength && $this->ignoreMinWordLength && $minWordLength < self::$MYSQL_MIN_WORD_LENGHT; $search_pieces = explode(" ", $search_for); $search_string = ""; if (!$useLike) { // Prepare MATCH AGAINST string foreach ($search_pieces as $word) { if ((strpos($word, "@") || strpos($word, ".") || strpos($word, ",")) === false) { // STRING Dont containt special characheters that mysql use as separator. Noramal flow if ($this->wildCardSearch) { $word .= "*"; } } else { $word = str_replace($this->mysqlWordSeparator, " +", $word); } if (!str_starts_with($word, " ")) { $word = " +" . $word; } $search_string .= mysql_escape_string($word) . " "; } $search_string = substr($search_string, 0, -1); } else { // USE Like Query $search_string = mysql_escape_string($search_for); } $this->search_for = $search_for; $limit = $this->limit; $start = array_var($_REQUEST, 'start', $this->start); $this->start = $start; $limitTest = max($this->limitTest, $this->limit); $filteredResults = 0; $uid = logged_user()->getId(); if (!isset($search_dimension)) { $members = active_context_members(false); } else { if ($search_dimension == 0) { $members = array(); } else { $members = array($search_dimension); } } $members_sql = ""; if (count($members) > 0) { $members_sql = "AND rel_object_id IN (SELECT object_id FROM " . TABLE_PREFIX . "object_members om WHERE member_id IN (" . implode(',', $members) . ") \n GROUP BY object_id\n HAVING count(member_id) = " . count($members) . ")"; $this->search_dimension = implode(',', $members); } else { $this->search_dimension = 0; } $revisionObjectTypeId = ObjectTypes::findByName("file revision")->getId(); $listableObjectTypeIds = implode(",", ObjectTypes::getListableObjectTypeIds()); if ($_POST) { $conditions = array_var($_POST, 'conditions'); $search = array_var($_POST, 'search'); $type_object = array_var($search, 'search_object_type_id'); if (!is_array($conditions)) { $conditions = array(); } $where_condiition = ''; $conditions_view = array(); $cont = 0; foreach ($conditions as $condition) { $condValue = array_key_exists('value', $condition) ? $condition['value'] : ''; if ($condition['field_type'] == 'boolean') { $value = array_key_exists('value', $condition); } else { if ($condition['field_type'] == 'date') { if ($condValue != '') { $dtFromWidget = DateTimeValueLib::dateFromFormatAndString(user_config_option('date_format'), $condValue); $value = date("m/d/Y", $dtFromWidget->getTimestamp()); } } else { $value = $condValue; } } if ($condition['condition'] == "like") { $where_condiition .= " AND " . $condition['field_name'] . " " . $condition['condition'] . " '" . $value . "%' "; } else { $where_condiition .= " AND " . $condition['field_name'] . " " . $condition['condition'] . " '" . $value . "' "; } $conditions_view[$cont]['id'] = $condition['id']; $conditions_view[$cont]['custom_property_id'] = $condition['custom_property_id']; $conditions_view[$cont]['field_name'] = $condition['field_name']; $conditions_view[$cont]['condition'] = $condition['condition']; $conditions_view[$cont]['value'] = $value; $cont++; } tpl_assign('conditions', $conditions_view); if ($type_object) { $object_table = ObjectTypes::findById($type_object); $table = $object_table->getTableName(); } $sql = "\t\n\t\t\tSELECT distinct(so.rel_object_id) AS id\n\t\t\tFROM " . TABLE_PREFIX . "searchable_objects so\n INNER JOIN " . TABLE_PREFIX . $table . " nto ON nto.object_id = so.rel_object_id \n\t\t\tINNER JOIN " . TABLE_PREFIX . "objects o ON o.id = so.rel_object_id \n\t\t\tWHERE (\n\t\t\t\t(\n\t\t\t\t\tso.rel_object_id IN (\n\t\t\t \t\tSELECT object_id FROM " . TABLE_PREFIX . "sharing_table WHERE group_id IN (\n\t\t\t \t\t\tSELECT permission_group_id FROM " . TABLE_PREFIX . "contact_permission_groups WHERE contact_id = {$uid}\n\t\t\t \t\t)\n\t\t\t \t\t)\n\t\t\t \t)\n\t\t\t) " . $where_condiition . $members_sql . " ORDER by o.updated_on DESC\n\t\t\tLIMIT {$start}, {$limitTest} "; } else { $type_object = ''; $sql = "\t\n\t\t\tSELECT distinct(so.rel_object_id) AS id\n\t\t\tFROM " . TABLE_PREFIX . "searchable_objects so\n\t\t\tINNER JOIN " . TABLE_PREFIX . "objects o ON o.id = so.rel_object_id \n\t\t\tWHERE (\n\t\t\t\t(\t\n\t\t\t\t\to.object_type_id = {$revisionObjectTypeId} AND \n\t\t\t\t\tEXISTS ( \n\t\t\t\t\t\tSELECT id FROM " . TABLE_PREFIX . "sharing_table WHERE object_id = ( SELECT file_id FROM " . TABLE_PREFIX . "project_file_revisions WHERE object_id = o.id ) \n\t\t\t\t\t\tAND group_id IN (SELECT permission_group_id FROM " . TABLE_PREFIX . "contact_permission_groups WHERE contact_id = {$uid} )\n\t\t\t\t\t)\n\t\t\t\t\t\n\t\t\t\t) \n\t\t\t\tOR (\n\t\t\t\t\tso.rel_object_id IN (\n\t\t\t \t\tSELECT object_id FROM " . TABLE_PREFIX . "sharing_table WHERE group_id IN (\n\t\t\t \t\t\tSELECT permission_group_id FROM " . TABLE_PREFIX . "contact_permission_groups WHERE contact_id = {$uid}\n\t\t\t \t\t)\n\t\t\t \t\t)\n\t\t\t \t)\n\t\t\t)" . ($useLike ? "AND\tso.content LIKE '%{$search_string}%' " : "AND MATCH (so.content) AGAINST ('{$search_string}' IN BOOLEAN MODE) ") . " \n\t\t\tAND o.object_type_id IN ({$listableObjectTypeIds}) \n " . $members_sql . "\n\t\t\tORDER by o.updated_on DESC\n\t\t\tLIMIT {$start}, {$limitTest} "; } tpl_assign('type_object', $type_object); $db_search_results = array(); $search_results_ids = array(); $timeBegin = time(); $res = DB::execute($sql); $timeEnd = time(); if ($this->debug) { alert_r("<br>SQL:<br>" . $sql . "<hr>TIME:" . ($timeEnd - $timeBegin)); } while ($row = $res->fetchRow()) { $search_results_ids[] = $row['id']; } // Prepare results for view to avoid processing at presentation layer $search_results = $this->prepareResults($search_results_ids, $null, $limit); // Calculate or approximate total for pagination $total = count($search_results_ids) + $start; if (count($search_results_ids) < $limitTest) { $total = count($search_results_ids) + $start; } else { $total = "Many"; } //$total -= $filteredResults ; $this->total = $total; // Pagination $this->buildPagination($search_results); // Extra data $extra = new stdClass(); if ($this->showQueryTime) { $extra->time = $timeEnd - $timeBegin; } //$extra->filteredResults = $filteredResults ; // Template asigns tpl_assign('pagination', $this->pagination); tpl_assign('search_string', $search_for); tpl_assign('search_dimension', $this->search_dimension); tpl_assign('search_results', $search_results); tpl_assign('advanced', $advanced); tpl_assign('extra', $extra); $types = array(array("", lang("select one"))); $object_types = ObjectTypes::getAvailableObjectTypes(); foreach ($object_types as $ot) { $types[] = array($ot->getId(), lang($ot->getName())); } // if ($selected_type != '') // tpl_assign('allowed_columns', $this->get_allowed_columns($selected_type)); tpl_assign('object_types', $types); // //Ajax if (!$total && !$advanced) { if ($_POST && count($search_results < 0)) { tpl_assign('msg_advanced', true); } else { $this->setTemplate('no_results'); } } ajx_set_no_toolbar(true); }