OSDN Git Service

BugTrack/2525 Support make_link
[pukiwiki/pukiwiki.git] / plugin / menu.inc.php
1 <?php
2 // PukiWiki - Yet another WikiWikiWeb clone.
3 // menu.inc.php
4 // Copyright 2003-2018 PukiWiki Development Team
5 // License: GPL v2 or (at your option) any later version
6 //
7 // Menu plugin
8
9 // Use Submenu if true
10 define('MENU_ENABLE_SUBMENU', FALSE);
11
12 // Name of Submenu
13 define('MENU_SUBMENUBAR', 'MenuBar');
14
15 function plugin_menu_convert()
16 {
17         global $vars, $menubar;
18         static $menu = NULL;
19
20         $num = func_num_args();
21         if ($num > 0) {
22                 // Try to change default 'MenuBar' page name (only)
23                 if ($num > 1)       return '#menu(): Zero or One argument needed';
24                 if ($menu !== NULL) return '#menu(): Already set: ' . htmlsc($menu);
25                 $args = func_get_args();
26                 if (! is_page($args[0])) {
27                         return '#menu(): No such page: ' . htmlsc($args[0]);
28                 } else {
29                         $menu = $args[0]; // Set
30                         return '';
31                 }
32
33         } else {
34                 // Output menubar page data
35                 $page = ($menu === NULL) ? $menubar : $menu;
36
37                 if (MENU_ENABLE_SUBMENU) {
38                         $path = explode('/', strip_bracket($vars['page']));
39                         while(! empty($path)) {
40                                 $_page = join('/', $path) . '/' . MENU_SUBMENUBAR;
41                                 if (is_page($_page)) {
42                                         $page = $_page;
43                                         break;
44                                 }
45                                 array_pop($path);
46                         }
47                 }
48
49                 if (! is_page($page)) {
50                         return '';
51                 } else if ($vars['page'] === $page) {
52                         return '<!-- #menu(): You already view ' . htmlsc($page) . ' -->';
53                 } else if (!is_page_readable($page)) {
54                         return '#menu(): ' . htmlsc($page) . ' is not readable';
55                 } else {
56                         // Cut fixed anchors
57                         $menutext = preg_replace('/^(\*{1,3}.*)\[#[A-Za-z][\w-]+\](.*)$/m', '$1$2', get_source($page));
58                         return convert_html($menutext);
59                 }
60         }
61 }