xref: /dokuwiki/inc/Ui/Index.php (revision 26dfc2323f8f70cb69aac4c8c51bf7997809f2ca)
10fb48f94SSatoshi Sahara<?php
20fb48f94SSatoshi Sahara
30fb48f94SSatoshi Saharanamespace dokuwiki\Ui;
40fb48f94SSatoshi Sahara
50fb48f94SSatoshi Sahara/**
614548198SSatoshi Sahara * DokuWiki Index Interface
70fb48f94SSatoshi Sahara *
80fb48f94SSatoshi Sahara * @package dokuwiki\Ui
90fb48f94SSatoshi Sahara */
100fb48f94SSatoshi Saharaclass Index extends Ui
110fb48f94SSatoshi Sahara{
1214548198SSatoshi Sahara    protected $ns;
1314548198SSatoshi Sahara
1414548198SSatoshi Sahara    /**
1514548198SSatoshi Sahara     * Index Ui constructor
1614548198SSatoshi Sahara     *
1714548198SSatoshi Sahara     * @param string $ns namespace
1814548198SSatoshi Sahara     */
1914548198SSatoshi Sahara    public function __construct($ns = '')
2014548198SSatoshi Sahara    {
2114548198SSatoshi Sahara        $this->ns = $ns;
2214548198SSatoshi Sahara    }
2314548198SSatoshi Sahara
2414548198SSatoshi Sahara
250fb48f94SSatoshi Sahara    /**
260fb48f94SSatoshi Sahara     * Display page index
270fb48f94SSatoshi Sahara     *
28e2d055f5SAndreas Gohr     * @return void
290fb48f94SSatoshi Sahara     * @author   Andreas Gohr <andi@splitbrain.org>
300fb48f94SSatoshi Sahara     *
310fb48f94SSatoshi Sahara     */
3214548198SSatoshi Sahara    public function show()
330fb48f94SSatoshi Sahara    {
34d11e205cSSatoshi Sahara        // print intro
35*26dfc232SAndreas Gohr        echo p_locale_xhtml('index');
36d11e205cSSatoshi Sahara
37*26dfc232SAndreas Gohr        echo $this->sitemap();
38d11e205cSSatoshi Sahara    }
39d11e205cSSatoshi Sahara
40d11e205cSSatoshi Sahara    /**
41d11e205cSSatoshi Sahara     * Build html of sitemap, unordered list of pages under the namespace
42d11e205cSSatoshi Sahara     *
43d11e205cSSatoshi Sahara     * @return string
44d11e205cSSatoshi Sahara     */
45d11e205cSSatoshi Sahara    public function sitemap()
46d11e205cSSatoshi Sahara    {
470fb48f94SSatoshi Sahara        global $conf;
480fb48f94SSatoshi Sahara        global $ID;
490fb48f94SSatoshi Sahara
5014548198SSatoshi Sahara        $ns = cleanID($this->ns);
510fb48f94SSatoshi Sahara        if (empty($ns)) {
520fb48f94SSatoshi Sahara            $ns = getNS($ID);
530fb48f94SSatoshi Sahara            if ($ns === false) $ns = '';
540fb48f94SSatoshi Sahara        }
550fb48f94SSatoshi Sahara        $ns = utf8_encodeFN(str_replace(':', '/', $ns));
56e2d055f5SAndreas Gohr        $data = [];
57e2d055f5SAndreas Gohr        search($data, $conf['datadir'], 'search_index', ['ns' => $ns]);
580fb48f94SSatoshi Sahara
5979a2d784SGerrit Uitslag        return '<div id="index__tree" class="index__tree">'
60d11e205cSSatoshi Sahara            . html_buildlist($data, 'idx', [$this, 'formatListItem'], [$this, 'tagListItem'])
61d11e205cSSatoshi Sahara            . '</div>';
629c8632b4SSatoshi Sahara    }
639c8632b4SSatoshi Sahara
649c8632b4SSatoshi Sahara    /**
650fb48f94SSatoshi Sahara     * Index item formatter
660fb48f94SSatoshi Sahara     *
670fb48f94SSatoshi Sahara     * User function for html_buildlist()
680fb48f94SSatoshi Sahara     *
690fb48f94SSatoshi Sahara     * @param array $item
700fb48f94SSatoshi Sahara     * @return string
71e2d055f5SAndreas Gohr     * @author Andreas Gohr <andi@splitbrain.org>
72e2d055f5SAndreas Gohr     *
730fb48f94SSatoshi Sahara     */
74f9ee77d6SSatoshi Sahara    public function formatListItem($item)    // RENAMED from html_list_index()
750fb48f94SSatoshi Sahara    {
760fb48f94SSatoshi Sahara        global $ID, $conf;
770fb48f94SSatoshi Sahara
780fb48f94SSatoshi Sahara        // prevent searchbots needlessly following links
790fb48f94SSatoshi Sahara        $nofollow = ($ID != $conf['start'] || $conf['sitemap']) ? 'rel="nofollow"' : '';
800fb48f94SSatoshi Sahara
810fb48f94SSatoshi Sahara        $html = '';
820fb48f94SSatoshi Sahara        $base = ':' . $item['id'];
830fb48f94SSatoshi Sahara        $base = substr($base, strrpos($base, ':') + 1);
840fb48f94SSatoshi Sahara        if ($item['type'] == 'd') {
850fb48f94SSatoshi Sahara            // FS#2766, no need for search bots to follow namespace links in the index
860fb48f94SSatoshi Sahara            $link = wl($ID, 'idx=' . rawurlencode($item['id']));
870fb48f94SSatoshi Sahara            $html .= '<a href="' . $link . '" title="' . $item['id'] . '" class="idx_dir"' . $nofollow . '><strong>';
880fb48f94SSatoshi Sahara            $html .= $base;
890fb48f94SSatoshi Sahara            $html .= '</strong></a>';
900fb48f94SSatoshi Sahara        } else {
910fb48f94SSatoshi Sahara            // default is noNSorNS($id), but we want noNS($id) when useheading is off FS#2605
920fb48f94SSatoshi Sahara            $html .= html_wikilink(':' . $item['id'], useHeading('navigation') ? null : noNS($item['id']));
930fb48f94SSatoshi Sahara        }
940fb48f94SSatoshi Sahara        return $html;
950fb48f94SSatoshi Sahara    }
960fb48f94SSatoshi Sahara
970fb48f94SSatoshi Sahara    /**
980fb48f94SSatoshi Sahara     * Index List item
990fb48f94SSatoshi Sahara     *
1000fb48f94SSatoshi Sahara     * This user function is used in html_buildlist to build the
1010fb48f94SSatoshi Sahara     * <li> tags for namespaces when displaying the page index
1020fb48f94SSatoshi Sahara     * it gives different classes to opened or closed "folders"
1030fb48f94SSatoshi Sahara     *
1040fb48f94SSatoshi Sahara     * @param array $item
1050fb48f94SSatoshi Sahara     * @return string html
106e2d055f5SAndreas Gohr     * @author Andreas Gohr <andi@splitbrain.org>
107e2d055f5SAndreas Gohr     *
1080fb48f94SSatoshi Sahara     */
109fbae750bSSatoshi Sahara    public function tagListItem($item)    // RENAMED from html_li_index()
1100fb48f94SSatoshi Sahara    {
1110fb48f94SSatoshi Sahara        global $INFO;
1120fb48f94SSatoshi Sahara        global $ACT;
1130fb48f94SSatoshi Sahara
1140fb48f94SSatoshi Sahara        $class = '';
1150fb48f94SSatoshi Sahara        $id = '';
1160fb48f94SSatoshi Sahara
1170fb48f94SSatoshi Sahara        if ($item['type'] == 'f') {
1180fb48f94SSatoshi Sahara            // scroll to the current item
1190fb48f94SSatoshi Sahara            if (isset($INFO) && $item['id'] == $INFO['id'] && $ACT == 'index') {
1200fb48f94SSatoshi Sahara                $id = ' id="scroll__here"';
1210fb48f94SSatoshi Sahara                $class = ' bounce';
1220fb48f94SSatoshi Sahara            }
1230fb48f94SSatoshi Sahara            return '<li class="level' . $item['level'] . $class . '" ' . $id . '>';
1240fb48f94SSatoshi Sahara        } elseif ($item['open']) {
1250fb48f94SSatoshi Sahara            return '<li class="open">';
1260fb48f94SSatoshi Sahara        } else {
1270fb48f94SSatoshi Sahara            return '<li class="closed">';
1280fb48f94SSatoshi Sahara        }
1290fb48f94SSatoshi Sahara    }
1300fb48f94SSatoshi Sahara}
131