[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/Ui/ -> Index.php (source)

   1  <?php
   2  
   3  namespace dokuwiki\Ui;
   4  
   5  /**
   6   * DokuWiki Index Interface
   7   *
   8   * @package dokuwiki\Ui
   9   */
  10  class Index extends Ui
  11  {
  12      protected $ns;
  13  
  14      /**
  15       * Index Ui constructor
  16       *
  17       * @param string $ns namespace
  18       */
  19      public function __construct($ns = '')
  20      {
  21          $this->ns = $ns;
  22      }
  23  
  24  
  25      /**
  26       * Display page index
  27       *
  28       * @return void
  29       * @author   Andreas Gohr <andi@splitbrain.org>
  30       *
  31       */
  32      public function show()
  33      {
  34          // print intro
  35          echo p_locale_xhtml('index');
  36  
  37          echo $this->sitemap();
  38      }
  39  
  40      /**
  41       * Build html of sitemap, unordered list of pages under the namespace
  42       *
  43       * @return string
  44       */
  45      public function sitemap()
  46      {
  47          global $conf;
  48          global $ID;
  49  
  50          $ns = cleanID($this->ns);
  51          if (empty($ns)) {
  52              $ns = getNS($ID);
  53              if ($ns === false) $ns = '';
  54          }
  55          $ns = utf8_encodeFN(str_replace(':', '/', $ns));
  56          $data = [];
  57          search($data, $conf['datadir'], 'search_index', ['ns' => $ns]);
  58  
  59          return '<div id="index__tree" class="index__tree">'
  60              . html_buildlist($data, 'idx', [$this, 'formatListItem'], [$this, 'tagListItem'])
  61              . '</div>';
  62      }
  63  
  64      /**
  65       * Index item formatter
  66       *
  67       * User function for html_buildlist()
  68       *
  69       * @param array $item
  70       * @return string
  71       * @author Andreas Gohr <andi@splitbrain.org>
  72       *
  73       */
  74      public function formatListItem($item)    // RENAMED from html_list_index()
  75      {
  76          global $ID, $conf;
  77  
  78          // prevent searchbots needlessly following links
  79          $nofollow = ($ID != $conf['start'] || $conf['sitemap']) ? 'rel="nofollow"' : '';
  80  
  81          $html = '';
  82          $base = ':' . $item['id'];
  83          $base = substr($base, strrpos($base, ':') + 1);
  84          if ($item['type'] == 'd') {
  85              // FS#2766, no need for search bots to follow namespace links in the index
  86              $link = wl($ID, 'idx=' . rawurlencode($item['id']));
  87              $html .= '<a href="' . $link . '" title="' . $item['id'] . '" class="idx_dir"' . $nofollow . '><strong>';
  88              $html .= $base;
  89              $html .= '</strong></a>';
  90          } else {
  91              // default is noNSorNS($id), but we want noNS($id) when useheading is off FS#2605
  92              $html .= html_wikilink(':' . $item['id'], useHeading('navigation') ? null : noNS($item['id']));
  93          }
  94          return $html;
  95      }
  96  
  97      /**
  98       * Index List item
  99       *
 100       * This user function is used in html_buildlist to build the
 101       * <li> tags for namespaces when displaying the page index
 102       * it gives different classes to opened or closed "folders"
 103       *
 104       * @param array $item
 105       * @return string html
 106       * @author Andreas Gohr <andi@splitbrain.org>
 107       *
 108       */
 109      public function tagListItem($item)    // RENAMED from html_li_index()
 110      {
 111          global $INFO;
 112          global $ACT;
 113  
 114          $class = '';
 115          $id = '';
 116  
 117          if ($item['type'] == 'f') {
 118              // scroll to the current item
 119              if (isset($INFO) && $item['id'] == $INFO['id'] && $ACT == 'index') {
 120                  $id = ' id="scroll__here"';
 121                  $class = ' bounce';
 122              }
 123              return '<li class="level' . $item['level'] . $class . '" ' . $id . '>';
 124          } elseif ($item['open']) {
 125              return '<li class="open">';
 126          } else {
 127              return '<li class="closed">';
 128          }
 129      }
 130  }