ILIAS  Release_4_0_x_branch Revision 61816
 All Data Structures Namespaces Files Functions Variables Groups Pages
ilShopSearchResult Class Reference

searchResult stores all result of a search query. More...

+ Inheritance diagram for ilShopSearchResult:
+ Collaboration diagram for ilShopSearchResult:

Public Member Functions

 ilShopSearchResult ($a_search_type)
 setSearchType ($_search_type)
 getSearchType ()
 filter ($a_root_node, $check_and)
 Filter search result.
 __initSearchSettingsObject ()
 getResultsForPresentation ()
 getTopics ()
 setTopics ($a_topics=array())
 setResultPageNumber ($a_result_page_number)
 getResultPageNumber ()
 addPresentationResult ($a_presentation_result=array())
 getPresentationResults ()
 addEntry ($a_ref_id, $a_type, $found, $a_child_id=0)
 add search result entry Entries are stored with 'obj_id'.
 __updateEntryChilds ($a_ref_id, $a_childs)
 Update childs for a specific entry.
 mergeEntries (&$result_obj)
 merge entries of this instance and another result object
 diffEntriesFromResult (&$result_obj)
 diff entries of this instance and another result object Used for search in results
 getUniqueResults ()
 Get unique results.
- Public Member Functions inherited from ilSearchResult
 ilSearchResult ($a_user_id=0)
 Constructor public.
 setRequiredPermission ($a_permission)
 Set the required permission for the rbac checks in function 'filter()'.
 getRequiredPermission ()
 setUserId ($a_user_id)
 getUserId ()
 getEntries ()
 isLimitReached ()
 setMaxHits ($a_max_hits)
 getMaxHits ()
 isOffsetReached ($a_counter)
 Check if offset is reached.
 numEntries ()
 Check number of entries public.
 intersectEntries (&$result_obj)
 Build intersection of entries (all entries that are present in both result sets)
 addResult ($a_ref_id, $a_obj_id, $a_type)
 add search result Results are stored with 'ref_id'.
 getResults ()
 getResultIds ()
 get result ids
 getResultsByObjId ()
 getSubitemIds ()
 filterResults ($a_root_node)
 Filter search area of result set public.
 save ($a_type=DEFAULT_SEARCH)
 Save search results.
 read ($a_type=DEFAULT_SEARCH)
 read search results
 __updateResultChilds ($a_ref_id, $a_childs)
 Update childs for a specific result.
 preventOverwritingMaxhits ($a_flag=null)
 If you call this function and pass "true" the maxhits setting will not be overwritten in __initSearchSettingsObject()
 addObserver (&$a_class, $a_method)
 The observer is used to call functions for filtering result.
 callListeners ($a_ref_id, &$a_data)

Protected Member Functions

 assignEntries ($a_entries)
 initUserSearchCache ()
 Init user search cache.

Protected Attributes

 $result_page_number = 0
 $topics = array()
 $presentation_results = array()
 $search_type = ''
- Protected Attributes inherited from ilSearchResult
 $search_cache = null
 $offset = 0
 $preventOverwritingMaxhits = false

Additional Inherited Members

- Data Fields inherited from ilSearchResult
 $permission = 'visible'
 $user_id
 $entries = array()
 $results = array()
 $observers = array()
 $ilias
 $ilAccess
 $limit_reached = false
 $result

Detailed Description

searchResult stores all result of a search query.

Offers methods like mergeResults. To merge result sets of different queries.

Author
Michael Jansen mjans.nosp@m.en@d.nosp@m.ataba.nosp@m.y.de
Version
Id$

Definition at line 36 of file class.ilShopSearchResult.php.

Member Function Documentation

ilShopSearchResult::__initSearchSettingsObject ( )

Reimplemented from ilSearchResult.

Definition at line 167 of file class.ilShopSearchResult.php.

References ilGeneralSettings\_getInstance(), and ilSearchResult\setMaxHits().

Referenced by filter().

