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 3604fd306cSNickeau public function getPagesForMedia(WikiPath $media): array 37c3437056SNickeau { 3804fd306cSNickeau $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 * 4504fd306cSNickeau * @param MarkupPath $pageToMatch 4604fd306cSNickeau * @return MarkupPath[] 47c3437056SNickeau */ 4804fd306cSNickeau 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 58*ea801fd8Sgerardnico try { 59*ea801fd8Sgerardnico $lastNameToFind = $pageToMatch->getPathObject()->getLastNameWithoutExtension(); 60*ea801fd8Sgerardnico $wikiIdToFind = $pageToMatch->getWikiId(); 61*ea801fd8Sgerardnico } catch (ExceptionNotFound|ExceptionBadArgument $e) { 62*ea801fd8Sgerardnico return []; 63*ea801fd8Sgerardnico } 64*ea801fd8Sgerardnico 65c3437056SNickeau // There is two much pages with the start name 66*ea801fd8Sgerardnico if ($lastNameToFind === Site::getIndexPageName()) { 67c3437056SNickeau return []; 68c3437056SNickeau } 69c3437056SNickeau 7004fd306cSNickeau $pageIdList = $this->indexer->getPages(); 71c3437056SNickeau 7204fd306cSNickeau $matchedPages = []; 7304fd306cSNickeau foreach ($pageIdList as $pageId) { 74*ea801fd8Sgerardnico if ($wikiIdToFind === $pageId) { 75*ea801fd8Sgerardnico // don't return the page to find in the result 76c3437056SNickeau continue; 77c3437056SNickeau } 78*ea801fd8Sgerardnico $actualPage = WikiPath::createMarkupPathFromId($pageId); 79*ea801fd8Sgerardnico try { 80*ea801fd8Sgerardnico if ($actualPage->getLastNameWithoutExtension() === $lastNameToFind) { 81*ea801fd8Sgerardnico $matchedPages[] = MarkupPath::createPageFromPathObject($actualPage); 82*ea801fd8Sgerardnico } 83*ea801fd8Sgerardnico } catch (ExceptionNotFound $e) { 84*ea801fd8Sgerardnico // root, should not happen 85c3437056SNickeau } 86c3437056SNickeau } 8704fd306cSNickeau return $matchedPages; 88c3437056SNickeau 89c3437056SNickeau } 90c3437056SNickeau 9104fd306cSNickeau public function deletePage(MarkupPath $page) 92c3437056SNickeau { 93c3437056SNickeau 9404fd306cSNickeau $this->indexer->deletePage($page->getWikiId()); 95c3437056SNickeau 96c3437056SNickeau } 97c3437056SNickeau} 98