Esempio n. 1
0
 public function actionProfileresultsdisplay()
 {
     $maxRes = 100;
     $visitor = XenForo_Visitor::getInstance();
     if (!$visitor['user_id']) {
         throw $this->getNoPermissionResponseException();
     }
     $uid = $visitor['user_id'];
     unset($visitor);
     $query = mb_strtolower($this->_input->filterSingle('q', XenForo_Input::STRING), 'UTF-8');
     $q = substr($query, 0, 255);
     ProfileNdx_search_engine::cleanOldsFromLimit();
     ProfileNdx_search_engine::cleanOldsFromCache();
     $permission = ProfileNdx_search_engine::userCanSearch($uid, $q);
     if (!$permission['status']) {
         return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildPublicLink('search/profileresultswait/', '', array('redirect' => XenForo_Link::buildPublicLink('search/profileresultsdisplay/', '', array('q' => $query)), 'wait' => $permission['wait'])), '');
     }
     $viewpar = ProfileNdx_search_engine::getFromCache($q);
     if ($viewpar == null) {
         $results = (new ProfileNdx_search_engine())->search($q);
         $viewpar = array('search' => array('search_query' => $query), 'results' => array_slice($results, 0, $maxRes), 'totalResults' => count($results), 'resultStartOffset' => 0, 'resultEndOffset' => min(count($results), $maxRes));
         $results = (new ProfileNdx_search_engine())->toHtml($viewpar['results']);
         $viewpar['results'] = $results;
         ProfileNdx_search_engine::saveToCache($q, $viewpar);
     }
     return $this->responseView('XenForo_ViewPublic_Base', 'kiror_search_results', $viewpar);
 }
 public static function userCanSearch($u, $q)
 {
     $q = ProfileNdx_search_engine::mysql_escape_mimic_fromPhpDoc($q);
     $dbc = XenForo_Application::get('db');
     $qry = "SELECT COUNT(u) AS times, MAX(d) AS lastrq FROM `kiror_profile_search_limiting` WHERE u=" . $u . " GROUP BY u;";
     $r = $dbc->fetchRow($qry);
     $qry = "SELECT d FROM `kiror_profile_search_cache` WHERE q='" . $q . "' LIMIT 1;";
     $available = $dbc->fetchRow($qry)['d'] != null;
     $acc = time();
     $xfopt = XenForo_Application::get('options');
     $searchblocktime = $xfopt->searchblocktime;
     $waittime = $searchblocktime - ($acc - $r['lastrq']);
     if ($available || $waittime <= 0) {
         ProfileNdx_search_engine::computeSearchRequest($q);
         return array('status' => true, 'wait' => 0);
     }
     return array('status' => false, 'wait' => $waittime);
 }
Esempio n. 3
0
 public static function uninstall()
 {
     ProfileNdx_indexer_shared::clearDbNdx();
     ProfileNdx_search_engine::deleteSearchCacheTable();
     ProfileNdx_search_engine::deleteSearchLimitTable();
 }