10fb48f94SSatoshi Sahara<?php 20fb48f94SSatoshi Sahara 30fb48f94SSatoshi Saharanamespace dokuwiki\Ui; 40fb48f94SSatoshi Sahara 50fb48f94SSatoshi Saharause dokuwiki\Extension\Event; 60fb48f94SSatoshi Saharause dokuwiki\Form\Form; 70fb48f94SSatoshi Sahara 80fb48f94SSatoshi Sahara/** 914548198SSatoshi Sahara * DokuWiki Index Interface 100fb48f94SSatoshi Sahara * 110fb48f94SSatoshi Sahara * @package dokuwiki\Ui 120fb48f94SSatoshi Sahara */ 130fb48f94SSatoshi Saharaclass Index extends Ui 140fb48f94SSatoshi Sahara{ 1514548198SSatoshi Sahara protected $ns; 1614548198SSatoshi Sahara 1714548198SSatoshi Sahara /** 1814548198SSatoshi Sahara * Index Ui constructor 1914548198SSatoshi Sahara * 2014548198SSatoshi Sahara * @param string $ns namespace 2114548198SSatoshi Sahara */ 2214548198SSatoshi Sahara public function __construct($ns = '') 2314548198SSatoshi Sahara { 2414548198SSatoshi Sahara $this->ns = $ns; 2514548198SSatoshi Sahara } 2614548198SSatoshi Sahara 2714548198SSatoshi Sahara 280fb48f94SSatoshi Sahara /** 290fb48f94SSatoshi Sahara * Display page index 300fb48f94SSatoshi Sahara * 310fb48f94SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 320fb48f94SSatoshi Sahara * 330fb48f94SSatoshi Sahara * @return void 340fb48f94SSatoshi Sahara */ 3514548198SSatoshi Sahara public function show() 360fb48f94SSatoshi Sahara { 37*d11e205cSSatoshi Sahara // print intro 38*d11e205cSSatoshi Sahara print p_locale_xhtml('index'); 39*d11e205cSSatoshi Sahara 40*d11e205cSSatoshi Sahara print $this->sitemap(); 41*d11e205cSSatoshi Sahara } 42*d11e205cSSatoshi Sahara 43*d11e205cSSatoshi Sahara /** 44*d11e205cSSatoshi Sahara * Build html of sitemap, unordered list of pages under the namespace 45*d11e205cSSatoshi Sahara * 46*d11e205cSSatoshi Sahara * @return string 47*d11e205cSSatoshi Sahara */ 48*d11e205cSSatoshi Sahara public function sitemap() 49*d11e205cSSatoshi Sahara { 500fb48f94SSatoshi Sahara global $conf; 510fb48f94SSatoshi Sahara global $ID; 520fb48f94SSatoshi Sahara 5314548198SSatoshi Sahara $ns = cleanID($this->ns); 540fb48f94SSatoshi Sahara if (empty($ns)){ 550fb48f94SSatoshi Sahara $ns = getNS($ID); 560fb48f94SSatoshi Sahara if ($ns === false) $ns = ''; 570fb48f94SSatoshi Sahara } 580fb48f94SSatoshi Sahara $ns = utf8_encodeFN(str_replace(':', '/', $ns)); 590fb48f94SSatoshi Sahara $data = array(); 600fb48f94SSatoshi Sahara search($data, $conf['datadir'], 'search_index', array('ns' => $ns)); 610fb48f94SSatoshi Sahara 62*d11e205cSSatoshi Sahara $html = '<div id="index__tree" class="index__tree">' 63*d11e205cSSatoshi Sahara . html_buildlist($data, 'idx', [$this,'formatListItem'], [$this,'tagListItem']) 64*d11e205cSSatoshi Sahara . '</div>'; 65*d11e205cSSatoshi Sahara return $html; 669c8632b4SSatoshi Sahara } 679c8632b4SSatoshi Sahara 689c8632b4SSatoshi Sahara /** 690fb48f94SSatoshi Sahara * Index item formatter 700fb48f94SSatoshi Sahara * 710fb48f94SSatoshi Sahara * User function for html_buildlist() 720fb48f94SSatoshi Sahara * 730fb48f94SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 740fb48f94SSatoshi Sahara * 750fb48f94SSatoshi Sahara * @param array $item 760fb48f94SSatoshi Sahara * @return string 770fb48f94SSatoshi Sahara */ 78f9ee77d6SSatoshi Sahara public function formatListItem($item) // RENAMED from html_list_index() 790fb48f94SSatoshi Sahara { 800fb48f94SSatoshi Sahara global $ID, $conf; 810fb48f94SSatoshi Sahara 820fb48f94SSatoshi Sahara // prevent searchbots needlessly following links 830fb48f94SSatoshi Sahara $nofollow = ($ID != $conf['start'] || $conf['sitemap']) ? 'rel="nofollow"' : ''; 840fb48f94SSatoshi Sahara 850fb48f94SSatoshi Sahara $html = ''; 860fb48f94SSatoshi Sahara $base = ':'.$item['id']; 870fb48f94SSatoshi Sahara $base = substr($base, strrpos($base,':') +1); 880fb48f94SSatoshi Sahara if ($item['type'] == 'd') { 890fb48f94SSatoshi Sahara // FS#2766, no need for search bots to follow namespace links in the index 900fb48f94SSatoshi Sahara $link = wl($ID, 'idx='. rawurlencode($item['id'])); 910fb48f94SSatoshi Sahara $html .= '<a href="'. $link .'" title="'. $item['id'] .'" class="idx_dir"' . $nofollow .'><strong>'; 920fb48f94SSatoshi Sahara $html .= $base; 930fb48f94SSatoshi Sahara $html .= '</strong></a>'; 940fb48f94SSatoshi Sahara } else { 950fb48f94SSatoshi Sahara // default is noNSorNS($id), but we want noNS($id) when useheading is off FS#2605 960fb48f94SSatoshi Sahara $html .= html_wikilink(':'.$item['id'], useHeading('navigation') ? null : noNS($item['id'])); 970fb48f94SSatoshi Sahara } 980fb48f94SSatoshi Sahara return $html; 990fb48f94SSatoshi Sahara } 1000fb48f94SSatoshi Sahara 1010fb48f94SSatoshi Sahara /** 1020fb48f94SSatoshi Sahara * Index List item 1030fb48f94SSatoshi Sahara * 1040fb48f94SSatoshi Sahara * This user function is used in html_buildlist to build the 1050fb48f94SSatoshi Sahara * <li> tags for namespaces when displaying the page index 1060fb48f94SSatoshi Sahara * it gives different classes to opened or closed "folders" 1070fb48f94SSatoshi Sahara * 1080fb48f94SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 1090fb48f94SSatoshi Sahara * 1100fb48f94SSatoshi Sahara * @param array $item 1110fb48f94SSatoshi Sahara * @return string html 1120fb48f94SSatoshi Sahara */ 113fbae750bSSatoshi Sahara public function tagListItem($item) // RENAMED from html_li_index() 1140fb48f94SSatoshi Sahara { 1150fb48f94SSatoshi Sahara global $INFO; 1160fb48f94SSatoshi Sahara global $ACT; 1170fb48f94SSatoshi Sahara 1180fb48f94SSatoshi Sahara $class = ''; 1190fb48f94SSatoshi Sahara $id = ''; 1200fb48f94SSatoshi Sahara 1210fb48f94SSatoshi Sahara if ($item['type'] == 'f') { 1220fb48f94SSatoshi Sahara // scroll to the current item 1230fb48f94SSatoshi Sahara if (isset($INFO) && $item['id'] == $INFO['id'] && $ACT == 'index') { 1240fb48f94SSatoshi Sahara $id = ' id="scroll__here"'; 1250fb48f94SSatoshi Sahara $class = ' bounce'; 1260fb48f94SSatoshi Sahara } 1270fb48f94SSatoshi Sahara return '<li class="level'.$item['level'].$class.'" '.$id.'>'; 1280fb48f94SSatoshi Sahara } elseif ($item['open']) { 1290fb48f94SSatoshi Sahara return '<li class="open">'; 1300fb48f94SSatoshi Sahara } else { 1310fb48f94SSatoshi Sahara return '<li class="closed">'; 1320fb48f94SSatoshi Sahara } 1330fb48f94SSatoshi Sahara } 1340fb48f94SSatoshi Sahara 1350fb48f94SSatoshi Sahara} 136