]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/plugin/AllUsers.php
Test 'limit' argument is numeric to avoid SQL injection
[SourceForge/phpwiki.git] / lib / plugin / AllUsers.php
1 <?php // -*-php-*-
2 rcs_id('$Id$');
3 /*
4  Copyright 2002,2004 $ThePhpWikiProgrammingTeam
5
6  This file is part of PhpWiki.
7
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.
12
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.
17
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
21  */
22
23 require_once('lib/PageList.php');
24
25 /**
26  * Based on AllPages and WikiGroup.
27  *
28  * We list all users, 
29  * either homepage users (prefs stored in a page), 
30  * users with db prefs and 
31  * externally authenticated users with a db users table, if auth_user_exists is defined.
32  */
33 class WikiPlugin_AllUsers
34 extends WikiPlugin
35 {
36     function getName () {
37         return _("AllUsers");
38     }
39
40     function getDescription() {
41         return _("List all once authenticated users.");
42     }
43
44     function getVersion() {
45         return preg_replace("/[Revision: $]/", '',
46                             "\$Revision$");
47     }
48
49     function getDefaultArguments() {
50         return array_merge
51             (
52              PageList::supportedArgs(),
53              array('noheader'      => false,
54                    'include_empty' => true,
55                    'debug'         => false
56                    ));
57     }
58     // info arg allows multiple columns
59     // info=mtime,hits,summary,version,author,locked,minor,markup or all
60     // exclude arg allows multiple pagenames exclude=WikiAdmin,.SecretUser
61     //
62     // include_empty shows also users which stored their preferences,
63     // but never saved their homepage
64     //
65     // sortby: [+|-] pagename|mtime|hits
66
67     function run($dbi, $argstr, &$request, $basepage) {
68         $args = $this->getArgs($argstr, $request);
69
70         if (!empty($args['limit']) && !is_numeric($args['limit'])) {
71             return $this->error(_("Illegal 'limit' argument: must be numeric"));
72         }
73
74         extract($args);
75         if (defined('DEBUG') && DEBUG && $debug) {
76             $timer = new DebugTimer;
77         }
78
79         $group = $request->getGroup();
80         if (method_exists($group,'_allUsers')) {
81             $allusers = $group->_allUsers();
82         } else {
83             $allusers = array();
84         }
85         $args['count'] = count($allusers);
86         // deleted pages show up as version 0.
87         $pagelist = new PageList($info, $exclude, $args);
88         if (!$noheader)
89             $pagelist->setCaption(_("Authenticated users on this wiki (%d total):"));
90         if ($include_empty and empty($info))
91             $pagelist->_addColumn('version');
92         list($offset, $pagesize) = $pagelist->limit($args['limit']);
93         if (!$pagesize) {
94             $pagelist->addPageList($allusers);
95         } else {
96             for ($i=$offset; $i < $offset + $pagesize - 1; $i++) {
97                 if ($i >= $args['count']) break;
98                 $pagelist->addPage(trim($allusers[$i]));
99             }
100         }
101         /*
102         $page_iter = $dbi->getAllPages($include_empty, $sortby, $limit);
103         while ($page = $page_iter->next()) {
104             if ($page->isUserPage($include_empty))
105                 $pagelist->addPage($page);
106         }
107         */
108
109         if (defined('DEBUG') && DEBUG and $debug) {
110             return HTML($pagelist,
111                         HTML::p(fmt("Elapsed time: %s s", $timer->getStats())));
112         } else {
113             return $pagelist;
114         }
115     }
116 };
117
118 // Local Variables:
119 // mode: php
120 // tab-width: 8
121 // c-basic-offset: 4
122 // c-hanging-comment-ender-p: nil
123 // indent-tabs-mode: nil
124 // End:
125 ?>