From: Geoffrey T. D. <da...@us...> - 2003-02-21 22:59:04
|
Update of /cvsroot/phpwiki/phpwiki/lib In directory sc8-pr-cvs1:/tmp/cvs-serv26261/lib Modified Files: WikiPlugin.php Template.php Log Message: Add new argument $basepage to WikiPlugin::run() and WikiPluginLoader::expandPI(). Plugins need to know what page they were invoked from so that they can handle relative page links (like [/Subpage]) correctly. ($request->getArg('pagename') is not always the right page to use --- think included pages...) Many plugins don't need the $basepage, in which case, I think they can just ignore the extra argument. (I don't think PHP will generate any warnings.) Also: deleted <?plugin-head?> code. It's not needed any more, now that we always cache output. The FrameInclude plugin seems broken now, though I'm not convinced it's my fault. If it is, sorry... (I'll try to look at it a bit more within a few days, to see if I can figure out the problem.) Index: WikiPlugin.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/WikiPlugin.php,v retrieving revision 1.30 retrieving revision 1.31 diff -u -2 -b -p -d -r1.30 -r1.31 --- WikiPlugin.php 16 Feb 2003 20:04:46 -0000 1.30 +++ WikiPlugin.php 21 Feb 2003 22:58:57 -0000 1.31 @@ -31,5 +31,5 @@ class WikiPlugin // FIXME: args? - function run ($dbi, $argstr, &$request) { + function run ($dbi, $argstr, &$request, $basepage) { trigger_error("WikiPlugin::run: pure virtual function", E_USER_ERROR); @@ -273,5 +273,5 @@ class WikiPluginLoader { var $_errors; - function expandPI($pi, &$request) { + 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')); @@ -307,5 +307,5 @@ class WikiPluginLoader { '%weak' => true)); } - return $plugin->run($dbi, $plugin_args, $request); + return $plugin->run($dbi, $plugin_args, $request, $basepage); case 'plugin-link': return $plugin->makeLink($plugin_args, $request); @@ -313,19 +313,4 @@ class WikiPluginLoader { return $plugin->makeForm($plugin_args, $request); } - } - - // Special treatment. Only called by Template.php:GeneratePage - function expandPI_head($pi, $request) { - if (!preg_match('/^\s*<\?plugin-head\s+(\w+)\s*(.*?)\s*\?>\s*$/s', $pi, $m)) - return $this->_error(sprintf("Bad %s", 'PI')); - - list(, $plugin_name, $plugin_args) = $m; - $plugin = $this->getPlugin($plugin_name); - if (!is_object($plugin)) { - return new HtmlElement('p', array('class' => 'plugin-error'), - $this->getErrorDetail()); - } - $dbi = $request->getDbh(); - return $plugin->run($dbi, $plugin_args, $request); } Index: Template.php =================================================================== RCS file: /cvsroot/phpwiki/phpwiki/lib/Template.php,v retrieving revision 1.47 retrieving revision 1.48 diff -u -2 -b -p -d -r1.47 -r1.48 --- Template.php 21 Feb 2003 04:22:54 -0000 1.47 +++ Template.php 21 Feb 2003 22:58:58 -0000 1.48 @@ -16,4 +16,5 @@ class Template $this->_request = &$request; $this->_name = $name; + $this->_basepage = $request->getArg('pagename'); $file = $Theme->findTemplate($name); @@ -60,5 +61,5 @@ class Template $loader = new WikiPluginLoader; - $this->_print($loader->expandPI($pi, $this->_request)); + $this->_print($loader->expandPI($pi, $this->_request, $this->_basepage)); } @@ -213,21 +214,8 @@ function GeneratePage($content, $title, printXML(new Template($frame, $request, $args)); $request->setArg('framesrc',false); - } else { - // Early plugin-head check: - // head plugins must consist of a single line at the VERY FIRST LINE in the content. - // This is a hack, but it works fast enough. - $len = strlen('<?plugin-head'); - if (($request->getArg('action') == 'browse') and - $page_revision and - ($text = &$page_revision->getPackedContent()) and - substr($text,0,$len) == '<?plugin-head') - { - include_once("lib/WikiPlugin.php"); - $loader = new WikiPluginLoader(); - return $loader->expandPI_head($text,$request); - } else { - printXML(new Template('html', $request, $args)); - } + return; } + + printXML(new Template('html', $request, $args)); } |