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/** 9*14548198SSatoshi Sahara * DokuWiki Index Interface 100fb48f94SSatoshi Sahara * 110fb48f94SSatoshi Sahara * @package dokuwiki\Ui 120fb48f94SSatoshi Sahara */ 130fb48f94SSatoshi Saharaclass Index extends Ui 140fb48f94SSatoshi Sahara{ 15*14548198SSatoshi Sahara protected $ns; 16*14548198SSatoshi Sahara 17*14548198SSatoshi Sahara /** 18*14548198SSatoshi Sahara * Index Ui constructor 19*14548198SSatoshi Sahara * 20*14548198SSatoshi Sahara * @param string $ns namespace 21*14548198SSatoshi Sahara */ 22*14548198SSatoshi Sahara public function __construct($ns = '') 23*14548198SSatoshi Sahara { 24*14548198SSatoshi Sahara $this->ns = $ns; 25*14548198SSatoshi Sahara } 26*14548198SSatoshi Sahara 27*14548198SSatoshi Sahara 280fb48f94SSatoshi Sahara /** 290fb48f94SSatoshi Sahara * Display page index 300fb48f94SSatoshi Sahara * 310fb48f94SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 320fb48f94SSatoshi Sahara * 330fb48f94SSatoshi Sahara * @param string $ns 340fb48f94SSatoshi Sahara * @return void 350fb48f94SSatoshi Sahara */ 36*14548198SSatoshi Sahara public function show() 370fb48f94SSatoshi Sahara { 380fb48f94SSatoshi Sahara global $conf; 390fb48f94SSatoshi Sahara global $ID; 400fb48f94SSatoshi Sahara 41*14548198SSatoshi Sahara $ns = cleanID($this->ns); 420fb48f94SSatoshi Sahara if (empty($ns)){ 430fb48f94SSatoshi Sahara $ns = getNS($ID); 440fb48f94SSatoshi Sahara if ($ns === false) $ns = ''; 450fb48f94SSatoshi Sahara } 460fb48f94SSatoshi Sahara $ns = utf8_encodeFN(str_replace(':', '/', $ns)); 470fb48f94SSatoshi Sahara 480fb48f94SSatoshi Sahara // print intro 490fb48f94SSatoshi Sahara print p_locale_xhtml('index'); 500fb48f94SSatoshi Sahara 510fb48f94SSatoshi Sahara print '<div id="index__tree" class="index__tree">'; 520fb48f94SSatoshi Sahara 530fb48f94SSatoshi Sahara $data = array(); 540fb48f94SSatoshi Sahara search($data, $conf['datadir'], 'search_index', array('ns' => $ns)); 55fbae750bSSatoshi Sahara print html_buildlist($data, 'idx', [$this,'formatListItem'], [$this,'tagListItem']); 560fb48f94SSatoshi Sahara 570fb48f94SSatoshi Sahara print '</div>'.DOKU_LF; 580fb48f94SSatoshi Sahara } 590fb48f94SSatoshi Sahara 600fb48f94SSatoshi Sahara /** 610fb48f94SSatoshi Sahara * Index item formatter 620fb48f94SSatoshi Sahara * 630fb48f94SSatoshi Sahara * User function for html_buildlist() 640fb48f94SSatoshi Sahara * 650fb48f94SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 660fb48f94SSatoshi Sahara * 670fb48f94SSatoshi Sahara * @param array $item 680fb48f94SSatoshi Sahara * @return string 690fb48f94SSatoshi Sahara */ 70f9ee77d6SSatoshi Sahara public function formatListItem($item) // RENAMED from html_list_index() 710fb48f94SSatoshi Sahara { 720fb48f94SSatoshi Sahara global $ID, $conf; 730fb48f94SSatoshi Sahara 740fb48f94SSatoshi Sahara // prevent searchbots needlessly following links 750fb48f94SSatoshi Sahara $nofollow = ($ID != $conf['start'] || $conf['sitemap']) ? 'rel="nofollow"' : ''; 760fb48f94SSatoshi Sahara 770fb48f94SSatoshi Sahara $html = ''; 780fb48f94SSatoshi Sahara $base = ':'.$item['id']; 790fb48f94SSatoshi Sahara $base = substr($base, strrpos($base,':') +1); 800fb48f94SSatoshi Sahara if ($item['type'] == 'd') { 810fb48f94SSatoshi Sahara // FS#2766, no need for search bots to follow namespace links in the index 820fb48f94SSatoshi Sahara $link = wl($ID, 'idx='. rawurlencode($item['id'])); 830fb48f94SSatoshi Sahara $html .= '<a href="'. $link .'" title="'. $item['id'] .'" class="idx_dir"' . $nofollow .'><strong>'; 840fb48f94SSatoshi Sahara $html .= $base; 850fb48f94SSatoshi Sahara $html .= '</strong></a>'; 860fb48f94SSatoshi Sahara } else { 870fb48f94SSatoshi Sahara // default is noNSorNS($id), but we want noNS($id) when useheading is off FS#2605 880fb48f94SSatoshi Sahara $html .= html_wikilink(':'.$item['id'], useHeading('navigation') ? null : noNS($item['id'])); 890fb48f94SSatoshi Sahara } 900fb48f94SSatoshi Sahara return $html; 910fb48f94SSatoshi Sahara } 920fb48f94SSatoshi Sahara 930fb48f94SSatoshi Sahara /** 940fb48f94SSatoshi Sahara * Index List item 950fb48f94SSatoshi Sahara * 960fb48f94SSatoshi Sahara * This user function is used in html_buildlist to build the 970fb48f94SSatoshi Sahara * <li> tags for namespaces when displaying the page index 980fb48f94SSatoshi Sahara * it gives different classes to opened or closed "folders" 990fb48f94SSatoshi Sahara * 1000fb48f94SSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 1010fb48f94SSatoshi Sahara * 1020fb48f94SSatoshi Sahara * @param array $item 1030fb48f94SSatoshi Sahara * @return string html 1040fb48f94SSatoshi Sahara */ 105fbae750bSSatoshi Sahara public function tagListItem($item) // RENAMED from html_li_index() 1060fb48f94SSatoshi Sahara { 1070fb48f94SSatoshi Sahara global $INFO; 1080fb48f94SSatoshi Sahara global $ACT; 1090fb48f94SSatoshi Sahara 1100fb48f94SSatoshi Sahara $class = ''; 1110fb48f94SSatoshi Sahara $id = ''; 1120fb48f94SSatoshi Sahara 1130fb48f94SSatoshi Sahara if ($item['type'] == 'f') { 1140fb48f94SSatoshi Sahara // scroll to the current item 1150fb48f94SSatoshi Sahara if (isset($INFO) && $item['id'] == $INFO['id'] && $ACT == 'index') { 1160fb48f94SSatoshi Sahara $id = ' id="scroll__here"'; 1170fb48f94SSatoshi Sahara $class = ' bounce'; 1180fb48f94SSatoshi Sahara } 1190fb48f94SSatoshi Sahara return '<li class="level'.$item['level'].$class.'" '.$id.'>'; 1200fb48f94SSatoshi Sahara } elseif ($item['open']) { 1210fb48f94SSatoshi Sahara return '<li class="open">'; 1220fb48f94SSatoshi Sahara } else { 1230fb48f94SSatoshi Sahara return '<li class="closed">'; 1240fb48f94SSatoshi Sahara } 1250fb48f94SSatoshi Sahara } 1260fb48f94SSatoshi Sahara 1270fb48f94SSatoshi Sahara} 128