Amiro.CMS API Reference
Amiro.Ru / Manual
Loading search...

Source for file PlgAJAXResp_SearchHistory.php

Documentation is available at PlgAJAXResp_SearchHistory.php

  • <?php
  • /**
  •  * @copyright  Amiro.CMS. All rights reserved.
  •  * @category   Plugin
  •  * @package    Plugin_AJAXResponder
  •  * @since      5.10.0
  •  * @filesource
  •  * @version    $Id$
  •  */
  •  
  • /**
  •  * AJAX Responder SearchHistory plugin JSON generation class.
  •  *
  •  * @package    Plugin_AJAXResponder
  •  * @subpackage Controller
  •  */
  •  
  •     protected $oModel;
  •  
  •     /**
  •      * Maximum result number from search history table
  •      *
  •      * @var int 
  •      */
  •     private $iMaxHistoryResults 5;
  •  
  •     private function createFulltextFilter($fieldName$phrase){
  •         $aWords preg_split('/a-zёа-я0-9.-/ui'$phrase);
  •         $aParts array();
  •         foreach($aWords as $word){
  •             if(!empty($word)){
  •                 $aParts['+' $word '*';
  •             }
  •         }
  •         return DB_Query::getSnippet("AND MATCH(%s)  AGAINST(%s IN BOOLEAN MODE)")
  •             ->plain($fieldName)
  •             ->implode($aParts);
  •     }
  •  
  •     /**
  •      * Adds extra list model initializations
  •      *
  •      * @return AMI_ModTableList 
  •      */
  •     protected function initModel(){
  •         $this->oModel = $oModelList parent::initModel();
  •         $this->oModel->setInvalidColumnExclusion(false);
  •  
  •         $sPhrase $this->oRequest->get('phrase''');
  •         if(!empty($sPhrase)){
  •             if($this->modId == 'search_history'){
  •                 $oModelList->addWhereDef($this->createFulltextFilter('query'$sPhrase));
  •                 $oModelList->addWhereDef('AND count_pages>0');
  •             }else if($this->modId == 'search'){
  •                 $oModelList->addWhereDef($this->createFulltextFilter('words'$sPhrase));
  •             }
  •         }
  •  
  •         return $oModelList;
  •     }
  •  
  •     /**
  •      * Returns list data
  •      *
  •      * @return array 
  •      * @see    PlgAJAXResp_ListView::get()
  •      */
  •     public function getResponse(){
  •         $aSearchHistoryData $this->oView->get();
  •  
  •         $aHasPhrases array();
  •         $aTmp $aSearchHistoryData;
  •         $aSearchHistoryData array();
  •         for($i 0$i sizeof($aTmp)$i++){
  •             $phrase mb_strtolower($aTmp[$i]['query']);
  •             if(!isset($aHasPhrases[$phrase])){
  •                 $aSearchHistoryData[$aTmp[$i];
  •                 $aHasPhrases[$phrasetrue;
  •                 if(sizeof($aSearchHistoryData>= $this->iMaxHistoryResults){
  •                     break;
  •                 }
  •             }
  •         }
  •  
  •         $iLimit $this->oRequest->get('limit'sizeof($aSearchHistoryData);
  •         if($iLimit 0){
  •             $this->oRequest->set('limit'$iLimit);
  •  
  •             // Init search module
  •             $this->modId = 'search';
  •             $this->oRequest->set('order''id');
  •             $this->initStateAndView();
  •             $oModelList $this->initModel();
  •             $this->oView->setModel($oModelList);
  •  
  •             $aSearchData $this->oView->get();
  •         }else{
  •             $aSearchData array();
  •         }
  •  
  •         $aResult array(
  •             'list' => array_merge($aSearchHistoryData$aSearchData)
  •         );
  •  
  •         return $aResult;
  •     }
  • }
  •  
  • /**
  •  * Plugin SearchHistory module model (server-side plugin context).
  •  *
  •  * @package    Plugin_AJAXResponder
  •  * @subpackage Model
  •  */
  •     /**
  •      * PlgAJAXResp_iState::getDateFieldName() implementation
  •      *
  •      * Returns item date field name or empty string
  •      *
  •      * @return string 
  •      * @see    PlgAJAXResp::initModel()
  •      */
  •     public function getDateFieldName(){
  •         return '';
  •     }
  • }
  •  
  • /**
  •  * Plugin SearchHistory module list view (server-side plugin context).
  •  *
  •  * @package    Plugin_AJAXResponder
  •  * @subpackage View
  •  */
  •     /**
  •      * Return columns for list model
  •      *
  •      * @return array 
  •      */
  •     protected function getColumns(){
  •         $aCols array(
  •             'id''query'
  •         );
  •         return $aCols parent::getColumns();
  •     }
  • }