ILIAS  Release_3_10_x_branch Revision 61812
 All Data Structures Namespaces Files Functions Variables Groups Pages
class.ilSearchGUI.php
Go to the documentation of this file.
1 <?php
2 /*
3  +-----------------------------------------------------------------------------+
4  | ILIAS open source |
5  +-----------------------------------------------------------------------------+
6  | Copyright (c) 1998-2001 ILIAS open source, University of Cologne |
7  | |
8  | This program is free software; you can redistribute it and/or |
9  | modify it under the terms of the GNU General Public License |
10  | as published by the Free Software Foundation; either version 2 |
11  | of the License, or (at your option) any later version. |
12  | |
13  | This program is distributed in the hope that it will be useful, |
14  | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15  | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16  | GNU General Public License for more details. |
17  | |
18  | You should have received a copy of the GNU General Public License |
19  | along with this program; if not, write to the Free Software |
20  | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
21  +-----------------------------------------------------------------------------+
22 */
23 
35 include_once 'Services/Search/classes/class.ilSearchBaseGUI.php';
36 
37 define('SEARCH_FAST',1);
38 define('SEARCH_DETAILS',2);
39 define('SEARCH_AND','and');
40 define('SEARCH_OR','or');
41 
43 {
44  protected $search_cache = null;
45 
48  var $string;
49  var $type;
50 
55  function ilSearchGUI()
56  {
57  global $ilUser;
58 
59  $this->root_node = $_SESSION['search_root'] ? $_SESSION['search_root'] : ROOT_FOLDER_ID;
60  $this->setType($_POST['search']['type'] ? $_POST['search']['type'] : $_SESSION['search']['type']);
61  $this->setCombination($_POST['search']['combination'] ? $_POST['search']['combination'] : $_SESSION['search']['combination']);
62  $this->setString($_POST['search']['string'] ? $_POST['search']['string'] : $_SESSION['search']['string']);
63  $this->setDetails($_POST['search']['details'] ? $_POST['search']['details'] : $_SESSION['search']['details']);
64 
66  }
67 
68 
73  function setType($a_type)
74  {
75  $_SESSION['search']['type'] = $this->type = $a_type;
76  }
77  function getType()
78  {
79  return $this->type ? $this->type : SEARCH_FAST;
80  }
85  function setCombination($a_combination)
86  {
87  $_SESSION['search']['combination'] = $this->combination = $a_combination;
88  }
89  function getCombination()
90  {
91  return $this->combination ? $this->combination : SEARCH_OR;
92  }
97  function setString($a_str)
98  {
99  $_SESSION['search']['string'] = $this->string = $a_str;
100  }
101  function getString()
102  {
103  return $this->string;
104  }
109  function setDetails($a_details)
110  {
111  $_SESSION['search']['details'] = $this->details = $a_details;
112  }
113  function getDetails()
114  {
115  return $this->details ? $this->details : array();
116  }
117 
118 
119  function getRootNode()
120  {
121  return $this->root_node ? $this->root_node : ROOT_FOLDER_ID;
122  }
123  function setRootNode($a_node_id)
124  {
125  $_SESSION['search_root'] = $this->root_node = $a_node_id;
126  }
127 
132  function &executeCommand()
133  {
134  global $rbacsystem;
135 
136 
137  $next_class = $this->ctrl->getNextClass($this);
138  $cmd = $this->ctrl->getCmd();
139 
140  switch($next_class)
141  {
142  default:
143  $this->initUserSearchCache();
144  if(!$cmd)
145  {
146  $cmd = "showSavedResults";
147  }
148  $this->prepareOutput();
149  $this->$cmd();
150  break;
151  }
152  return true;
153  }
154 
155  function saveResult()
156  {
157  include_once 'Services/Search/classes/class.ilUserResult.php';
158  include_once 'Services/Search/classes/class.ilSearchFolder.php';
159 
160  global $ilUser;
161 
162  if(!$_POST['folder'])
163  {
164  ilUtil::sendInfo($this->lng->txt('search_select_one'));
165  $this->showSavedResults();
166 
167  return false;
168  }
169  if(!count($_POST['id']))
170  {
171  ilUtil::sendInfo($this->lng->txt('search_select_one_result'));
172  $this->showSavedResults();
173 
174  return false;
175  }
176 
177  $folder_obj =& new ilSearchFolder($ilUser->getId(),(int) $_POST['folder']);
178 
179  foreach($_POST['id'] as $ref_id)
180  {
182  $target = addslashes(serialize(array('type' => ilObject::_lookupType(ilObject::_lookupObjId($ref_id)),
183  'id' => $ref_id)));
184 
185  $search_res_obj =& new ilUserResult($ilUser->getId());
186  $search_res_obj->setTitle($title);
187  $search_res_obj->setTarget($target);
188 
189  $folder_obj->assignResult($search_res_obj);
190  unset($search_res_obj);
191  }
192  ilUtil::sendInfo($this->lng->txt('search_results_saved'));
193  $this->showSavedResults();
194 
195  }
196 
197 
198  function showSearch()
199  {
200  global $ilLocator;
201 
202  $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.search.html','Services/Search');
203 
204  $this->tpl->setVariable("TBL_TITLE",$this->lng->txt('search'));
205  $this->tpl->setVariable("TXT_SEARCHAREA",$this->lng->txt('search_area'));
206  $this->tpl->setVariable("SEARCH_ACTION",$this->ctrl->getFormAction($this));
207  $this->tpl->setVariable("TXT_SEARCHTERM",$this->lng->txt("search_search_term"));
208  $this->tpl->setVariable("TXT_AND",$this->lng->txt('search_all_words'));
209  $this->tpl->setVariable("TXT_OR",$this->lng->txt('search_any_word'));
210  $this->tpl->setVariable("BTN_SEARCH",$this->lng->txt('search'));
211 
212  // Check 'or' as default
213  if($this->getCombination() == SEARCH_AND)
214  {
215  $this->tpl->setVariable("AND_CHECKED",'checked=checked');
216  }
217  else
218  {
219  $this->tpl->setVariable("OR_CHECKED",'checked=checked');
220  }
221  // Set old query string
222  $this->tpl->setVariable("FORM_SEARCH_STR",ilUtil::prepareFormOutput($this->getString(),true));
223 
224  $this->tpl->setVariable("HREF_UPDATE_AREA",$this->ctrl->getLinkTarget($this,'showSelectRoot'));
225  $this->tpl->setVariable("UPDATE_AREA",$this->lng->txt('search_change'));
226 
227  // SEARCHTYPE
228  $this->tpl->setVariable("TXT_SEARCH_TYPE",$this->lng->txt('search_type'));
229  $this->tpl->setVariable("INFO_FAST",$this->lng->txt('search_fast_info'));
230  $this->tpl->setVariable("INFO_DETAILS",$this->lng->txt('search_details_info'));
231 
232  $this->tpl->setVariable("CHECK_FAST",ilUtil::formRadioButton($this->getType() == SEARCH_FAST ? 1 : 0,
233  'search[type]',
234  SEARCH_FAST ));
235 
236  $this->tpl->setVariable("CHECK_DETAILS",ilUtil::formRadioButton($this->getType() == SEARCH_DETAILS ? 1 : 0,
237  'search[type]',
238  SEARCH_DETAILS));
239  // SEARCH DETAILS
240  $this->tpl->setVariable("LMS",$this->lng->txt('learning_resources'));
241  $this->tpl->setVariable("GLO",$this->lng->txt('objs_glo'));
242  $this->tpl->setVariable("MEP",$this->lng->txt('objs_mep'));
243  $this->tpl->setVariable("TST",$this->lng->txt('search_tst_svy'));
244  $this->tpl->setVariable("FOR",$this->lng->txt('objs_frm'));
245  $this->tpl->setVariable("EXC",$this->lng->txt('objs_exc'));
246  $this->tpl->setVariable("MCST",$this->lng->txt('objs_mcst'));
247  $this->tpl->setVariable("WIKI",$this->lng->txt('objs_wiki'));
248  $this->tpl->setVariable("FIL",$this->lng->txt('objs_file'));
249 
250 
251  $details = $this->getDetails();
252  $this->tpl->setVariable("CHECK_GLO",ilUtil::formCheckbox($details['glo'] ? 1 : 0,'search[details][glo]',1));
253  $this->tpl->setVariable("CHECK_LMS",ilUtil::formCheckbox($details['lms'] ? 1 : 0,'search[details][lms]',1));
254  $this->tpl->setVariable("CHECK_MEP",ilUtil::formCheckbox($details['mep'] ? 1 : 0,'search[details][mep]',1));
255  $this->tpl->setVariable("CHECK_TST",ilUtil::formCheckbox($details['tst'] ? 1 : 0,'search[details][tst]',1));
256  $this->tpl->setVariable("CHECK_FOR",ilUtil::formCheckbox($details['frm'] ? 1 : 0,'search[details][frm]',1));
257  $this->tpl->setVariable("CHECK_EXC",ilUtil::formCheckbox($details['exc'] ? 1 : 0,'search[details][exc]',1));
258  $this->tpl->setVariable("CHECK_FIL",ilUtil::formCheckbox($details['fil'] ? 1 : 0,'search[details][fil]',1));
259  $this->tpl->setVariable("CHECK_MCST",ilUtil::formCheckbox($details['mcst'] ? 1 : 0,'search[details][mcst]',1));
260  $this->tpl->setVariable("CHECK_WIKI",ilUtil::formCheckbox($details['wiki'] ? 1 : 0,'search[details][wiki]',1));
261 
262 
263 
264  // SEARCHAREA
265  if($this->getRootNode() == ROOT_FOLDER_ID)
266  {
267  $this->tpl->setVariable("SEARCHAREA",$this->lng->txt('search_in_magazin'));
268  }
269  else
270  {
271  $text = $this->lng->txt('search_below')." '";
273  $text .= "'";
274  $this->tpl->setVariable("SEARCHAREA",$text);
275  }
276 
277  return true;
278  }
279 
280  function showSelectRoot()
281  {
282  global $tree;
283 
284  $this->tpl->addBlockFile('ADM_CONTENT','adm_content','tpl.search_root_selector.html','Services/Search');
285 
286  include_once 'Services/Search/classes/class.ilSearchRootSelector.php';
287 
288  ilUtil::sendInfo($this->lng->txt('search_area_info'));
289 
290  $exp = new ilSearchRootSelector($this->ctrl->getLinkTarget($this,'showSelectRoot'));
291  $exp->setExpand($_GET["search_root_expand"] ? $_GET["search_root_expand"] : $tree->readRootId());
292  $exp->setExpandTarget($this->ctrl->getLinkTarget($this,'showSelectRoot'));
293 
294  // build html-output
295  $exp->setOutput(0);
296 
297  $this->tpl->setVariable("EXPLORER",$exp->getOutput());
298  }
299 
300  function selectRoot()
301  {
302  $this->setRootNode((int) $_GET['root_id']);
303  $this->showSavedResults();
304 
305  return true;
306  }
307 
308 
309  function showSavedResults()
310  {
311  global $ilUser;
312 
313  // Read old result sets
314  include_once 'Services/Search/classes/class.ilSearchResult.php';
315 
316  $result_obj = new ilSearchResult($ilUser->getId());
317  $result_obj->read();
318  $result_obj->filterResults($this->getRootNode());
319 
320  $this->showSearch();
321 
322  // Show them
323  if(count($result_obj->getResults()))
324  {
325  $this->__showSearchInResults();
326  $this->addPager($result_obj,'max_page');
327 
328  include_once 'Services/Search/classes/class.ilSearchResultPresentationGUI.php';
329  $search_result_presentation = new ilSearchResultPresentationGUI($result_obj);
330  $this->tpl->setVariable("RESULTS",$search_result_presentation->showResults());
331  }
332 
333  return true;
334  }
335 
336  function searchInResults()
337  {
338  $this->search_mode = 'in_results';
339  $this->search_cache->setResultPageNumber(1);
340  unset($_SESSION['max_page']);
341  $this->performSearch();
342 
343  return true;
344  }
345 
346 
347  function performSearch()
348  {
349  global $ilUser;
350 
351  if(!isset($_GET['page_number']) and $this->search_mode != 'in_results' )
352  {
353  unset($_SESSION['max_page']);
354  $this->search_cache->delete();
355  }
356 
357  if($this->getType() == SEARCH_DETAILS and !$this->getDetails())
358  {
359  ilUtil::sendInfo($this->lng->txt('search_choose_object_type'));
360  $this->showSearch();
361 
362  return false;
363  }
364 
365 
366  // Step 1: parse query string
367  if(!is_object($query_parser =& $this->__parseQueryString()))
368  {
369  ilUtil::sendInfo($query_parser);
370  $this->showSearch();
371 
372  return false;
373  }
374  // Step 2: perform object search. Get an ObjectSearch object via factory. Depends on fulltext or like search type.
375  $result =& $this->__searchObjects($query_parser);
376 
377  // Step 3: perform meta keyword search. Get an MetaDataSearch object.
378  $result_meta =& $this->__searchMeta($query_parser,'keyword');
379  $result->mergeEntries($result_meta);
380 
381  $result_meta =& $this->__searchMeta($query_parser,'contribute');
382  $result->mergeEntries($result_meta);
383 
384  $result_meta =& $this->__searchMeta($query_parser,'title');
385  $result->mergeEntries($result_meta);
386 
387  $result_meta =& $this->__searchMeta($query_parser,'description');
388  $result->mergeEntries($result_meta);
389 
390  // Perform details search in object specific tables
391  if($this->getType() == SEARCH_DETAILS)
392  {
393  $result = $this->__performDetailsSearch($query_parser,$result);
394  }
395  // Step 5: Search in results
396  if($this->search_mode == 'in_results')
397  {
398  include_once 'Services/Search/classes/class.ilSearchResult.php';
399 
400  $old_result_obj = new ilSearchResult($ilUser->getId());
401  $old_result_obj->read();
402 
403  $result->diffEntriesFromResult($old_result_obj);
404  }
405 
406 
407  // Step 4: merge and validate results
408  $result->filter($this->getRootNode(),$query_parser->getCombination() == 'and');
409  $result->save();
410  $this->showSearch();
411 
412  if(!count($result->getResults()))
413  {
414  ilUtil::sendInfo($this->lng->txt('search_no_match'));
415  }
416  else
417  {
418  $this->__showSearchInResults();
419  }
420 
421  if($result->isLimitReached())
422  {
423  $message = sprintf($this->lng->txt('search_limit_reached'),$this->settings->getMaxHits());
424  ilUtil::sendInfo($message);
425  }
426 
427  // Step 6: show results
428  $this->addPager($result,'max_page');
429 
430  include_once 'Services/Search/classes/class.ilSearchResultPresentationGUI.php';
431  $search_result_presentation = new ilSearchResultPresentationGUI($result);
432  $this->tpl->setVariable("RESULTS",$search_result_presentation->showResults());
433 
434  return true;
435  }
436 
437 
438 
439  function prepareOutput()
440  {
442 
443  $this->tpl->setCurrentBlock("header_image");
444  $this->tpl->setVariable("IMG_HEADER", ilUtil::getImagePath("icon_src_b.gif"));
445  $this->tpl->parseCurrentBlock();
446 
447  $this->tpl->setVariable("TXT_HEADER",$this->lng->txt('search'));
448 
449  $this->tpl->addBlockFile("TABS","tabs","tpl.tabs.html");
450 
451  $this->tpl->setCurrentBlock("tab");
452  $this->tpl->setVariable("TAB_TYPE","tabactive");
453  $this->tpl->setVariable("TAB_LINK",$this->ctrl->getLinkTarget($this));
454  $this->tpl->setVariable("TAB_TEXT",$this->lng->txt("search"));
455  $this->tpl->parseCurrentBlock();
456 
457  $this->tpl->setCurrentBlock("tab");
458  $this->tpl->setVariable("TAB_TYPE","tabinactive");
459  $this->tpl->setVariable("TAB_LINK",$this->ctrl->getLinkTargetByClass('iladvancedsearchgui'));
460  $this->tpl->setVariable("TAB_TEXT",$this->lng->txt("search_advanced"));
461  $this->tpl->parseCurrentBlock();
462 
463  $this->tpl->setCurrentBlock("tab");
464  $this->tpl->setVariable("TAB_TYPE","tabinactive");
465  $this->tpl->setVariable("TAB_LINK",$this->ctrl->getLinkTargetByClass('ilsearchresultgui'));
466  $this->tpl->setVariable("TAB_TEXT",$this->lng->txt("search_search_results"));
467  $this->tpl->parseCurrentBlock();
468 
469  }
470 
471  // PRIVATE
472  function &__performDetailsSearch(&$query_parser,&$result)
473  {
474  foreach($this->getDetails() as $type => $always_one)
475  {
476  switch($type)
477  {
478  case 'lms':
479  $content_search =& ilObjectSearchFactory::_getLMContentSearchInstance($query_parser);
480  $content_search->setFilter($this->__getFilter());
481  $result->mergeEntries($content_search->performSearch());
482 
483  if($this->settings->enabledLucene())
484  {
485  $htlm_search =& ilObjectSearchFactory::_getHTLMSearchInstance($query_parser);
486  $result->mergeEntries($htlm_search->performSearch());
487  }
488  break;
489 
490  case 'frm':
491  $forum_search =& ilObjectSearchFactory::_getForumSearchInstance($query_parser);
492  $forum_search->setFilter($this->__getFilter());
493  $result->mergeEntries($forum_search->performSearch());
494  break;
495 
496  case 'glo':
497  // Glossary term definition pages
498  $gdf_search =& ilObjectSearchFactory::_getLMContentSearchInstance($query_parser);
499  $gdf_search->setFilter($this->__getFilter());
500  $result->mergeEntries($gdf_search->performSearch());
501  // Glossary terms
502  $gdf_term_search =& ilObjectSearchFactory::_getGlossaryDefinitionSearchInstance($query_parser);
503  $result->mergeEntries($gdf_term_search->performSearch());
504  break;
505 
506  case 'exc':
507  $exc_search =& ilObjectSearchFactory::_getExerciseSearchInstance($query_parser);
508  $exc_search->setFilter($this->__getFilter());
509  $result->mergeEntries($exc_search->performSearch());
510  break;
511 
512  case 'mcst':
513  $mcst_search =& ilObjectSearchFactory::_getMediaCastSearchInstance($query_parser);
514  $result->mergeEntries($mcst_search->performSearch());
515  break;
516 
517  case 'tst':
518  $tst_search =& ilObjectSearchFactory::_getTestSearchInstance($query_parser);
519  $tst_search->setFilter($this->__getFilter());
520  $result->mergeEntries($tst_search->performSearch());
521  break;
522 
523  case 'mep':
524  $mep_search =& ilObjectSearchFactory::_getMediaPoolSearchInstance($query_parser);
525  $mep_search->setFilter($this->__getFilter());
526  $result->mergeEntries($mep_search->performSearch());
527  break;
528 
529  case 'fil':
530  if($this->settings->enabledLucene())
531  {
532  $file_search =& ilObjectSearchFactory::_getFileSearchInstance($query_parser);
533  $result->mergeEntries($file_search->performSearch());
534  }
535  break;
536 
537  case 'wiki':
538  $wiki_search =& ilObjectSearchFactory::_getWikiContentSearchInstance($query_parser);
539  $wiki_search->setFilter($this->__getFilter());
540  $result->mergeEntries($wiki_search->performSearch());
541 
542  /*$result_meta =& $this->__searchMeta($query_parser,'title');
543  $result->mergeEntries($result_meta);
544  $result_meta =& $this->__searchMeta($query_parser,'description');
545  $result->mergeEntries($result_meta);*/
546  break;
547 
548  }
549  }
550  return $result;
551  }
552 
558  function &__parseQueryString()
559  {
560  include_once 'Services/Search/classes/class.ilQueryParser.php';
561 
562  $query_parser = new ilQueryParser(ilUtil::stripSlashes($this->getString()));
563  $query_parser->setCombination($this->getCombination());
564  $query_parser->parse();
565 
566  if(!$query_parser->validate())
567  {
568  return $query_parser->getMessage();
569  }
570  return $query_parser;
571  }
577  function &__searchObjects(&$query_parser)
578  {
579  include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
580 
581  $obj_search =& ilObjectSearchFactory::_getObjectSearchInstance($query_parser);
582  if($this->getType() == SEARCH_DETAILS)
583  {
584  $obj_search->setFilter($this->__getFilter());
585  }
586  return $obj_search->performSearch();
587  }
588 
589 
595  function &__searchMeta(&$query_parser,$a_type)
596  {
597  include_once 'Services/Search/classes/class.ilObjectSearchFactory.php';
598 
599  $meta_search =& ilObjectSearchFactory::_getMetaDataSearchInstance($query_parser);
600  if($this->getType() == SEARCH_DETAILS)
601  {
602  $meta_search->setFilter($this->__getFilter());
603  }
604  switch($a_type)
605  {
606  case 'keyword':
607  $meta_search->setMode('keyword');
608  break;
609 
610  case 'contribute':
611  $meta_search->setMode('contribute');
612  break;
613 
614  case 'title':
615  $meta_search->setMode('title');
616  break;
617 
618  case 'description':
619  $meta_search->setMode('description');
620  break;
621  }
622  return $meta_search->performSearch();
623  }
629  function __getFilter()
630  {
631  if($this->getType() != SEARCH_DETAILS)
632  {
633  return false;
634  }
635 
636  foreach($this->getDetails() as $key => $detail_type)
637  {
638  switch($key)
639  {
640  case 'lms':
641  $filter[] = 'lm';
642  $filter[] = 'dbk';
643  $filter[] = 'pg';
644  $filter[] = 'st';
645  $filter[] = 'sahs';
646  $filter[] = 'htlm';
647  break;
648 
649  case 'frm':
650  $filter[] = 'frm';
651  break;
652 
653  case 'glo':
654  $filter[] = 'glo';
655  break;
656 
657  case 'exc':
658  $filter[] = 'exc';
659  break;
660 
661  case 'mcst':
662  $filter[] = 'mcst';
663  break;
664 
665  case 'tst':
666  $filter[] = 'tst';
667  $filter[] = 'svy';
668  $filter[] = 'qpl';
669  $filter[] = 'spl';
670  break;
671 
672  case 'mep':
673  $filter[] = 'mep';
674  $filter[] = 'mob';
675  break;
676 
677  case 'fil':
678  $filter[] = 'file';
679  break;
680 
681  case 'wiki':
682  $filter[] = 'wpg';
683  break;
684  }
685  }
686  return $filter ? $filter : array();
687  }
688 
695  {
696  $this->tpl->setCurrentBlock("search_results");
697  $this->tpl->setVariable("BTN_SEARCHRESULTS",$this->lng->txt('search_in_result'));
698  $this->tpl->parseCurrentBlock();
699 
700  $this->tpl->setCurrentBlock("save_result");
701  $this->tpl->setVariable("DOWNRIGHT",ilUtil::getImagePath('arrow_downright.gif'));
702  $this->tpl->setVariable("BTN_SAVE_RESULT",$this->lng->txt('save'));
703  $this->tpl->setVariable("SELECT_FOLDER",$this->__getFolderSelect());
704  $this->tpl->parseCurrentBlock();
705 
706  return true;
707  }
708 
709  function __getFolderSelect()
710  {
711  global $ilUser;
712 
713  include_once 'Services/Search/classes/class.ilSearchFolder.php';
714 
715  // INITIATE SEARCH FOLDER OBJECT
716  $folder_obj =& new ilSearchFolder($ilUser->getId());
717 
718 
719  $subtree = $folder_obj->getSubtree();
720 
721  $options[0] = $this->lng->txt("search_select_one_folder_select");
722  $options[$folder_obj->getRootId()] = $this->lng->txt("search_save_as_select")." ".$this->lng->txt("search_search_results");
723 
724  foreach($subtree as $node)
725  {
726  if($node["obj_id"] == $folder_obj->getRootId())
727  {
728  continue;
729  }
730  // CREATE PREFIX
731  $prefix = $this->lng->txt("search_save_as_select");
732  for($i = 1; $i < $node["depth"];++$i)
733  {
734  $prefix .= "&nbsp;&nbsp;";
735  }
736  $options[$node["obj_id"]] = $prefix.$node["title"];
737  }
738  return ilUtil::formSelect(0,'folder',$options,false,true);
739  }
746  protected function initUserSearchCache()
747  {
748  global $ilUser;
749 
750  include_once('Services/Search/classes/class.ilUserSearchCache.php');
751  $this->search_cache = ilUserSearchCache::_getInstance($ilUser->getId());
752  if($_GET['page_number'])
753  {
754  $this->search_cache->setResultPageNumber((int) $_GET['page_number']);
755  }
756  }
757 
758 }
759 ?>