\ntotal: $count page(s) on this site.\n

\n"; // ツリー作成 $nodes = array(); foreach ($pages as $page) { $nodes[$page] = & new MapNode($page,$reverse); } if ($reverse) { $keys = array_keys($nodes); sort($keys); $alone = array(); $retval['body'] .= "\n"; if (count($alone)) { $retval['body'] .= "
\n

no link from anywhere in this site.

\n"; $retval['body'] .= "\n"; } } else { $nodes[$refer]->chain($nodes); $retval['body'] .= "\n"; $retval['body'] .= "

not related from ".htmlspecialchars($refer)."

\n"; $keys = array_keys($nodes); sort($keys); $retval['body'] .= "\n"; } // 終了 return $retval; } class MapNode { var $page; var $is_page; var $link; var $id; var $rels; var $parent_id = 0; var $done; function MapNode($page,$reverse=FALSE) { global $script; static $id = 0; $this->page = $page; $this->is_page = is_page($page); $this->cache = CACHE_DIR.encode($page); $this->done = !$this->is_page; $this->link = make_pagelink($page); $this->id = ++$id; $this->rels = $reverse ? $this->ref() : $this->rel(); $mark = $reverse ? '' : '+'; $this->mark = "id}\" href=\"$script?plugin=map&refer=".rawurlencode($this->page)."\">$mark"; } function ref() { $refs = array(); if (file_exists($this->cache.'.ref')) { foreach (file($this->cache.'.ref') as $line) { $ref = explode("\t",$line); $refs[] = $ref[0]; } sort($refs); } return $refs; } function rel() { $rels = array(); if (file_exists($this->cache.'.rel')) { $file = file($this->cache.'.rel'); $rels = explode("\t",trim($file[0])); sort($rels); } return $rels; } function chain(&$nodes) { if ($this->done) { return; } $this->done = TRUE; if ($this->parent_id == 0) { $this->parent_id = -1; } foreach ($this->rels as $page) { if (!array_key_exists($page,$nodes)) { $nodes[$page] = &new MapNode($page); } if ($nodes[$page]->parent_id == 0) { $nodes[$page]->parent_id = $this->id; } } foreach ($this->rels as $page) { $nodes[$page]->chain($nodes); } } function toString(&$nodes,$level=1,$parent_id=-1) { $indent = str_repeat(' ',$level); if (!$this->is_page) { return $indent."
  • {$this->link}
  • \n"; } else if ($this->parent_id != $parent_id) { return $indent."
  • {$this->link}id}\">...
  • \n"; } $retval = $indent."
  • {$this->mark}{$this->link}\n"; if (count($this->rels)) { $childs = array(); $level += 2; foreach ($this->rels as $page) { if ($this->parent_id != $nodes[$page]->id) { $childs[] = $nodes[$page]->toString($nodes,$level,$this->id); } } if (count($childs)) { $retval .= $indent." \n"; } } $retval .= $indent."
  • \n"; return $retval; } } ?>