openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

SearchIndex.class.php (2863B)


      1 <?php
      2 namespace cms\macros\macro;
      3 
      4 use cms\generator\PageContext;
      5 use cms\generator\ValueContext;
      6 use cms\generator\ValueGenerator;
      7 use cms\model\Element;
      8 use cms\model\Folder;
      9 use cms\model\Page;
     10 use cms\model\Project;
     11 use util\json\JSON;
     12 use util\Macro;
     13 
     14 
     15 /**
     16  * Creates a search index for all pages in this project.
     17  * @author Jan Dankert
     18  */
     19 class SearchIndex extends Macro
     20 {
     21     /**
     22      * Beschreibung dieser Klasse
     23      *
     24      * @type String
     25      */
     26     var $description = '';
     27 
     28     public $maxLength = 300;
     29 
     30 
     31     /**
     32      * Creates a search index for alle pages in the current project.
     33      */
     34     function execute()
     35     {
     36         $searchIndex = array();
     37 
     38         $project = new Project( $this->getPage()->projectid );
     39 
     40         $f = new Folder( $project->getRootObjectId() );
     41         $f->load();
     42 
     43         foreach ( array_merge( [$f],$f->getAllSubFolderIds() ) as $fid) {
     44 
     45             $tf = new Folder($fid);
     46             $tf->load();
     47             foreach( $tf->getPages() as $pageObjectId )
     48             {
     49                 $page = new Page( $pageObjectId );
     50                 $page->load();
     51 
     52                 // Generating all values
     53                 $values = [];
     54 				/** @var Element $element */
     55 				foreach($page->getTemplate()->getWritableElements() as $element ) {
     56 					$pageContext = clone $this->pageContext;
     57 					$pageContext->objectId = $pageObjectId;
     58                 	$valueContext = new ValueContext($pageContext);
     59                 	$valueContext->elementid = $element->elementid;
     60                 	$generator = new ValueGenerator( $valueContext );
     61                 	$values[] = $generator->getCache()->get();
     62 					//$values[] = print_r($valueContext,true);
     63 				}
     64 
     65                 $name = $page->getNameForLanguage( $this->pageContext->languageId );
     66 
     67                 $searchIndex[] = array(
     68                     'id'      => $pageObjectId,
     69                     'title'   => $name->name,
     70                     'filename'=> $page->filename,
     71                     'url'     => $this->pathToObject( $pageObjectId ),
     72                     'content' => $this->truncate(array_reduce(
     73                         $values,
     74                         function($act, $value)
     75                         {
     76                             return $act.' '.$value;
     77                         },
     78                         ''
     79                     ))
     80                 );
     81             }
     82         }
     83 
     84         // Output search index as JSON
     85         echo JSON::encode( $searchIndex );
     86     }
     87 
     88 
     89     private function truncate( $text) {
     90         $text = str_replace('&quot;','',$text);
     91         $text = str_replace('&lt;'  ,'',$text);
     92         $text = str_replace('&rt;'  ,'',$text);
     93         $text = strtr($text,';,:.\'"','      ');
     94         $text = strtr($text,'  ',' ');
     95         if   ( strlen($text) > $this->maxLength )
     96             $text = mb_substr($text,0,$this->maxLength,'UTF-8');
     97 
     98         return $text;
     99     }
    100 
    101 }