ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilUserSearchCache.php
Go to the documentation of this file.
1<?php
2/*
3 +-----------------------------------------------------------------------------+
4 | ILIAS open source |
5 +-----------------------------------------------------------------------------+
6 | Copyright (c) 1998-2006 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
36{
37 const DEFAULT_SEARCH = 0;
38 const ADVANCED_SEARCH = 1;
40 const LUCENE_DEFAULT = 5;
41 const LUCENE_ADVANCED = 6;
42
43 const LAST_QUERY = 7;
44
46
47 private static $instance = null;
48 private $db;
49
50 private $usr_id;
52
53 private $search_result = array();
54 private $checked = array();
55 private $failed = array();
56 private $page_number = 1;
57 private $query;
58 private $root = ROOT_FOLDER_ID;
59
60 private $item_filter = array();
61
62 private $isAnonymous = false;
63
64 // begin-patch mime_filter
65 private $mime_filter = array();
66 // end-patch mime_filter
67
68 // begin-patch create_date
69 private $creation_filter = array();
70 // end-patch create_date
71
72
73
80 private function __construct($a_usr_id)
81 {
82 global $ilDB;
83
84 if($a_usr_id == ANONYMOUS_USER_ID)
85 {
86 $this->isAnonymous = true;
87 }
88
89 $this->db = $ilDB;
90 $this->usr_id = $a_usr_id;
91 $this->search_type = self::DEFAULT_SEARCH;
92 $this->read();
93 }
94
103 public static function _getInstance($a_usr_id)
104 {
105 if(is_object(self::$instance) and self::$instance)
106 {
107 return self::$instance;
108 }
109 return self::$instance = new ilUserSearchCache($a_usr_id);
110 }
111
116 public function isAnonymous()
117 {
118 return $this->isAnonymous;
119 }
120
129 public function switchSearchType($a_type)
130 {
131 $this->search_type = $a_type;
132 $this->read();
133 return true;
134 }
135
142 public function getResults()
143 {
144 return $this->search_result ? $this->search_result : array();
145 }
146
154 public function setResults($a_results)
155 {
156 $this->search_result = $a_results;
157 }
158
166 public function addResult($a_result_item)
167 {
168 $this->search_result[$a_result_item['ref_id']]['ref_id'] = $a_result_item['ref_id'];
169 $this->search_result[$a_result_item['ref_id']]['obj_id'] = $a_result_item['obj_id'];
170 $this->search_result[$a_result_item['ref_id']]['type'] = $a_result_item['type'];
171 return true;
172 }
173
181 public function appendToFailed($a_ref_id)
182 {
183 $this->failed[$a_ref_id] = $a_ref_id;
184 }
185
193 public function isFailed($a_ref_id)
194 {
195 return in_array($a_ref_id,$this->failed) ? true : false;
196 }
197
206 public function appendToChecked($a_ref_id,$a_obj_id)
207 {
208 $this->checked[$a_ref_id] = $a_obj_id;
209 }
210
218 public function isChecked($a_ref_id)
219 {
220 return array_key_exists($a_ref_id,$this->checked) and $this->checked[$a_ref_id];
221 }
222
230 public function getCheckedItems()
231 {
232 return $this->checked ? $this->checked : array();
233 }
234
241 public function setResultPageNumber($a_number)
242 {
243 if($a_number)
244 {
245 $this->page_number = $a_number;
246 }
247 }
248
255 public function getResultPageNumber()
256 {
257 return $this->page_number ? $this->page_number : 1;
258 }
259
265 public function setQuery($a_query)
266 {
267 $this->query = $a_query;
268 }
269
275 public function getQuery()
276 {
277 return $this->query;
278 }
279
284 public function getUrlEncodedQuery()
285 {
286 if(is_array($this->getQuery()))
287 {
288 $query = $this->getQuery();
289
290 return urlencode(str_replace('"', '.', $query['lom_content']));
291 }
292 return urlencode(str_replace('"', '.', $this->getQuery()));
293 }
294
300 public function setRoot($a_root)
301 {
302 $this->root = $a_root;
303 }
304
310 public function getRoot()
311 {
312 return $this->root ? $this->root : ROOT_FOLDER_ID;
313 }
314
315 public function setItemFilter($a_filter)
316 {
317 $this->item_filter = $a_filter;
318 }
319
320 public function getItemFilter()
321 {
322 return (array) $this->item_filter;
323 }
324
325 public function setMimeFilter($a_filter)
326 {
327 $this->mime_filter = $a_filter;
328 }
329
330 public function getMimeFilter()
331 {
332 return (array) $this->mime_filter;
333 }
334
335 // begin-patch create_date
336 public function setCreationFilter($a_filter)
337 {
338 $this->creation_filter = $a_filter;
339 }
340
341 public function getCreationFilter()
342 {
344 }
345 // end-patch create_date
346
347
353 public function deleteCachedEntries()
354 {
355 global $ilDB;
356
357 if($this->isAnonymous())
358 {
359 return $this->deleteCachedEntriesAnonymous();
360 }
361
362
363 $query = "SELECT COUNT(*) num FROM usr_search ".
364 "WHERE usr_id = ".$ilDB->quote($this->usr_id,'integer')." ".
365 "AND search_type = ".$ilDB->quote($this->search_type,'integer');
366 $res = $ilDB->query($query);
368
369 if($row->num > 0)
370 {
371 $ilDB->update('usr_search',
372 array(
373 'search_result' => array('clob',serialize(array(0))),
374 'checked' => array('clob',serialize(array(0))),
375 'failed' => array('clob',serialize(array(0))),
376 'page' => array('integer',0)),
377 array(
378 'usr_id' => array('integer',(int) $this->usr_id),
379 'search_type' => array('integer',(int) $this->search_type)
380 ));
381 }
382 else
383 {
384 $ilDB->insert('usr_search',
385 array(
386 'search_result' => array('clob',serialize(array(0))),
387 'checked' => array('clob',serialize(array(0))),
388 'failed' => array('clob',serialize(array(0))),
389 'page' => array('integer',0),
390 'usr_id' => array('integer',(int) $this->usr_id),
391 'search_type' => array('integer',(int) $this->search_type)
392 ));
393 }
394
395 $this->setResultPageNumber(1);
396 $this->search_result = array();
397 $this->checked = array();
398 $this->failed = array();
399 }
400
406 {
407 $this->setResultPageNumber(1);
408 $this->search_result = array();
409 $this->checked = array();
410 $this->failed = array();
411
412 return true;
413 }
414
415
416
423 public function delete()
424 {
425 global $ilDB;
426
427 $query = "DELETE FROM usr_search ".
428 "WHERE usr_id = ".$this->db->quote($this->usr_id ,'integer')." ".
429 "AND search_type = ".$this->db->quote($this->search_type ,'integer');
430 $res = $ilDB->manipulate($query);
431
432 $this->read();
433 return true;
434 }
435
442 public function save()
443 {
444 global $ilDB;
445
446 if($this->isAnonymous())
447 {
448 return $this->saveForAnonymous();
449 }
450
451 $query = "DELETE FROM usr_search ".
452 "WHERE usr_id = ".$ilDB->quote($this->usr_id ,'integer')." ".
453 "AND ( search_type = ".$ilDB->quote($this->search_type ,'integer').' '.
454 "OR search_type = ".$ilDB->quote(self::LAST_QUERY,'integer'). ')';
455 $res = $ilDB->manipulate($query);
456
457 $ilDB->insert('usr_search',array(
458 'usr_id' => array('integer',(int) $this->usr_id),
459 'search_result' => array('clob',serialize($this->search_result)),
460 'checked' => array('clob',serialize($this->checked)),
461 'failed' => array('clob',serialize($this->failed)),
462 'page' => array('integer',(int) $this->page_number),
463 'search_type' => array('integer',(int) $this->search_type),
464 'query' => array('clob',serialize($this->getQuery())),
465 'root' => array('integer',$this->getRoot()),
466 'item_filter' => array('text',serialize($this->getItemFilter())),
467 'mime_filter' => array('text', serialize($this->getMimeFilter())),
468 'creation_filter' => array('text', serialize($this->getCreationFilter()))
469 ));
470
471
472 // Write last query information
473 $ilDB->insert('usr_search',
474 array(
475 'usr_id' => array('integer',$this->usr_id),
476 'search_type' => array('integer',self::LAST_QUERY),
477 'query' => array('text',serialize($this->getQuery()))
478 )
479 );
480 }
481
482 public function saveForAnonymous()
483 {
484 unset($_SESSION['usr_search_cache']);
485
486 $_SESSION['usr_search_cache'][$this->search_type]['search_result'] = $this->search_result;
487 $_SESSION['usr_search_cache'][$this->search_type]['checked'] = $this->checked;
488 $_SESSION['usr_search_cache'][$this->search_type]['failed'] = $this->failed;
489 $_SESSION['usr_search_cache'][$this->search_type]['page'] = $this->page_number;
490 $_SESSION['usr_search_cache'][$this->search_type]['query'] = $this->getQuery();
491 $_SESSION['usr_search_cache'][$this->search_type]['root'] = $this->getRoot();
492 $_SESSION['usr_search_cache'][$this->search_type]['item_filter'] = $this->getItemFilter();
493 $_SESSION['usr_search_cache'][$this->search_type]['mime_filter'] = $this->getMimeFilter();
494 $_SESSION['usr_search_cache'][$this->search_type]['creation_filter'] = $this->getCreationFilter();
495
496 $_SESSION['usr_search_cache'][self::LAST_QUERY]['query'] = $this->getQuery();
497
498 return true;
499
500 }
501
502
509 private function read()
510 {
511 $this->failed = array();
512 $this->checked = array();
513 $this->search_result = array();
514 $this->page_number = 0;
515
516 if($this->isAnonymous())
517 {
518 return $this->readAnonymous();
519 }
520
521 $query = "SELECT * FROM usr_search ".
522 "WHERE usr_id = ".$this->db->quote($this->usr_id ,'integer')." ".
523 "AND search_type = ".$this->db->quote($this->search_type ,'integer');
524
525 $res = $this->db->query($query);
526 while($row = $res->fetchRow(ilDBConstants::FETCHMODE_OBJECT))
527 {
528 $this->search_result = unserialize(stripslashes($row->search_result));
529 if(strlen($row->checked))
530 {
531 $this->checked = unserialize(stripslashes($row->checked));
532 }
533 if(strlen($row->failed))
534 {
535 $this->failed = unserialize(stripslashes($row->failed));
536 }
537 $this->page_number = $row->page;
538 $this->setQuery(unserialize($row->query));
539 $this->setRoot($row->root);
540 $this->setItemFilter(unserialize($row->item_filter));
541 $this->setCreationFilter(unserialize($row->creation_filter));
542 }
543 return true;
544 }
545
549 private function readAnonymous()
550 {
551 $this->search_result = (array) $_SESSION['usr_search_cache'][$this->search_type]['search_result'];
552 $this->checked = (array) $_SESSION['usr_search_cache'][$this->search_type]['checked'];
553 $this->failed = (array) $_SESSION['usr_search_cache'][$this->search_type]['failed'];
554 $this->page_number = $_SESSION['usr_search_cache'][$this->search_type]['page_number'];
555
556 $this->setQuery($_SESSION['usr_search_cache'][$this->search_type]['query']);
557 $this->setRoot((string) $_SESSION['usr_search_cache'][$this->search_type]['root']);
558 $this->setItemFilter((array) $_SESSION['usr_search_cache'][$this->search_type]['item_filter']);
559 $this->setMimeFilter((array) $_SESSION['usr_search_cache'][$this->search_type]['mime_filter']);
560 $this->setCreationFilter((array) $_SESSION['usr_search_cache'][$this->search_type]['creation_filter']);
561
562 return true;
563 }
564}
565?>
$_SESSION["AccountId"]
An exception for terminatinating execution or to throw for unit testing.
Class for storing search result.
addResult($a_result_item)
Append result.
deleteCachedEntriesAnonymous()
Delete cached entries for anonymous user.
isChecked($a_ref_id)
Check if reference was already checked.
readAnonymous()
Read from session for anonymous user.
getCheckedItems()
Get all checked items.
getResultPageNumber()
get result page number
switchSearchType($a_type)
switch to search type reads entries from database
appendToChecked($a_ref_id, $a_obj_id)
Append checked id.
setRoot($a_root)
set root node of search
getUrlEncodedQuery()
Urlencode query for further use in e.g glossariers (highlighting off search terms).
appendToFailed($a_ref_id)
Append failed id.
isFailed($a_ref_id)
check if reference has failed access
setResults($a_results)
Set results.
deleteCachedEntries()
delete cached entries
setQuery($a_query)
set query
static _getInstance($a_usr_id)
Get singleton instance.
isAnonymous()
Check if current user is anonymous user.
__construct($a_usr_id)
Constructor.
setResultPageNumber($a_number)
Set result page number.
read()
Read user entries.
global $ilDB
$a_type
Definition: workflow.php:93