2 /////////////////////////////////////////////////
3 // PukiWiki - Yet another WikiWikiWeb clone.
5 // $Id: map.inc.php,v 1.10 2003/04/17 02:09:01 arino Exp $
10 ¥µ¥¤¥È¥Þ¥Ã¥×(¤Î¤è¤¦¤Ê¤â¤Î)¤òɽ¼¨
12 Usage : http://.../pukiwiki.php?plugin=map
17 µ¯ÅÀ¤È¤Ê¤ë¥Ú¡¼¥¸¤ò»ØÄê
20 ¤¢¤ë¥Ú¡¼¥¸¤¬¤É¤³¤«¤é¥ê¥ó¥¯¤µ¤ì¤Æ¤¤¤ë¤«¤ò°ìÍ÷¡£
24 function plugin_map_action()
26 global $vars,$whatsnew,$defaultpage;
28 $reverse = array_key_exists('reverse',$vars);
30 $refer = array_key_exists('refer',$vars) ? $vars['refer'] : '';
32 if ($refer == '' or !is_page($refer))
34 $vars['refer'] = $refer = $defaultpage;
37 $retval['msg'] = $reverse ? 'Relation map (link from)' : 'Relation map, from $1';
40 $pages = array_values(array_diff(get_existpages(),array($whatsnew)));
42 $count = count($pages);
46 $retval['body'] = 'no pages.';
51 $retval['body'] .= "<p>\ntotal: $count page(s) on this site.\n</p>\n";
55 foreach ($pages as $page)
57 $nodes[$page] = & new MapNode($page,$reverse);
62 $keys = array_keys($nodes);
65 $retval['body'] .= "<ul>\n";
66 foreach ($keys as $page)
68 if (count($nodes[$page]->rels))
70 $retval['body'] .= $nodes[$page]->toString($nodes,1,$nodes[$page]->parent_id);
77 $retval['body'] .= "</ul>\n";
80 $retval['body'] .= "<hr />\n<p>no link from anywhere in this site.</p>\n";
81 $retval['body'] .= "<ul>\n";
82 foreach ($alone as $page)
84 $retval['body'] .= $nodes[$page]->toString($nodes,1,$nodes[$page]->parent_id);
86 $retval['body'] .= "</ul>\n";
91 $nodes[$refer]->chain($nodes);
92 $retval['body'] .= "<ul>\n".$nodes[$refer]->toString($nodes)."</ul>\n";
93 $retval['body'] .= "<hr /><p>not related from ".htmlspecialchars($refer)."</p>\n";
94 $keys = array_keys($nodes);
96 $retval['body'] .= "<ul>\n";
97 foreach ($keys as $page)
99 if (!$nodes[$page]->done)
101 $nodes[$page]->chain($nodes);
102 $retval['body'] .= $nodes[$page]->toString($nodes,1,$nodes[$page]->parent_id);
105 $retval['body'] .= "</ul>\n";
121 function MapNode($page,$reverse=FALSE)
128 $this->is_page = is_page($page);
129 $this->cache = CACHE_DIR.encode($page);
130 $this->done = !$this->is_page;
131 $this->link = make_pagelink($page);
134 $this->rels = $reverse ? $this->ref() : $this->rel();
135 $mark = $reverse ? '' : '<sup>+</sup>';
136 $this->mark = "<a id=\"rel_{$this->id}\" href=\"$script?plugin=map&refer=".rawurlencode($this->page)."\">$mark</a>";
141 if (file_exists($this->cache.'.ref'))
143 foreach (file($this->cache.'.ref') as $line)
145 $ref = explode("\t",$line);
155 if (file_exists($this->cache.'.rel'))
157 $file = file($this->cache.'.rel');
158 $rels = explode("\t",trim($file[0]));
163 function chain(&$nodes)
171 if ($this->parent_id == 0)
173 $this->parent_id = -1;
176 foreach ($this->rels as $page)
178 if (!array_key_exists($page,$nodes))
180 $nodes[$page] = &new MapNode($page);
182 if ($nodes[$page]->parent_id == 0)
184 $nodes[$page]->parent_id = $this->id;
187 foreach ($this->rels as $page)
189 $nodes[$page]->chain($nodes);
192 function toString(&$nodes,$level=1,$parent_id=-1)
194 $indent = str_repeat(' ',$level);
198 return $indent."<li>{$this->link}</li>\n";
200 else if ($this->parent_id != $parent_id)
202 return $indent."<li>{$this->link}<a href=\"#rel_{$this->id}\">...</a></li>\n";
204 $retval = $indent."<li>{$this->mark}{$this->link}\n";
205 if (count($this->rels))
209 foreach ($this->rels as $page)
211 if ($this->parent_id != $nodes[$page]->id)
213 $childs[] = $nodes[$page]->toString($nodes,$level,$this->id);
218 $retval .= $indent." <ul>\n".join('',$childs).$indent." </ul>\n";
221 $retval .= $indent."</li>\n";