'', 'include_self' => 0, 'noheader' => 0, 'page' => '[pagename]', 'description' => $this->getDescription(), 'reclimit' => 4, 'info' => false, 'direction' => 'back', 'firstreversed' => false, 'excludeunknown' => true, 'includepages' => '' // this doesn't yet work as expected ); } // info arg allows multiple columns // info=mtime,hits,summary,version,author,locked,minor // exclude arg allows multiple pagenames // exclude=HomePage,RecentChanges function recursivelyGetBackLinks($startpage, $pagearr, $level = '*', $reclimit = '***') { static $VisitedPages = array(); $startpagename = $startpage->getName(); //trigger_error("DEBUG: recursivelyGetBackLinks( $startpagename , $level )"); if ($level == $reclimit) return $pagearr; if (in_array($startpagename, $VisitedPages)) return $pagearr; array_push($VisitedPages, $startpagename); $pagelinks = $startpage->getLinks(); while ($link = $pagelinks->next()) { $linkpagename = $link->getName(); if (($linkpagename != $startpagename) && !preg_match("/$this->ExcludedPages/", $linkpagename)) { $pagearr[$level . " [$linkpagename]"] = $link; $pagearr = $this->recursivelyGetBackLinks($link, $pagearr, $level . '*', $reclimit); } } return $pagearr; } function recursivelyGetLinks($startpage, $pagearr, $level = '*', $reclimit = '***') { static $VisitedPages = array(); $startpagename = $startpage->getName(); //trigger_error("DEBUG: recursivelyGetLinks( $startpagename , $level )"); if ($level == $reclimit) return $pagearr; if (in_array($startpagename, $VisitedPages)) return $pagearr; array_push($VisitedPages, $startpagename); $reversed = (($this->firstreversed) && ($startpagename == $this->initialpage)); //trigger_error("DEBUG: \$reversed = $reversed"); $pagelinks = $startpage->getLinks($reversed); while ($link = $pagelinks->next()) { $linkpagename = $link->getName(); if (($linkpagename != $startpagename) && !preg_match("/$this->ExcludedPages/", $linkpagename)) { if (!$this->excludeunknown || $this->dbi->isWikiPage($linkpagename)) { $pagearr[$level . " [$linkpagename]"] = $link; $pagearr = $this->recursivelyGetLinks($link, $pagearr, $level . '*', $reclimit); } } } return $pagearr; } function run($dbi, $argstr, $request) { include_once('lib/BlockParser.php'); $args = $this->getArgs($argstr, $request, false); extract($args); if (!$page) return ''; $out = ''; $exclude = $exclude ? explode(",", $exclude) : array(); if (!$include_self) $exclude[] = $page; $this->ExcludedPages = "^(?:" . join("|", $exclude) . ")"; $this->_default_limit = str_pad('', 3, '*'); if (is_numeric($reclimit)) { if ($reclimit < 0) $reclimit = 0; if ($reclimit > 10) $reclimit = 10; $limit = str_pad('', $reclimit + 2, '*'); } else { $limit = '***'; } if (! $noheader) $out .= $description ." ". sprintf(_("(max. recursion level: %d)"), $reclimit) . ":\n\n"; $pagelist = new PageList($info, $exclude); $p = $dbi->getPage($page); $pagearr = array(); if ($direction == 'back') { $pagearr = $this->recursivelyGetBackLinks($p, $pagearr, "*", $limit); } else { $this->dbi = $dbi; $this->initialpage = $page; $this->firstreversed = $firstreversed; $this->excludeunknown = $excludeunknown; $pagearr = $this->recursivelyGetLinks($p, $pagearr, "*", $limit); } reset($pagearr); while (list($key, $link) = each($pagearr)) { if (!empty($includepages)) { // this doesn't work as expected $a = substr_count($key, '*'); $indenter = str_pad($nothing, $a); $out .= $indenter . 'getName(); if (is_string($includepages)) $out .= " " . $includepages; // args $out .= " ?>" . "\n"; } else { $out .= $key . "\n"; } } return TransformText($out, 1.0, $page /*cached or not cached?...*/); } }; // $Log: not supported by cvs2svn $ // Revision 1.8 2004/01/24 23:24:07 rurban // Patch by Alec Thomas, allows Perl regular expressions in SiteMap exclude lists. // exclude=WikiWikiWeb,(?:Category|Topic).* // It is backwards compatible unless old exclude lists, and therefore Wiki // page names, contain regular expression characters. // // Revision 1.7 2003/02/21 04:12:06 dairiki // Minor fixes for new cached markup. // // Revision 1.6 2003/01/18 22:08:01 carstenklapp // Code cleanup: // Reformatting & tabs to spaces; // Added copyleft, getVersion, getDescription, rcs_id. // // For emacs users // Local Variables: // mode: php // tab-width: 8 // c-basic-offset: 4 // c-hanging-comment-ender-p: nil // indent-tabs-mode: nil // End: ?>