[ Index ]

PHP Cross Reference of DokuWiki

title

Body

[close]

/inc/Menu/ -> MobileMenu.php (source)

   1  <?php
   2  
   3  namespace dokuwiki\Menu;
   4  
   5  use dokuwiki\Menu\Item\AbstractItem;
   6  
   7  /**
   8   * Class MobileMenu
   9   *
  10   * Note: this does not inherit from AbstractMenu because it is not working like the other
  11   * menus. This is a meta menu, aggregating the items from the other menus and offering a combined
  12   * view. The idea is to use this on mobile devices, thus the context is fixed to CTX_MOBILE
  13   */
  14  class MobileMenu implements MenuInterface
  15  {
  16      /**
  17       * Returns all items grouped by view
  18       *
  19       * @return AbstractItem[][]
  20       */
  21      public function getGroupedItems()
  22      {
  23          $pagemenu = new PageMenu(AbstractItem::CTX_MOBILE);
  24          $sitemenu = new SiteMenu(AbstractItem::CTX_MOBILE);
  25          $usermenu = new UserMenu(AbstractItem::CTX_MOBILE);
  26  
  27          return [
  28              'page' => $pagemenu->getItems(),
  29              'site' => $sitemenu->getItems(),
  30              'user' => $usermenu->getItems()
  31          ];
  32      }
  33  
  34      /**
  35       * Get all items in a flat array
  36       *
  37       * This returns the same format as AbstractMenu::getItems()
  38       *
  39       * @return AbstractItem[]
  40       */
  41      public function getItems()
  42      {
  43          $menu = $this->getGroupedItems();
  44          return array_merge(...array_values($menu));
  45      }
  46  
  47      /**
  48       * Print a dropdown menu with all DokuWiki actions
  49       *
  50       * Note: this will not use any pretty URLs
  51       *
  52       * @param string $empty empty option label
  53       * @param string $button submit button label
  54       * @return string
  55       */
  56      public function getDropdown($empty = '', $button = '&gt;')
  57      {
  58          global $ID;
  59          global $REV;
  60          /** @var string[] $lang */
  61          global $lang;
  62          global $INPUT;
  63  
  64          $html = '<form action="' . script() . '" method="get" accept-charset="utf-8">';
  65          $html .= '<div class="no">';
  66          $html .= '<input type="hidden" name="id" value="' . $ID . '" />';
  67          if ($REV) $html .= '<input type="hidden" name="rev" value="' . $REV . '" />';
  68          if ($INPUT->server->str('REMOTE_USER')) {
  69              $html .= '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
  70          }
  71  
  72          $html .= '<select name="do" class="edit quickselect" title="' . $lang['tools'] . '">';
  73          $html .= '<option value="">' . $empty . '</option>';
  74  
  75          foreach ($this->getGroupedItems() as $tools => $items) {
  76              if ($items !== []) {
  77                  $html .= '<optgroup label="' . $lang[$tools . '_tools'] . '">';
  78                  foreach ($items as $item) {
  79                      $params = $item->getParams();
  80                      $html .= '<option value="' . $params['do'] . '">';
  81                      $html .= hsc($item->getLabel());
  82                      $html .= '</option>';
  83                  }
  84                  $html .= '</optgroup>';
  85              }
  86          }
  87  
  88          $html .= '</select>';
  89          $html .= '<button type="submit">' . $button . '</button>';
  90          $html .= '</div>';
  91          $html .= '</form>';
  92  
  93          return $html;
  94      }
  95  }