CMS  Version 3.9
SearchManager Class Reference

The SearchManager class provides a simple API for searching across all Searchable records in the application database. More...

Public Member Functions

 SearchManager ($results=null)
 
 search ($params)
 
 formatResults ()
 
 doSearch ($params)
 
 getSearchableClasses ()
 
 extractDataItems ()
 
 sortByRelevance ()
 
 sortByTitle ()
 
 sortByDate ()
 
 drawFacets ($id=null)
 
 showResults ($pageSize=0)
 

Static Public Member Functions

static upgradeComponent ($version)
 
static setDefaults ()
 
static buildSearchMap ()
 
static compareRelevance ($item1, $item2)
 
static compareTitle ($item1, $item2)
 
static compareDate ($item1, $item2)
 
static formatSearchResult ($item)
 
static wrap ($items, $resultClass)
 

Public Attributes

 $searchResults
 
 $useFacetFilter = false
 
 $displayMode = "list"
 
 $facetDropdown = true
 
 $facetMaxWidth = "200px"
 
 $facetWidth = "200px"
 
 $facetHeight = "120px"
 

Static Public Attributes

static $map
 

Detailed Description

The SearchManager class provides a simple API for searching across all Searchable records in the application database.

Author
andy

Definition at line 47 of file search_manager.inc.

Member Function Documentation

◆ buildSearchMap()

static SearchManager::buildSearchMap ( )
static

Definition at line 80 of file search_manager.inc.

81  {
83  {
84  SearchManager::$map = Cache::get("fakoli_search_map");
85  }
86 
88  {
89  $map = array();
90  $map = ComponentManager::fireEvent("RegisterSearchables", $map);
91  Cache::put("fakoli_search_map", $map);
93  }
94  }
static fireEvent($event, $parameter=null, $mustBeConsumed=false)
Fire an event to all subscribers as detailed in their manifests.

◆ compareDate()

static SearchManager::compareDate (   $item1,
  $item2 
)
static

Definition at line 261 of file search_manager.inc.

262  {
263  return strtotime($item2->date()) - strtotime($item1->date());
264  }

◆ compareRelevance()

static SearchManager::compareRelevance (   $item1,
  $item2 
)
static

Definition at line 237 of file search_manager.inc.

238  {
239  return ($item1->relevance() > $item2->relevance())?-1:1;
240  }

◆ compareTitle()

static SearchManager::compareTitle (   $item1,
  $item2 
)
static

Definition at line 249 of file search_manager.inc.

250  {
251  return strcmp($item1->title(), $item2->title());
252  }

◆ doSearch()

SearchManager::doSearch (   $params)

Definition at line 152 of file search_manager.inc.

153  {
155 
156  if (is_object($params))
157  {
158  $class_array = $_REQUEST["searchable_classes:"];
159  }
160  else
161  {
162  $params = trim($params);
163  }
164 
165  $searchResults = array();
166  if (!$params)
167  {
168  $this->searchResults = array();
169  }
170  else
171  {
172  trace(print_r(SearchManager::$map, true), 3);
173 
174  foreach(SearchManager::$map as $component => $searchables)
175  {
177 
178  foreach($searchables as $searchable)
179  {
180  if ($class_array && !array_key_exists($searchable, $class_array)) continue;
181 
182  $obj = new $searchable;
183  $results = $obj->search($params);
184  $searchResults = array_merge($searchResults, $results);
185  }
186  }
187 
188  $this->searchResults = $searchResults;
189  }
190 
191  trace("SEARCH: ".count($searchResults)." results found", 3);
192  return $searchResults;
193  }
$component
Definition: help.inc:38
static using()
Import the datamodels, views and manifest for the specified component(s).
Definition: core.inc:116
static buildSearchMap()

◆ drawFacets()

SearchManager::drawFacets (   $id = null)

Definition at line 271 of file search_manager.inc.

