xref: /plugin/combo/ComboStrap/Index.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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