/** * Log a user search generated suggestion. * * @parameter <{SEARCH_TERM}> string * @parameter <{EXTENSIBLE_SEARCH_PAGE_ID}> integer * @return extensible search suggestion */ public function logSuggestion($term, $pageID) { // Make sure the search matches the minimum autocomplete length. if (strlen($term) < 3) { return null; } // Make sure the suggestion doesn't already exist. $term = strtolower($term); $filter = array('Term' => $term, 'ExtensibleSearchPageID' => $pageID); $suggestion = ExtensibleSearchSuggestion::get()->filter($filter)->first(); // Store the frequency to make search suggestion relevance more efficient. $frequency = ExtensibleSearch::get()->filter($filter)->count(); if ($suggestion) { $suggestion->Frequency = $frequency; } else { // Log the suggestion. $suggestion = ExtensibleSearchSuggestion::create(array('Term' => $term, 'Frequency' => $frequency, 'Approved' => (int) Config::inst()->get('ExtensibleSearchSuggestion', 'automatic_approval'), 'ExtensibleSearchPageID' => $pageID)); } $suggestion->write(); return $suggestion; }
/** * Retrieve the frequency percentage. * * @return string */ public function getFrequencyPercentage() { $history = ExtensibleSearch::get()->filter('ExtensibleSearchPageID', $this->ExtensibleSearchPageID); return $this->Frequency ? sprintf('%.2f %%', $this->Frequency / $history->count() * 100) : '-'; }