272  {
273  trace("Drawing Facets", 3);
274  trace(getBacktrace(0), 3);
275 
276  global $script;
277  if ($this->drawnFacets || !$this->facetManager) return;
278 
279  if ($id)
280  {
281  $this->facetManager->id = $id;
282  }
283 
284  $script .= $this->facetManager->writeScript();
285  echo $this->facetManager->drawForm();
286 
287  $this->drawnFacets = true;
288  }

◆ extractDataItems()

SearchManager::extractDataItems ( )

Definition at line 218 of file search_manager.inc.

219  {
220  $items = array();
221 
222  foreach($this->searchResults as $result)
223  {
224  $items[] = $result->item;
225  }
226 
227  return $items;
228  }
$result

◆ formatResults()

SearchManager::formatResults ( )

Definition at line 116 of file search_manager.inc.

117  {
118  switch($this->displayMode)
119  {
120  case "table":
121  $this->list = new DataListView($this->extractDataItems(), "search_results");
122  $this->list->emptyMessage = "Your search did not match any items.";
123  $this->list->writeIdTag = true;
124  $this->list->sortable = true;
125  $this->list->filter = false;
126  break;
127 
128  case "list":
129  default:
130  $this->list = new PagedList($this->searchResults, "search_results", array(SearchManager, formatSearchResult));
131  $this->list->emptyList = "Your search did not match any items.";
132  $this->list->writeIdTag = true;
133  }
134 
135  if ($this->enableFacetFilter)
136  {
137  $this->facetManager = new FacetManager('facet_manager', $this->list);
138  $classes = $this->getSearchableClasses();
139  trace("Facet Classes: ".implode(", ", $classes), 3);
140 
141  if ($this->searchResultTypeFacet)
142  {
143  $this->facetManager->addFacet("Search Result Types", new SearchResultTypeFacetFilter($this->searchResults));
144  }
145 
146  TaxonomyManager::addFacets($this->facetManager, $classes, $this->facetDropdown, $this->facetMaxWidth, $this->facetWidth, $this->facetHeight);
147  }
148 
149  return $this;
150  }
The SearchManager class provides a simple API for searching across all Searchable records in the appl...
static formatSearchResult($item)
static addFacets($manager, $classes, $dropdown=true, $max_width="200px", $width="200px", $height="120px")

◆ formatSearchResult()

static SearchManager::formatSearchResult (   $item)
static

Definition at line 266 of file search_manager.inc.

267  {
268  return $item->summary();
269  }

◆ getSearchableClasses()

SearchManager::getSearchableClasses ( )

Definition at line 196 of file search_manager.inc.

197  {
199  if (isset($_REQUEST["searchable_classes:"]))
200  {
201  $class_array = $_REQUEST["searchable_classes:"];
202  }
203 
204  $cl = array();
205 
206  foreach(SearchManager::$map as $component => $searchables)
207  {
208  foreach($searchables as $searchable)
209  {
210  if ($class_array && !array_key_exists($searchable, $class_array)) continue;
211  $cl[] = $searchable;
212  }
213  }
214 
215  return $cl;
216  }

◆ search()

SearchManager::search (   $params)

Definition at line 96 of file search_manager.inc.

97  {
98  $searchResults = array();
99 
100  $searchHandler = ComponentManager::fireEvent("OverrideSearchHandler");
101 
102  if ($searchHandler)
103  {
104  trace("Search Handler: ".get_class($searchHandler), 3);
105  $this->searchResults = $searchHandler->search($params, $this);
106  }
107  else
108  {
109  trace("Search Handler: Using built-in SearchManager", 3);
110  $this->doSearch($params);
111  }
112 
113  return $this;
114  }

◆ SearchManager()

SearchManager::SearchManager (   $results = null)

Definition at line 61 of file search_manager.inc.

62  {
63  $this->searchResults = $results;
64  }

◆ setDefaults()

static SearchManager::setDefaults ( )
static

Definition at line 71 of file search_manager.inc.

