2 rcs_id('$Id: WikiAdminSelect.php,v 1.6 2004-01-26 19:15:29 rurban Exp $');
4 Copyright 2002 $ThePhpWikiProgrammingTeam
6 This file is part of PhpWiki.
8 PhpWiki is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 PhpWiki is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with PhpWiki; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 * Allows selection of multiple pages which get passed to other
25 * WikiAdmin plugins then. Then do Rename, Remove, Chmod, Chown, ...
27 * Usage: <?plugin WikiAdminSelect?>
28 * Author: Reini Urban <rurban@x-ray.at>
31 * Just a framework, nothing more.
32 * Future versions will support PagePermissions.
34 // maybe display more attributes with this class...
35 require_once('lib/PageList.php');
37 class WikiPlugin_WikiAdminSelect
41 return _("WikiAdminSelect");
44 function getDescription() {
45 return _("Allows selection of multiple pages which get passed to other WikiAdmin plugins.");
48 function getVersion() {
49 return preg_replace("/[Revision: $]/", '',
53 function getDefaultArguments() {
54 return array('s' => '*',
61 function collectPages(&$list, &$dbi) {
62 $allPages = $dbi->getAllPages();
63 while ($pagehandle = $allPages->next()) {
64 $pagename = $pagehandle->getName();
65 if (empty($list[$pagename]))
70 function run($dbi, $argstr, $request) {
71 $args = $this->getArgs($argstr, $request);
72 if (!empty($args['only']))
73 $only = explodePageList($args['only']);
76 if (!empty($args['exclude']))
77 $exclude = explodePageList($args['exclude']);
80 $info = $args['info'];
81 $this->debug = $args['debug'];
82 if (!empty($request->getArg['s']))
83 $args['s'] = $request->getArg['s'];
84 if (!empty($args['s'])) {
86 $sl = explodePageList($args['s']);
87 $this->_list = array();
89 $request->setArg('verify',1);
90 foreach ($sl as $name) {
91 $this->_list[$name] = 1;
96 $this->_list = array();
98 $this->debug = $args['debug'];
99 // array_multisort($this->_list, SORT_NUMERIC, SORT_DESC);
100 $pagename = $request->getArg('pagename');
101 // GetUrlToSelf() with all given params
102 //$uri = $GLOBALS['HTTP_SERVER_VARS']['REQUEST_URI']; // without s would be better.
103 $uri = $request->getURLtoSelf(false, array('verify'));
104 $form = HTML::form(array('action' => $uri, 'method' => 'POST'));
105 if ($request->getArg('submit') == 'WikiAdminSelect')
108 $p = $request->getArg('p');
109 //$p = @$GLOBALS['HTTP_POST_VARS']['p'];
110 $form->pushContent(HTML::p(array('class' => 'wikitext'), _("Select: "),
111 HTML::input(array('type' => 'text',
114 HTML::input(array('type' => 'submit',
115 'name' => 'WikiAdminSelect',
116 'value' => _("Go")))));
117 if ($request->isPost() && $request->getArg('verify') && !empty($p)) {
118 // List all selected pages again.
119 foreach ($p as $page => $name) {
120 $this->_list[$name] = 1;
122 } elseif ($request->isPost() && $request->_user->isAdmin()
124 && $request->getArg('action') == 'WikiAdminSelect') {
125 // handle external plugin
126 $l = new WikiPluginLoader();
127 $plugin_action = $request->getArg('submit');
128 $plugin = $l->getPlugin($plugin_action);
131 foreach ($p as $page => $name) {
132 $plugin_args = "run_page=$name";
133 $request->setArg($plugin_action, 1);
134 $request->setArg('p', array($page => $name));
135 $action_result = $plugin->run($dbi, $plugin_args, $request);
136 $ul->pushContent(HTML::li(fmt("Selected page '%s' passed to '%s'.",
138 $ul->pushContent(HTML::ul(HTML::li($action_result)));
140 } elseif (empty($args['s'])) {
141 // List all pages to select from.
142 $this->collectPages($this->_list, $dbi);
144 $pagelist = new PageList_Selectable($info
145 ? 'checkbox,' . $info
146 : 'checkbox', $exclude);
147 $pagelist->addPageList($this->_list);
148 $form->pushContent($pagelist->getContent());
149 foreach ($_GET as $k => $v) {
150 if (!in_array($k,array('s','WikiAdminSelect','action')))
151 $form->pushContent(HiddenInputs(array($k => $v))); // debugging params, ...
153 if (! $request->getArg('verify')) {
154 $form->pushContent(HTML::input(array('type' => 'hidden',
156 'value' => 'verify')));
157 $form->pushContent(Button('submit:verify', _("Select pages"),
159 Button('submit:cancel', _("Cancel"), 'button'));
162 $form->pushContent(HTML::input(array('type' => 'hidden',
164 'value' => 'WikiAdminSelect'))
166 // Add the Buttons for all registered WikiAdmin plugins
167 $plugin_dir = 'lib/plugin';
168 if (defined('PHPWIKI_DIR'))
169 $plugin_dir = PHPWIKI_DIR . "/$plugin_dir";
170 $fs = new fileSet($plugin_dir, 'WikiAdmin*.php');
171 $actions = $fs->getFiles();
172 foreach ($actions as $f) {
173 $f = preg_replace('/.php$/','', $f);
174 $s = preg_replace('/^WikiAdmin/','', $f);
175 $form->pushContent(Button("submit:$f", _($s), "wikiadmin"));
176 $form->pushContent($Theme->getButtonSeparator());
178 $form->pushContent(Button('submit:cancel', _("Cancel"), 'button'));
180 if (! $request->getArg('select')) {
183 ; //return $action_result;
188 // $Log: not supported by cvs2svn $
189 // Revision 1.5 2003/02/24 19:38:04 dairiki
190 // Get rid of unused method Request::debugVars().
192 // Revision 1.4 2003/02/24 01:36:27 dairiki
193 // Don't use PHPWIKI_DIR unless it's defined.
194 // (Also typo/bugfix in SystemInfo plugin.)
196 // Revision 1.3 2003/02/22 20:49:56 dairiki
197 // Fixes for "Call-time pass by reference has been deprecated" errors.
199 // Revision 1.2 2003/01/18 22:14:29 carstenklapp
201 // Reformatting & tabs to spaces;
202 // Added copyleft, getVersion, getDescription, rcs_id.
209 // c-hanging-comment-ender-p: nil
210 // indent-tabs-mode: nil