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