OSDN Git Service

BugTrack2/369 Support PHP7 - Remove '& new Class' notation
[pukiwiki/pukiwiki.git] / plugin / map.inc.php
index e24c55b..39e83b1 100644 (file)
@@ -1,22 +1,27 @@
 <?php
 // PukiWiki - Yet another WikiWikiWeb clone.
-// $Id: map.inc.php,v 1.13 2005/01/08 11:35:37 henoheno Exp $
+// $Id: map.inc.php,v 1.18 2011/01/25 15:01:01 henoheno Exp $
+// Copyright (C) 2002-2005, 2007 PukiWiki Developers Team
+// License: GPL v2 or (at your option) any later version
 //
-// Site-map plugin
+// Site map plugin
 
 /*
- * ¥×¥é¥°¥¤¥ó map: ¥µ¥¤¥È¥Þ¥Ã¥×(¤Î¤è¤¦¤Ê¤â¤Î)¤òɽ¼¨
+ * プラグイン map: サイトマップ(のようなもの)を表示
  * Usage : http://.../pukiwiki.php?plugin=map
- * ¥Ñ¥é¥á¡¼¥¿
- *   &refer=¥Ú¡¼¥¸Ì¾
- *     µ¯ÅÀ¤È¤Ê¤ë¥Ú¡¼¥¸¤ò»ØÄê
+ * ã\83\91ã\83©ã\83¡ã\83¼ã\82¿
+ *   &refer=ページ名
+ *     起点となるページを指定
  *   &reverse=true
- *     ¤¢¤ë¥Ú¡¼¥¸¤¬¤É¤³¤«¤é¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë¤«¤ò°ìÍ÷¡£
+ *     あるページがどこからリンクされているかを一覧。
 */
 
+// Show $non_list files
+define('PLUGIN_MAP_SHOW_HIDDEN', 0); // 0, 1
+
 function plugin_map_action()
 {
-       global $vars, $whatsnew, $defaultpage;
+       global $vars, $whatsnew, $defaultpage, $non_list;
 
        $reverse = isset($vars['reverse']);
        $refer   = isset($vars['refer']) ? $vars['refer'] : '';
@@ -26,27 +31,29 @@ function plugin_map_action()
        $retval['msg']  = $reverse ? 'Relation map (link from)' : 'Relation map, from $1';
        $retval['body'] = '';
 
+       // Get pages
        $pages = array_values(array_diff(get_existpages(), array($whatsnew)));
-
-       $count = count($pages);
-       if ($count == 0) {
-               $retval['body'] = 'no pages.';
+       if (! PLUGIN_MAP_SHOW_HIDDEN)
+               $pages = array_diff($pages, preg_grep('/' . $non_list . '/', $pages));
+       if (empty($pages)) {
+               $retval['body'] = 'No pages.';
                return $retval;
+       } else {
+               $retval['body'] .= '<p>' . "\n" .  'Total: ' . count($pages) .
+                       ' page(s) on this site.' . "\n" . '</p>' . "\n";
        }
 
-       // ¥Ú¡¼¥¸¿ô
-       $retval['body'] .= '<p>' . "\n" .
-               'Total: ' . $count . ' page(s) on this site.' . "\n" .
-               '</p>' . "\n";
-
-       // ¥Ä¥ê¡¼ºîÀ®
+       // Generate a tree
        $nodes = array();
        foreach ($pages as $page)
-               $nodes[$page] = & new MapNode($page, $reverse);
+               $nodes[$page] = new MapNode($page, $reverse);
+
+       // Node not found: Because of filtererd by $non_list
+       if (! isset($nodes[$refer])) $vars['refer'] = $refer = $defaultpage;
 
        if ($reverse) {
                $keys = array_keys($nodes);
-               sort($keys);
+               sort($keys, SORT_STRING);
                $alone = array();
                $retval['body'] .= '<ul>' . "\n";
                foreach ($keys as $page) {
@@ -69,9 +76,9 @@ function plugin_map_action()
                $nodes[$refer]->chain($nodes);
                $retval['body'] .= '<ul>' . "\n" . $nodes[$refer]->toString($nodes) . '</ul>' . "\n";
                $retval['body'] .= '<hr />' . "\n" .
-                       '<p>Not related from ' . htmlspecialchars($refer) . '</p>' . "\n";
+                       '<p>Not related from ' . htmlsc($refer) . '</p>' . "\n";
                $keys = array_keys($nodes);
-               sort($keys);
+               sort($keys, SORT_STRING);
                $retval['body'] .= '<ul>' . "\n";
                foreach ($keys as $page) {
                        if (! $nodes[$page]->done) {
@@ -81,7 +88,8 @@ function plugin_map_action()
                }
                $retval['body'] .= '</ul>' . "\n";
        }
-       // ½ªÎ»
+
+       // 終了
        return $retval;
 }
 
@@ -94,10 +102,11 @@ class MapNode
        var $rels;
        var $parent_id = 0;
        var $done;
+       var $hide_pattern;
 
        function MapNode($page, $reverse = FALSE)
        {
-               global $script;
+               global $script, $non_list;
 
                static $id = 0;
 
@@ -107,6 +116,7 @@ class MapNode
                $this->done    = ! $this->is_page;
                $this->link    = make_pagelink($page);
                $this->id      = ++$id;
+               $this->hide_pattern = '/' . $non_list . '/';
 
                $this->rels = $reverse ? $this->ref() : $this->rel();
                $mark       = $reverse ? '' : '<sup>+</sup>';
@@ -115,6 +125,13 @@ class MapNode
                        $mark . '</a>';
        }
 
+       function hide(& $pages)
+       {
+               if (! PLUGIN_MAP_SHOW_HIDDEN)
+                       $pages = array_diff($pages, preg_grep($this->hide_pattern, $pages));
+               return $pages;
+       }
+
        function ref()
        {
                $refs = array();
@@ -124,7 +141,8 @@ class MapNode
                                $ref = explode("\t", $line);
                                $refs[] = $ref[0];
                        }
-                       sort($refs);
+                       $this->hide($refs);
+                       sort($refs, SORT_STRING);
                }
                return $refs;
        }
@@ -136,7 +154,8 @@ class MapNode
                if (file_exists($file)) {
                        $data = file($file);
                        $rels = explode("\t", trim($data[0]));
-                       sort($rels);
+                       $this->hide($rels);
+                       sort($rels, SORT_STRING);
                }
                return $rels;
        }
@@ -149,7 +168,7 @@ class MapNode
                if ($this->parent_id == 0) $this->parent_id = -1;
 
                foreach ($this->rels as $page) {
-                       if (! isset($nodes[$page])) $nodes[$page] = new MapNode($page);
+                       if (! isset($nodes[$page])) $nodes[$page] = new MapNode($page);
                        if ($nodes[$page]->parent_id == 0)
                                $nodes[$page]->parent_id = $this->id;
                }
@@ -184,4 +203,4 @@ class MapNode
                return $retval;
        }
 }
-?>
+