2 rcs_id('$Id: WikiAdminUtils.php,v 1.11 2004-05-27 17:49:06 rurban Exp $');
4 Copyright 2003 $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
25 class WikiPlugin_WikiAdminUtils
29 return _("WikiAdminUtils");
32 function getDescription () {
33 return _("Miscellaneous utility functions of use to the administrator.");
36 function getVersion() {
37 return preg_replace("/[Revision: $]/", '',
38 "\$Revision: 1.11 $");
41 function getDefaultArguments() {
42 return array('action' => '',
47 function run($dbi, $argstr, &$request, $basepage) {
48 $args = $this->getArgs($argstr, $request);
49 $args['action'] = strtolower($args['action']);
53 $this->error("No action specified");
54 if (!($default_label = $this->_getLabel($action)))
55 $this->error("Bad action");
56 if ($request->getArg('action') != 'browse')
57 return $this->disabled("(action != 'browse')");
59 $posted = $request->getArg('wikiadminutils');
60 $request->setArg('wikiadminutils', false);
62 if ($request->isPost()) {
63 $user = $request->getUser();
64 if (!$user->isAdmin()) {
65 $request->_notAuthorized(WIKIAUTH_ADMIN);
66 return $this->error(_("You must be an administrator to use this plugin."));
68 return $this->do_action($request, $posted);
72 $label = $default_label;
74 return $this->_makeButton($request, $args, $label);
77 function _makeButton(&$request, $args, $label) {
78 $args['return_url'] = $request->getURLtoSelf();
79 return HTML::form(array('action' => $request->getPostURL(),
81 HTML::p(Button('submit:', $label, 'wikiadmin')),
82 HiddenInputs($args, 'wikiadminutils'),
83 HiddenInputs(array('require_authority_for_post' =>
85 HiddenInputs($request->getArgs()));
88 function do_action(&$request, $args) {
89 $method = strtolower('_do_' . str_replace('-', '_', $args['action']));
90 if (!method_exists($this, $method))
91 return $this->error("Bad action");
93 $message = call_user_func(array(&$this, $method), $request, $args);
95 // display as seperate page or as alert?
96 $alert = new Alert(_("WikiAdminUtils says:"),
98 array(_("Okay") => $args['return_url']));
99 $alert->show(); // noreturn
102 function _getLabel($action) {
103 $labels = array('purge-cache' => _("Purge Markup Cache"),
104 'purge-bad-pagenames' => _("Delete Pages With Invalid Names"));
105 return @$labels[$action];
108 function _do_purge_cache(&$request, $args) {
109 $dbi = $request->getDbh();
110 $pages = $dbi->getAllPages('include_empty'); // Do we really want the empty ones too?
111 while (($page = $pages->next())) {
112 $page->set('_cached_html', false);
114 return _("Markup cache purged!");
117 function _do_purge_bad_pagenames(&$request, $args) {
118 // FIXME: this should be moved into WikiDB::normalize() or something...
119 $dbi = $request->getDbh();
120 $pages = $dbi->getAllPages('include_empty'); // Do we really want the empty ones too?
122 while (($page = $pages->next())) {
123 $pagename = $page->getName();
124 $wpn = new WikiPageName($pagename);
125 if (! $wpn->isValid())
126 $badpages[] = $pagename;
130 return _("No pages with bad names were found.");
133 foreach ($badpages as $pagename) {
134 $dbi->deletePage($pagename);
135 $list->pushContent(HTML::li($pagename));
138 return HTML(fmt("Deleted %s pages with invalid names:",
143 //TODO: We need a seperate plugin for this.
145 function _do_access_restrictions(&$request, &$args) {
146 return _("Sorry. Access Restrictions not yet implemented");
149 // pagelist with enable/disable button
150 function _do_email_verification(&$request, &$args) {
151 $dbi = $request->getDbh();
152 $pagelist = new PageList('pagename',0,$args);
153 //$args['return_url'] = 'action=email-verification-verified';
154 $email = new _PageList_Column_email('email',_("E-Mail"),'left');
155 $emailVerified = new _PageList_Column_emailVerified('emailVerified',_("Verification Status"),'center');
156 $pagelist->_columns[] = $email;
157 $pagelist->_columns[] = $emailVerified;
158 //This is the best method to find all users (Db and PersonalPage)
159 $current_user = $request->_user;
160 if (empty($args['verify'])) {
161 $group = WikiGroup::getGroup($request);
162 $allusers = $group->_allUsers();
164 $allusers = array_keys($args['user']);
166 foreach ($allusers as $username) {
168 $user = WikiUser($username);
170 $user = new WikiUser(&$request,$username);
171 $prefs = $user->getPreferences();
172 if ($prefs->get('email')) {
173 if (!$prefs->get('userid'))
174 $prefs->set('userid',$username);
175 $group = (int)(count($pagelist->_rows) / $pagelist->_group_rows);
176 $class = ($group % 2) ? 'oddrow' : 'evenrow';
177 $row = HTML::tr(array('class' => $class));
178 $page_handle = $dbi->getPage($username);
179 $row->pushContent($pagelist->_columns[0]->format($pagelist, $page_handle, $page_handle));
180 $row->pushContent($email->format($pagelist, &$prefs, $page_handle));
181 if (!empty($args['verify'])) {
182 $prefs->_prefs['email']->set('emailVerified',empty($args['verified'][$username]) ? 0 : 2);
183 $user->setPreferences($prefs);
185 $row->pushContent($emailVerified->format($pagelist, &$prefs, $args['verify']));
186 $pagelist->_rows[] = $row;
189 $request->_user = $current_user;
190 if (!empty($args['verify'])) {
191 return HTML($pagelist->_generateTable(false));
194 $args['return_url'] = $request->getURLtoSelf();
195 return HTML::form(array('action' => $request->getPostURL(),
197 HiddenInputs($args, 'wikiadminutils'),
198 HiddenInputs(array('require_authority_for_post' =>
200 HiddenInputs($request->getArgs()),
201 $pagelist->_generateTable(false),
202 HTML::p(Button('submit:', _("Change Verification Status"), 'wikiadmin'),
204 Button('cancel', _("Cancel")))
210 require_once("lib/PageList.php");
212 class _PageList_Column_email
213 extends _PageList_Column {
214 function _getValue ($prefs, $dummy) {
215 return $prefs->get('email');
219 class _PageList_Column_emailVerified
220 extends _PageList_Column {
221 function _getValue ($prefs, $status) {
222 $name = $prefs->get('userid');
223 $input = HTML::input(array('type' => 'checkbox',
224 'name' => 'wikiadminutils[verified]['.$name.']',
226 if ($prefs->get('emailVerified'))
227 $input->setAttr('checked','1');
229 $input->setAttr('disabled','1');
230 return HTML($input,HTML::input(array('type' => 'hidden',
231 'name' => 'wikiadminutils[user]['.$name.']',
242 // c-hanging-comment-ender-p: nil
243 // indent-tabs-mode: nil