assign('content', 'search_index.html'); $this->setPage('Search'); $this->setLayout('forum_base.html'); } //-------------------------------------------- // Search for stuff and return the results! //-------------------------------------------- function find(&$reg, &$req, &$resp) { $info = &new InformationDisplay($reg, $req, $resp); //-------------------------------------------- // Error checks... //-------------------------------------------- if($req->get('search_query') && strlen_utf($req->get('search_query')) >= 3) { $search_where = $req->get('search_where') && is_array($req->get('search_where')) ? $req->get('search_where') : array(); $search_where_threads = $req->get('search_where_threads') && is_array($req->get('search_where_threads')) ? $req->get('search_where_threads') : array(); $search_where_faq = $req->get('search_where_faq') && is_array($req->get('search_where_faq')) ? $req->get('search_where_faq') : array(); //-------------------------------------------- // Search everything! //-------------------------------------------- if(in_array('categories', $search_where)) $this->_searchCategories($reg, $req, $resp); if(in_array('comments', $search_where)) $this->_searchComments($reg, $req, $resp); if(in_array('faq', $search_where)) $this->_searchFaq($reg, $req, $resp, $search_where_faq); if(in_array('tags', $search_where)) $this->_searchTags($reg, $req, $resp); if(in_array('threads', $search_where)) $this->_searchThreads($reg, $req, $resp, $search_where_threads); if(in_array('users', $search_where)) $this->_searchUsers($reg, $req, $resp); } else { $resp->assign('search_error', TRUE); } //-------------------------------------------- // Don't toggle the quick search options ddmenu. //-------------------------------------------- $resp->assign('show_qs_where', 0); //-------------------------------------------- // Display the results. //-------------------------------------------- $resp->assign('search_query', $req->get('search_query')); $resp->assign('content', 'search_results.html'); $this->setPage('Search Results'); $this->setLayout('forum_base.html'); } //-------------------------------------------- // Search the FAQ. //-------------------------------------------- function _searchFAQ(&$reg, &$req, &$resp, $where) { $search_where = array(); if(in_array('question', $where)) { $resp->assign('search_faq_question', 1); $search_where[] = 'question'; } if(in_array('answer', $where)) { $resp->assign('search_faq_answer', 1); $search_where[] = 'answer'; } if(!empty($search_where)) { $finder = &$this->getFinder('faq_items'); $results = &$finder->searchAllWhere($search_where, "", array($req->get('search_query')), "search_score DESC", "item_id HAVING search_score > 0.2"); $resp->assignRef('search_results_faq', $results); $resp->assign('search_faq', 1); } } //-------------------------------------------- // Search the tags. //-------------------------------------------- function _searchTags(&$reg, &$req, &$resp) { $finder = &$this->getFinder('tags'); $results = &$finder->selectAllWhere(FALSE, "ts.tag_name LIKE ?", array('%'. $req->get('search_query') .'%')); $resp->assignRef('search_results_tags', $results); $resp->assign('search_tags', 1); } //-------------------------------------------- // Search the categories. //-------------------------------------------- function _searchCategories(&$reg, &$req, &$resp) { $finder = &$this->getFinder('categories'); $results = &$finder->searchAllWhere(array('name'), "", array($req->get('search_query')), "search_score DESC", "c.category_id HAVING search_score > 0.2"); $resp->assignRef('search_results_categories', $results); $resp->assign('search_categories', 1); } //-------------------------------------------- // Search the threads. //-------------------------------------------- function _searchThreads(&$reg, &$req, &$resp, $where) { $search_where = array(); if(in_array('name', $where)) { $resp->assign('search_thread_names', 1); $search_where[] = 'name'; } if(in_array('body', $where)) { $resp->assign('search_thread_body', 1); $search_where[] = 'body'; } if(!empty($search_where)) { $finder = &$this->getFinder('threads'); $results = &$finder->searchAllWhere($search_where, "", array($req->get('search_query')), "t.created DESC, search_score DESC", "t.thread_id HAVING search_score > 0.2"); $resp->assignRef('search_results_threads', $results); $resp->assign('search_threads', 1); } } //-------------------------------------------- // Search the users. //-------------------------------------------- function _searchUsers(&$reg, &$req, &$resp) { $finder = &$this->getFinder('users'); $results = &$finder->selectAllWhere(FALSE, "LOWER(name) LIKE LOWER(?)", array('%'. $req->get('search_query') .'%')); $resp->assignRef('search_results_users', $results); $resp->assign('search_users', 1); } //-------------------------------------------- // Search the Comments. //-------------------------------------------- function _searchComments(&$reg, &$req, &$resp) { $finder = &$this->getFinder('comments'); $results = &$finder->searchAllWhere(array('body'), "", array($req->get('search_query')), "search_score DESC"); $resp->assignRef('search_results_comments', $results); $resp->assign('search_comments', 1); } } ?>