72  {
73  Settings::setDefaultValue("search", "search_result_format", "Combined List", "String", "Specifies the display format to use when displaying results", "", "Combined List\nGrouped by Type");
74  Settings::setDefaultValue("search", "results_per_page", "20", "Number", "Specifies the number of results to show per page. Set to zero for no pagination.");
75  Settings::setDefaultValue("search", "show_text_fragment", false, "Boolean", "Specifies whether to show with the search results. Note that not all search types will return a text fragment");
76 
78  }
static setDefaultValue($component, $name, $value, $field_type="String", $annotation="", $category="", $options="", $weight=0)
Sets the default value of the given component setting.
Definition: settings.inc:174

◆ showResults()

SearchManager::showResults (   $pageSize = 0)

Definition at line 290 of file search_manager.inc.

291  {
292  global $script;
293 
294  if (!$this->list)
295  {
296  $this->formatResults();
297  }
298 
299  if ($pageSize == 0) $pageSize = Settings::getValue("search", "results_per_page");
300 
301  $this->list->pageSize = $pageSize;
302 
303  $script .= $this->list->writeScript();
304 
305  $num = count($this->searchResults);
306 
307  if ($num)
308  {
309  echo "<p><em>$num ".pluralize("match", $num)." found.</em></p>";
310  }
311 
312  $this->drawFacets();
313 
314  switch($this->displayMode)
315  {
316  case "table":
317  $this->list->drawView();
318  break;
319 
320  case "list":
321  default:
322  $this->list->drawList();
323  break;
324  }
325  }
drawFacets($id=null)
static getValue($component, $name)
Retrieve the value of the specified Setting.
Definition: settings.inc:104

◆ sortByDate()

SearchManager::sortByDate ( )

Definition at line 254 of file search_manager.inc.

255  {
256  trace("Sorting ".count($this->searchResults)." items by date", 3);
257  usort($this->searchResults, array(SearchManager, compareDate));
258  return $this;
259  }
static compareDate($item1, $item2)

◆ sortByRelevance()

SearchManager::sortByRelevance ( )

Definition at line 230 of file search_manager.inc.

231  {
232  trace("Sorting ".count($this->searchResults)." items by relevance", 3);
233  usort($this->searchResults, array(SearchManager, compareRelevance));
234  return $this;
235  }
static compareRelevance($item1, $item2)

◆ sortByTitle()

SearchManager::sortByTitle ( )

Definition at line 242 of file search_manager.inc.

243  {
244  trace("Sorting ".count($this->searchResults)." items by title", 3);
245  usort($this->searchResults, array(SearchManager, compareTitle));
246  return $this;
247  }
static compareTitle($item1, $item2)

◆ upgradeComponent()

static SearchManager::upgradeComponent (   $version)
static

Definition at line 66 of file search_manager.inc.

67  {
68  Cache::invalidate("fakoli_search_map");
69  }

◆ wrap()

static SearchManager::wrap (   $items,
  $resultClass 
)
static

Definition at line 327 of file search_manager.inc.

328  {
329  $results = array();
330 
331  if (is_array($items))
332  {
333  foreach($items as $item)
334  {
335  $result = new $resultClass($item);
336  // Store some class metadata in the wrapper record
337  $result->innerClass = get_class($item);
338  $result->prettyClassName = $result->prettifyClassName(true);
339 
340  $results[] = $result;
341  }
342  }
343 
344  return $results;
345  }

Member Data Documentation

◆ $displayMode

SearchManager::$displayMode = "list"

Definition at line 53 of file search_manager.inc.

◆ $facetDropdown

SearchManager::$facetDropdown = true

Definition at line 56 of file search_manager.inc.

◆ $facetHeight

SearchManager::$facetHeight = "120px"

Definition at line 59 of file search_manager.inc.

◆ $facetMaxWidth

SearchManager::$facetMaxWidth = "200px"

Definition at line 57 of file search_manager.inc.

◆ $facetWidth

SearchManager::$facetWidth = "200px"

Definition at line 58 of file search_manager.inc.

◆ $map

SearchManager::$map
static

Definition at line 49 of file search_manager.inc.

◆ $searchResults

SearchManager::$searchResults

Definition at line 51 of file search_manager.inc.

◆ $useFacetFilter

SearchManager::$useFacetFilter = false

Definition at line 52 of file search_manager.inc.


The documentation for this class was generated from the following file: