From 5fe1c79b85420dcc1a76620190141760ba7efca8 Mon Sep 17 00:00:00 2001 From: rurban Date: Mon, 6 Sep 2004 08:25:01 +0000 Subject: [PATCH] new plugin-list syntax git-svn-id: svn://svn.code.sf.net/p/phpwiki/code/trunk@3924 96ab9672-09ca-45d6-a79d-3d69d39ca109 --- lib/WikiPlugin.php | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/lib/WikiPlugin.php b/lib/WikiPlugin.php index 28b67cd0a..3e7272040 100644 --- a/lib/WikiPlugin.php +++ b/lib/WikiPlugin.php @@ -1,5 +1,5 @@ expandArg($args[$arg], $request); } @@ -154,8 +154,24 @@ class WikiPlugin $args = array(); $defaults = array(); - if (empty($argstr)) + if (empty($argstr)) return array($args,$defaults); + // handle plugin-list seperately + $plugin_p = '<'.'\?plugin-list\s+\w+.*\?'.'>'; + if (preg_match("/^($arg_p) $opt_ws ($op_p) $opt_ws ($plugin_p) $opt_ws/x", $argstr, $m)) { + @ list(,$arg, $op, $plugin_val) = $m; + $argstr = substr($argstr, strlen($m[0])); + $loader = new WikiPluginLoader(); + $markup = null; + $basepage = null; + $val = $loader->expandPI($plugin_val, $GLOBALS['request'], $markup, $basepage); + if ($op == '=') { + $args[$arg] = $val; // comma delimited pagenames or array()? + } else { + assert($op == '||='); + $defaults[$arg] = $val; + } + } while (preg_match("/^$opt_ws $argspec_p $opt_ws/x", $argstr, $m)) { @ list(,$arg,$op,$qq_val,$q_val,$gt_val,$word_val) = $m; $argstr = substr($argstr, strlen($m[0])); @@ -198,6 +214,20 @@ class WikiPlugin $argstr), E_USER_NOTICE); } + /* handle plugin-list argument: use run(). */ + function makeList($plugin_args, $request, $basepage) { + $dbi = $request->getDbh(); + $pagelist = $this->run($dbi, $plugin_args, $request, $basepage); + $list = array(); + if (is_object($pagelist) and isa($pagelist, 'PageList')) { + // table or list? + foreach ($pagelist->_pages as $page) { + $list[] = $page->_page->_pagename; + } + } + return $list; + } + function getDefaultLinkArguments() { return array('targetpage' => $this->getName(), 'linktext' => $this->getName(), @@ -392,6 +422,8 @@ class WikiPluginLoader { '%weak' => true)); } return $plugin->run($dbi, $plugin_args, $request, $basepage); + case 'plugin-list': + return $plugin->makeList($plugin_args, $request, $basepage); case 'plugin-link': return $plugin->makeLink($plugin_args, $request); case 'plugin-form': @@ -411,7 +443,7 @@ class WikiPluginLoader { } function parsePI($pi) { - if (!preg_match('/^\s*<\?(plugin(?:-form|-link)?)\s+(\w+)\s*(.*?)\s*\?>\s*$/s', $pi, $m)) + if (!preg_match('/^\s*<\?(plugin(?:-form|-link|-list)?)\s+(\w+)\s*(.*?)\s*\?>\s*$/s', $pi, $m)) return $this->_error(sprintf("Bad %s", 'PI')); list(, $pi_name, $plugin_name, $plugin_args) = $m; -- 2.45.0