<?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'] : '';
$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) {
$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) {
}
$retval['body'] .= '</ul>' . "\n";
}
- // ½ªÎ»
+
+ // 終了
return $retval;
}
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;
$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>';
$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();
$ref = explode("\t", $line);
$refs[] = $ref[0];
}
- sort($refs);
+ $this->hide($refs);
+ sort($refs, SORT_STRING);
}
return $refs;
}
if (file_exists($file)) {
$data = file($file);
$rels = explode("\t", trim($data[0]));
- sort($rels);
+ $this->hide($rels);
+ sort($rels, SORT_STRING);
}
return $rels;
}
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;
}
return $retval;
}
}
-?>
+