{
include_once 'payment/classes/class.ilGeneralSettings.php';
$maxhits = ilGeneralSettings::_getInstance()->get('max_hits');
$this->setMaxHits(($maxhits > 0 ? $maxhits : 20));
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ilShopSearchResult::__updateEntryChilds (   $a_obj_id,
  $a_childs 
)

Update childs for a specific entry.

Parameters
integerobject object_id
arrayarray of child ids. E.g 'pg', 'st' private

Reimplemented from ilSearchResult.

Definition at line 363 of file class.ilShopSearchResult.php.

Referenced by diffEntriesFromResult(), and mergeEntries().

{
if($this->entries[$a_ref_id] and is_array($a_childs))
{
foreach($a_childs as $child_id)
{
if($child_id)
{
$this->entries[$a_ref_id]['child'][$child_id] = $child_id;
}
}
return true;
}
return false;
}

+ Here is the caller graph for this function:

ilShopSearchResult::addEntry (   $a_obj_id,
  $a_type,
  $found,
  $a_child_id = 0 
)

add search result entry Entries are stored with 'obj_id'.

This method is typically called to store db query results.

Parameters
integerobject object_id
stringobj_type 'lm' or 'crs' ...
arrayvalue position of query parser words in query string
integerchild id e.g id of page or chapter public

Reimplemented from ilSearchResult.

Definition at line 322 of file class.ilShopSearchResult.php.

Referenced by diffEntriesFromResult(), and mergeEntries().

{
global $ilObjDataCache;
$a_obj_id = $ilObjDataCache->lookupObjId($a_ref_id);
// Create new entry if it not exists
if(!$this->entries[$a_ref_id])
{
$this->entries[$a_ref_id]['ref_id'] = $a_ref_id;
$this->entries[$a_ref_id]['obj_id'] = $a_obj_id;
$this->entries[$a_ref_id]['type'] = $a_type;
$this->entries[$a_ref_id]['found'] = $found;
if($a_child_id and $a_child_id != $a_ref_id)
{
$this->entries[$a_ref_id]['child'][$a_child_id] = $a_child_id;
}
}
else
{
// replace or add child ('pg','st') id
if($a_child_id and $a_child_id != $a_obj_id)
{
$this->entries[$a_ref_id]['child'][$a_child_id] = $a_child_id;
}
// UPDATE FOUND
$counter = 0;
foreach($found as $position)
{
if($position)
{
$this->entries[$a_ref_id]['found'][$counter] = $position;
}
$counter++;
}
}
return true;
}

+ Here is the caller graph for this function:

ilShopSearchResult::addPresentationResult (   $a_presentation_result = array())

Definition at line 306 of file class.ilShopSearchResult.php.

Referenced by getResultsForPresentation().

{
$this->presentation_results[] = $a_presentation_result;
}

+ Here is the caller graph for this function:

ilShopSearchResult::assignEntries (   $a_entries)
protected

Definition at line 64 of file class.ilShopSearchResult.php.

Referenced by filter().

{
$ordered_entries = array();
$num_entries = count($a_entries);
foreach($this->topics as $oTopic)
{
foreach($a_entries as $aEntry)
{
if($oTopic->getId() == $aEntry['topic_id'])
{
$ordered_entries[$aEntry['ref_id']] = $aEntry;
}
}
}
if(count($ordered_entries) < $num_entries)
{
foreach($a_entries as $aEntry)
{
if(0 == $aEntry['topic_id'])
{
$ordered_entries[$aEntry['ref_id']] = $aEntry;
}
}
}
return is_array($ordered_entries) ? $ordered_entries : array();
}

+ Here is the caller graph for this function:

ilShopSearchResult::diffEntriesFromResult ( $result_obj)

diff entries of this instance and another result object Used for search in results

Parameters
objectresult_obj public

Reimplemented from ilSearchResult.

Definition at line 389 of file class.ilShopSearchResult.php.

References $ref_id, __updateEntryChilds(), addEntry(), and ilSearchResult\getEntries().

{
$new_entries = $this->getEntries();
$this->entries = array();
// Get all checked objects
foreach($this->search_cache->getCheckedItems() as $ref_id => $obj_id)
{
if(isset($new_entries[$ref_id]))
{
$this->addEntry($new_entries[$ref_id]['ref_id'],
$new_entries[$ref_id]['type'],
$new_entries[$ref_id]['found']);
$this->__updateEntryChilds($new_entries[$ref_id]['ref_id'],
$new_entries[$ref_id]['child']);
}
}
}

+ Here is the call graph for this function:

ilShopSearchResult::filter (   $a_root_node,
  $check_and 
)

Filter search result.

Do RBAC checks.

Allows paging of results for referenced objects

public

Parameters
introot node id
boolcheck and boolean search
Returns
bool success status

Reimplemented from ilSearchResult.

Definition at line 105 of file class.ilShopSearchResult.php.

References $ref_id, $type, __initSearchSettingsObject(), ilSearchResult\__updateResultChilds(), ilPaymentObject\_lookupTopicId(), ilObject\_lookupType(), ilSearchResult\addResult(), assignEntries(), ilSearchResult\callListeners(), ilSearchResult\getEntries(), and ilSearchResult\getRequiredPermission().

{
global $tree;
// get ref_ids and check access
$counter = 0;
$offset_counter = 0;
$tmp_entries = array();
foreach($this->getEntries() as $ref_id => $entry)
{
// boolean and failed continue
if($check_and && in_array(0, $entry['found']))
{
continue;
}
// Types like role, rolt, user do not need rbac checks
$type = ilObject::_lookupType($entry['obj_id']);
if($type == 'rolt' or $type == 'usr' or $type == 'role')
{
continue;
}
// Check access
if($this->ilAccess->checkAccessOfUser($this->getUserId(),
'',
{
if($a_root_node == ROOT_FOLDER_ID || $tree->isGrandChild($a_root_node, $ref_id))
{
if($this->callListeners($ref_id, $entry))
{
$entry['ref_id'] = $ref_id;
$entry['type'] = $type;
$tmp_entries[$ref_id] = $entry;
}
}
}
}
$this->results = array();
$tmp_entries = $this->assignEntries($tmp_entries);
$counter = 0;
foreach($tmp_entries as $entry)
{
if($this->callListeners($entry['ref_id'], $entry))
{
$this->addResult($entry['ref_id'], $entry['obj_id'], $entry['type']);
$this->search_cache->appendToChecked($entry['ref_id'], $entry['obj_id']);
$this->__updateResultChilds($entry['ref_id'], $entry['child']);
}
}
$this->search_cache->setResults($this->results);
return false;
}

+ Here is the call graph for this function:

ilShopSearchResult::getPresentationResults ( )

Definition at line 310 of file class.ilShopSearchResult.php.

{
return is_array($this->presentation_results) ? $this->presentation_results : array();
}
ilShopSearchResult::getResultPageNumber ( )

Definition at line 301 of file class.ilShopSearchResult.php.

References $result_page_number.

Referenced by getResultsForPresentation().

+ Here is the caller graph for this function:

ilShopSearchResult::getResultsForPresentation ( )

Reimplemented from ilSearchResult.

Definition at line 174 of file class.ilShopSearchResult.php.

References $presentation_results, ilSearchResult\$result, ilSearchResult\$results, $title, $type, ilObject\_lookupDescription(), ilObject\_lookupTitle(), ilPaymentObject\_lookupTopicId(), addPresentationResult(), ilSearchResult\getMaxHits(), getResultPageNumber(), ilSearchResult\getResults(), and getTopics().

{
$results = array();
$offset_counter = 0;
$counter = 0;
foreach($this->getResults() as $result)
{
if($this->getMaxHits() * ($this->getResultPageNumber() - 1) > $offset_counter)
{
++$offset_counter;
continue;
}
++$counter;
if($counter >= $this->getMaxHits())
{
break;
}
}
$objects_with_topics = array();
$objects_with_no_topcis = array();
foreach($this->getTopics() as $oTopic)
{
foreach($results as $result)
{
$topic_id = ilPaymentObject::_lookupTopicId($result['ref_id']);
if(!(int)$topic_id && !array_key_exists($result['ref_id'], $objects_with_no_topcis))
{
$objects_with_no_topcis[$result['ref_id']] = $result;
continue;
}
if((int)$topic_id != $oTopic->getId())
{
continue;
}
if(!array_key_exists($result['ref_id'], $objects_with_topics))
{
$objects_with_topics[$result['ref_id']] = $result;
}
switch($result['type'])
{
// learning material
case "sahs":
case "lm":
case "dbk":
case "htlm":
$type = "lres";
break;
default:
$type = $result['type'];
break;
}
$title = ilObject::_lookupTitle($result['obj_id']);
$description = ilObject::_lookupDescription($result['obj_id']);
$presentation_results[$oTopic->getId()][$type][] = array('ref_id' => $result['ref_id'],
'title' => $title,
'description' => $description,
'type' => $result['type'],
'obj_id' => $result['obj_id'],
'topic_id' => $topic_id,
'child' => $result['child']);
$this->addPresentationResult($presentation_results[$oTopic->getId()][$type][count($presentation_results[$oTopic->getId()][$type]) - 1]);
}
}
foreach($results as $result)
{
if(!array_key_exists($result['ref_id'], $objects_with_topics) &&
!array_key_exists($result['ref_id'], $objects_with_no_topcis))
{
$objects_with_no_topcis[$result['ref_id']] = $result;
}
}
foreach($objects_with_no_topcis as $result)
{
switch($result['type'])
{
// learning material
case "sahs":
case "lm":
case "dbk":
case "htlm":
$type = "lres";
break;
default:
$type = $result['type'];
break;
}
$title = ilObject::_lookupTitle($result['obj_id']);
$description = ilObject::_lookupDescription($result['obj_id']);
$presentation_results[0][$type][] = array('ref_id' => $result['ref_id'],
'title' => $title,
'description' => $description,
'type' => $result['type'],
'obj_id' => $result['obj_id'],
'child' => $result['child']);
}
}

+ Here is the call graph for this function:

ilShopSearchResult::getSearchType ( )

Definition at line 59 of file class.ilShopSearchResult.php.

References $search_type.

{
}
ilShopSearchResult::getTopics ( )

Definition at line 288 of file class.ilShopSearchResult.php.

Referenced by getResultsForPresentation().

{
return is_array($this->topics) ? $this->topics : array();
}

+ Here is the caller graph for this function:

ilShopSearchResult::getUniqueResults ( )

Get unique results.

Return an array of obj_id (No multiple results for references) Results are stored with 'ref_id'. This method is typically called after checking access of entries. public

Reimplemented from ilSearchResult.

Definition at line 408 of file class.ilShopSearchResult.php.

References ilSearchResult\$results.

{
}
ilShopSearchResult::ilShopSearchResult (   $a_search_type)

Definition at line 43 of file class.ilShopSearchResult.php.

{
global $ilUser;
$this->search_type = $a_search_type;
parent::__construct($ilUser->getId());
}
ilShopSearchResult::initUserSearchCache ( )
protected

Init user search cache.

private

Reimplemented from ilSearchResult.

Definition at line 315 of file class.ilShopSearchResult.php.

{
$this->search_cache->switchSearchType($this->search_type);
}
ilShopSearchResult::mergeEntries ( $result_obj)

merge entries of this instance and another result object

Parameters
objectresult_obj public

Reimplemented from ilSearchResult.

Definition at line 379 of file class.ilShopSearchResult.php.

References __updateEntryChilds(), and addEntry().

{
foreach($result_obj->getEntries() as $entry)
{
$this->addEntry($entry['ref_id'],$entry['type'],$entry['found']);
$this->__updateEntryChilds($entry['ref_id'],$entry['child']);
}
return true;
}

+ Here is the call graph for this function:

ilShopSearchResult::setResultPageNumber (   $a_result_page_number)

Definition at line 297 of file class.ilShopSearchResult.php.

{
$this->result_page_number = (int)$a_result_page_number > 0 ? $a_result_page_number : 1;
}
ilShopSearchResult::setSearchType (   $_search_type)

Definition at line 52 of file class.ilShopSearchResult.php.

{
$this->search_type = $_search_type;
return $this;
}
ilShopSearchResult::setTopics (   $a_topics = array())

Definition at line 292 of file class.ilShopSearchResult.php.

{
$this->topics = $a_topics;
}

Field Documentation

ilShopSearchResult::$presentation_results = array()
protected

Definition at line 40 of file class.ilShopSearchResult.php.

Referenced by getResultsForPresentation().

ilShopSearchResult::$result_page_number = 0
protected

Definition at line 38 of file class.ilShopSearchResult.php.

Referenced by getResultPageNumber().

ilShopSearchResult::$search_type = ''
protected

Definition at line 41 of file class.ilShopSearchResult.php.

Referenced by getSearchType().

ilShopSearchResult::$topics = array()
protected

Definition at line 39 of file class.ilShopSearchResult.php.


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