24 private $_filteredResults = array();
26 private $_searchTotalResults;
28 private $_searchOffset = 0;
34 private $_usePersonalization;
37 public function __construct($term, $params = array(), $usePersonalization =
false)
40 $this->_params = $params;
41 $this->_usePersonalization = $usePersonalization;
52 while((count($this->_filteredResults) < $this->pageSize * $this->pageNumber) && $this->existsMore()){
53 $portion = $this->fetchPortion();
54 if($portion ===
false){
57 $this->_filteredResults =array_merge($this->_filteredResults, $portion) ;
60 $next = array_slice($this->_filteredResults, $this->pageSize * $this->pageNumber - $this->pageSize, $this->pageSize);
65 public function existsMore()
67 if($this->_searchTotalResults === null){
70 return $this->_searchTotalResults - $this->_searchOffset > 0 ||
71 $this->pageSize * $this->pageNumber < count($this->_filteredResults);
74 protected function fetchPortion(){
75 $response = $this->searchApi->search($this->_term,$this->_params, $this->_searchOffset, $this->pageSize);
76 $this->_searchOffset = $response[
'meta'][
'start'] + count($response[
'results']);
77 $this->_searchTotalResults = $response[
'meta'][
'totalhits'];
81 $results = array_values($response[
'results']);
86 if($this->_usePersonalization) {
87 $results = $this->_personalize($results);
92 private function _personalize($data)
95 $filters = Yii::app()->getModule(
'contentSource')->contentSource->personalisationFields;
96 foreach ($data as $key=>$resultItem) {
97 $persAttributes = array();
98 foreach ($filters as $filter) {
99 if (isset($resultItem[
'attributes'][$filter]) && trim($resultItem[
'attributes'][$filter])!=
'' && trim($resultItem[
'attributes'][$filter])!=
'NULL') {
100 $persAttributes = array_merge($persAttributes, explode(Yii::app()->getModule(
'search')->personalisationDelimiter, $resultItem[
'attributes'][$filter]));
104 if ( !Yii::app()->getModule(
'personalisation')->rule->checkAccess(Yii::app()->user->id, $persAttributes) ) {
106 Yii::trace(
'Skipped ' . $resultItem[
'contentid'].
' Permissions: '.implode(
',', $persAttributes),
'search.driver');