From 07bd596f2059e5c9c9c6530502948e64d884dc38 Mon Sep 17 00:00:00 2001 From: dairiki Date: Thu, 13 Mar 2003 18:57:56 +0000 Subject: [PATCH] Hack so that (when using the IncludePage plugin) the including page shows up in the BackLinks of the included page. git-svn-id: svn://svn.code.sf.net/p/phpwiki/code/trunk@2720 96ab9672-09ca-45d6-a79d-3d69d39ca109 --- lib/CachedMarkup.php | 51 ++++++++++++++++++++++-------- lib/WikiPlugin.php | 63 ++++++++++++++++++++++++++++++++------ lib/plugin/IncludePage.php | 27 +++++++++++++--- 3 files changed, 116 insertions(+), 25 deletions(-) diff --git a/lib/CachedMarkup.php b/lib/CachedMarkup.php index 5ec69a93f..53f357ee0 100644 --- a/lib/CachedMarkup.php +++ b/lib/CachedMarkup.php @@ -1,4 +1,4 @@ - * * This file is part of PhpWiki. @@ -65,13 +65,20 @@ class CacheableMarkup extends XmlContent { * A list of wiki page names (strings). */ function getWikiPageLinks() { + include_once('lib/WikiPlugin.php'); + $ploader = new WikiPluginLoader(); + $links = array(); - foreach ($this->_content as $link) { - if (! isa($link, 'Cached_WikiLink')) - continue; - if (($pagename = $link->getPagename($this->_basepage))) + foreach ($this->_content as $item) { + if (!isa($item, 'Cached_DynamicContent')) + continue; + + if (!($item_links = $item->getWikiPageLinks($this->_basepage))) + continue; + foreach ($item_links as $pagename) $links[$pagename] = 1; - } + } + return array_keys($links); } @@ -222,6 +229,10 @@ class Cached_DynamicContent { function expand($basepage) { trigger_error("Pure virtual", E_USER_ERROR); } + + function getWikiPageLinks($basepage) { + return false; + } } class XmlRpc_LinkInfo { @@ -273,6 +284,10 @@ class Cached_WikiLink extends Cached_Link { return $page->name; } + function getWikiPageLinks($basepage) { + return array($this->getPagename($basepage)); + } + function _getName($basepage) { return $this->getPagename($basepage); } @@ -409,12 +424,7 @@ class Cached_PluginInvocation extends Cached_DynamicContent { } function expand($basepage) { - static $loader = false; - - if (!$loader) { - include_once('lib/WikiPlugin.php'); - $loader = new WikiPluginLoader; - } + $loader = &$this->_getLoader(); $xml = HTML::div(array('class' => 'plugin'), $loader->expandPI($this->_pi, $GLOBALS['request'], $basepage)); @@ -431,6 +441,23 @@ class Cached_PluginInvocation extends Cached_DynamicContent { function asString() { return $this->_pi; } + + + function getWikiPageLinks($basepage) { + $loader = &$this->_getLoader(); + + return $loader->getWikiPageLinks($this->_pi, $basepage); + } + + function _getLoader() { + static $loader = false; + + if (!$loader) { + include_once('lib/WikiPlugin.php'); + $loader = new WikiPluginLoader; + } + return $loader; + } } // (c-file-style: "gnu") diff --git a/lib/WikiPlugin.php b/lib/WikiPlugin.php index eef2cd96f..01f621079 100644 --- a/lib/WikiPlugin.php +++ b/lib/WikiPlugin.php @@ -1,5 +1,5 @@ getDefaultArguments(); @@ -68,14 +93,15 @@ class WikiPlugin foreach ($defaults as $arg => $default_val) { if (isset($argstr_args[$arg])) $args[$arg] = $argstr_args[$arg]; - elseif ( ($argval = $request->getArg($arg)) !== false ) + elseif ( $request and ($argval = $request->getArg($arg)) !== false ) $args[$arg] = $argval; elseif (isset($argstr_defaults[$arg])) $args[$arg] = (string) $argstr_defaults[$arg]; else $args[$arg] = $default_val; - $args[$arg] = $this->expandArg($args[$arg], $request); + if ($request) + $args[$arg] = $this->expandArg($args[$arg], $request); unset($argstr_args[$arg]); unset($argstr_defaults[$arg]); @@ -94,7 +120,6 @@ class WikiPlugin $argval); } - function parseArgStr($argstr) { $arg_p = '\w+'; $op_p = '(?:\|\|)?='; @@ -273,11 +298,10 @@ class WikiPluginLoader { var $_errors; function expandPI($pi, &$request, $basepage=false) { - if (!preg_match('/^\s*<\?(plugin(?:-form|-link)?)\s+(\w+)\s*(.*?)\s*\?>\s*$/s', $pi, $m)) - return $this->_error(sprintf("Bad %s", 'PI')); + if (!($ppi = $this->parsePi($pi))) + return false; + list($pi_name, $plugin, $plugin_args) = $ppi; - list(, $pi_name, $plugin_name, $plugin_args) = $m; - $plugin = $this->getPlugin($plugin_name, $pi); if (!is_object($plugin)) { return new HtmlElement($pi_name == 'plugin-link' ? 'span' : 'p', array('class' => 'plugin-error'), @@ -314,6 +338,27 @@ class WikiPluginLoader { } } + function getWikiPageLinks($pi, $basepage) { + if (!($ppi = $this->parsePi($pi))) + return false; + list($pi_name, $plugin, $plugin_args) = $ppi; + if (!is_object($plugin)) + return false; + if ($pi_name != 'plugin') + return false; + return $plugin->getWikiPageLinks($plugin_args, $basepage); + } + + function parsePI($pi) { + if (!preg_match('/^\s*<\?(plugin(?:-form|-link)?)\s+(\w+)\s*(.*?)\s*\?>\s*$/s', $pi, $m)) + return $this->_error(sprintf("Bad %s", 'PI')); + + list(, $pi_name, $plugin_name, $plugin_args) = $m; + $plugin = $this->getPlugin($plugin_name, $pi); + + return array($pi_name, $plugin, $plugin_args); + } + function getPlugin($plugin_name, $pi) { global $ErrorManager; diff --git a/lib/plugin/IncludePage.php b/lib/plugin/IncludePage.php index 1105784d3..d00b6c13e 100644 --- a/lib/plugin/IncludePage.php +++ b/lib/plugin/IncludePage.php @@ -1,5 +1,5 @@ "), $mesg)); } - function run($dbi, $argstr, $request) { + function getWikiPageLinks($argstr, $basepage) { + extract($this->getArgs($argstr)); + print "PAGE: $page
\n"; + if ($page) { + // Expand relative page names. + $page = new WikiPageName($page, $basepage); + } + if (!$page or !$page->name) + return false; + return array($page->name); + } + + function run($dbi, $argstr, $request, $basepage) { extract($this->getArgs($argstr, $request)); - + if ($page) { + // Expand relative page names. + $page = new WikiPageName($page, $basepage); + $page = $page->name; + } if (!$page) { return $this->error(_("no page specified")); } @@ -176,6 +192,9 @@ extends WikiPlugin // $Log: not supported by cvs2svn $ +// Revision 1.21 2003/02/21 04:12:06 dairiki +// Minor fixes for new cached markup. +// // Revision 1.20 2003/01/18 21:41:02 carstenklapp // Code cleanup: // Reformatting & tabs to spaces; -- 2.45.0