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); }
public static function uninstall() { ProfileNdx_indexer_shared::clearDbNdx(); ProfileNdx_search_engine::deleteSearchCacheTable(); ProfileNdx_search_engine::deleteSearchLimitTable(); }