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 * 280fb48f94SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 290fb48f94SSatoshi Sahara * 300fb48f94SSatoshi Sahara * @return void 310fb48f94SSatoshi Sahara */ 3214548198SSatoshi Sahara public function show() 330fb48f94SSatoshi Sahara { 34d11e205cSSatoshi Sahara // print intro 35d11e205cSSatoshi Sahara print p_locale_xhtml('index'); 36d11e205cSSatoshi Sahara 37d11e205cSSatoshi Sahara print $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)); 560fb48f94SSatoshi Sahara $data = array(); 570fb48f94SSatoshi Sahara search($data, $conf['datadir'], 'search_index', array('ns' => $ns)); 580fb48f94SSatoshi Sahara 59*79a2d784SGerrit 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 * @author Andreas Gohr <andi@splitbrain.org> 700fb48f94SSatoshi Sahara * 710fb48f94SSatoshi Sahara * @param array $item 720fb48f94SSatoshi Sahara * @return string 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 * @author Andreas Gohr <andi@splitbrain.org> 1050fb48f94SSatoshi Sahara * 1060fb48f94SSatoshi Sahara * @param array $item 1070fb48f94SSatoshi Sahara * @return string html 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 1310fb48f94SSatoshi Sahara} 132