1c3437056SNickeau<?php 2c3437056SNickeau 3c3437056SNickeau 4c3437056SNickeaunamespace ComboStrap; 5c3437056SNickeau 6c3437056SNickeau 7c3437056SNickeauclass Index 8c3437056SNickeau{ 9c3437056SNickeau /** 10c3437056SNickeau * @var Index 11c3437056SNickeau */ 12c3437056SNickeau private static $index; 13c3437056SNickeau 14c3437056SNickeau /** 15c3437056SNickeau * @var \dokuwiki\Search\Indexer 16c3437056SNickeau */ 17c3437056SNickeau private $indexer; 18c3437056SNickeau 19c3437056SNickeau 20c3437056SNickeau /** 21c3437056SNickeau * Index constructor. 22c3437056SNickeau */ 23c3437056SNickeau public function __construct() 24c3437056SNickeau { 25c3437056SNickeau $this->indexer = idx_get_indexer(); 26c3437056SNickeau } 27c3437056SNickeau 28c3437056SNickeau public static function getOrCreate(): Index 29c3437056SNickeau { 30c3437056SNickeau if (self::$index === null) { 31c3437056SNickeau self::$index = new Index(); 32c3437056SNickeau } 33c3437056SNickeau return self::$index; 34c3437056SNickeau } 35c3437056SNickeau 36*04fd306cSNickeau public function getPagesForMedia(WikiPath $media): array 37c3437056SNickeau { 38*04fd306cSNickeau $dokuwikiId = $media->getWikiId(); 39c3437056SNickeau return $this->indexer->lookupKey('relation_media', $dokuwikiId); 40c3437056SNickeau } 41c3437056SNickeau 42c3437056SNickeau /** 43c3437056SNickeau * Return a list of page id that have the same last name 44c3437056SNickeau * 45*04fd306cSNickeau * @param MarkupPath $pageToMatch 46*04fd306cSNickeau * @return MarkupPath[] 47c3437056SNickeau */ 48*04fd306cSNickeau public function getPagesWithSameLastName(MarkupPath $pageToMatch): array 49c3437056SNickeau { 50c3437056SNickeau /** 51c3437056SNickeau * * A shortcut to: 52c3437056SNickeau * ``` 53c3437056SNickeau * $pagesWithSameName = ft_pageLookup($pageName); 54c3437056SNickeau * ``` 55c3437056SNickeau * where {@link ft_pageLookup()} 56c3437056SNickeau */ 57c3437056SNickeau 58c3437056SNickeau // There is two much pages with the start name 59*04fd306cSNickeau $lastName = $pageToMatch->getPathObject()->getLastName(); 60*04fd306cSNickeau if ($lastName === Site::getIndexPageName()) { 61c3437056SNickeau return []; 62c3437056SNickeau } 63c3437056SNickeau 64*04fd306cSNickeau $pageIdList = $this->indexer->getPages(); 65c3437056SNickeau 66*04fd306cSNickeau $matchedPages = []; 67*04fd306cSNickeau foreach ($pageIdList as $pageId) { 68*04fd306cSNickeau if ($pageToMatch->getWikiId() === $pageId) { 69c3437056SNickeau continue; 70c3437056SNickeau } 71*04fd306cSNickeau $actualPage = MarkupPath::createMarkupFromId($pageId); 72*04fd306cSNickeau if ($actualPage->getPathObject()->getLastName() === $lastName) { 73*04fd306cSNickeau $matchedPages[] = $actualPage; 74c3437056SNickeau } 75c3437056SNickeau } 76*04fd306cSNickeau return $matchedPages; 77c3437056SNickeau 78c3437056SNickeau } 79c3437056SNickeau 80*04fd306cSNickeau public function deletePage(MarkupPath $page) 81c3437056SNickeau { 82c3437056SNickeau 83*04fd306cSNickeau $this->indexer->deletePage($page->getWikiId()); 84c3437056SNickeau 85c3437056SNickeau } 86c3437056SNickeau} 87