<?php
+# Copyright (C) 2004 Brion Vibber, lcrocker, Tim Starling,
+# Domas Mituzas, Ashar Voultoiz, Jens Frank, Zhengzhu.
+#
+# http://www.mediawiki.org/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# http://www.gnu.org/copyleft/gpl.html
/**
*
* @package MediaWiki
/**
*
*/
-require_once("QueryPage.php");
+require_once('QueryPage.php');
/**
* This class is used to get a list of user. The ones with specials
* @subpackage SpecialPage
*/
class ListUsersPage extends QueryPage {
-
+ var $requestedGroup = '';
+ var $requestedUser = '';
+ var $previousResult = false;
+ var $concatGroups = '';
+
function getName() {
- return "Listusers";
+ return 'Listusers';
}
+ function isSyndicated() { return false; }
+
+ /**
+ * Show a drop down list to select a group as well as a user name
+ * search box.
+ * @todo localize
+ */
+ function getPageHeader( ) {
+ global $wgScript;
+
+ // Various variables used for the form
+ $action = htmlspecialchars( $wgScript );
+ $title = Title::makeTitle( NS_SPECIAL, 'Listusers' );
+ $special = htmlspecialchars( $title->getPrefixedDBkey() );
+
+ // form header
+ $out = '<form method="get" action="'.$action.'">' .
+ '<input type="hidden" name="title" value="'.$special.'" />' .
+ wfMsg( 'speciallistusersgrouplabel' ) . '<select name="group">';
+
+ // get all group names and id
+ $dbr = & wfGetDB( DB_SLAVE );
+ $group = $dbr->tableName( 'group' );
+ $sql = "SELECT group_id, group_name FROM $group;";
+ $result = $dbr->query($sql);
+
+ // we want a default empty group
+ $out.= '<option value=""></option>';
+
+ // build the dropdown list menu using datas from the database
+ while($agroup = $dbr->fetchObject( $result )) {
+ $selected = ($agroup->group_id == $this->requestedGroup) ? ' selected ' : '' ;
+ $out.= '<option value="'.$agroup->group_id.'" '.$selected.'>'.$agroup->group_name.'</option>';
+ }
+ $out .= '</select> ';
+
+ $out .= wfMsg( 'speciallistusersuserlabel' ) . '<input type="text" name="username" /> ';
+ // OK button, end of form.
+ $out .= '<input type="submit" /></form>';
+ // congratulations the form is now build
+ return $out;
+ }
+
function getSQL() {
$dbr =& wfGetDB( DB_SLAVE );
+ /* system showing possible actions for users
$user = $dbr->tableName( 'user' );
$user_rights = $dbr->tableName( 'user_rights' );
$userspace = Namespace::getUser();
- return "SELECT r.user_rights as type, $userspace as namespace, u.user_name as title, " .
- "u.user_name as value FROM $user u LEFT JOIN $user_rights r ON u.user_id = r.user_id";
+ return "SELECT ur_rights as type, $userspace as namespace, user_name as title, " .
+ "user_name as value FROM $user LEFT JOIN $user_rights ON user_id = ur_user";
+ */
+ /** Show groups instead */
+ $user = $dbr->tableName( 'user' );
+ $group = $dbr->tableName( 'group' );
+ $user_groups = $dbr->tableName( 'user_groups' );
+
+ $userspace = NS_USER;
+ $sql = "SELECT group_name as type, $userspace AS namespace, user_name AS title, user_name as value " .
+ "FROM $user ".
+ "LEFT JOIN $user_groups ON user_id =ug_user " .
+ "LEFT JOIN $group ON ug_group = group_id ";
+
+ if($this->requestedGroup != '') {
+ $sql .= "WHERE group_id= '" . IntVal( $this->requestedGroup ) . "' ";
+ if($this->requestedUser != '') {
+ $sql .= "AND user_name = " . $dbr->addQuotes( $this->requestedUser ) . ' ';
+ }
+ } else {
+ if($this->requestedUser !='') {
+ $sql .= "WHERE user_name = " . $dbr->addQuotes( $this->requestedUser ) . ' ';
+ }
+ }
+
+ return $sql;
+ }
+
+ /**
+ * When calling formatResult we output the previous result instead of the
+ * current one. We need an additional step to flush out the last result.
+ */
+ function tryLastResult( ) {
+ return true;
}
function sortDescending() {
return false;
}
+ function appendGroups($group) {
+ $this->concatGroups .= $group.' ';
+ }
+
+ function clearGroups() {
+ $this->concatGroups = '';
+ }
+/*
+ var $previousResult = false;
+ var $concatGroups = '';
+*/
function formatResult( $skin, $result ) {
global $wgContLang;
- $name = $skin->makeLink( $wgContLang->getNsText($result->namespace) . ':' . $result->title, $result->title );
- if( '' != $result->type ) {
- $name .= ' (' .
- $skin->makeLink( wfMsgForContent( "administrators" ), $result->type) .
- ')';
+ $name = false;
+
+ if($this->previousResult->title != $result->title && $this->previousResult != false) {
+ // Different username, give back name(group1,group2)
+ $name = $skin->makeLink( $wgContLang->getNsText($this->previousResult->namespace) . ':' . $this->previousResult->title, $this->previousResult->title );
+ $name .= $this->concatGroups ? '('.substr($this->concatGroups,0,-1).')' : '';
+ $this->clearGroups();
}
+
+ if($result->type != '') {
+ $this->appendGroups( $skin->makeLink( wfMsgForContent( 'administrators' ), $result->type ) );
+ }
+
+ $this->previousResult = $result;
return $name;
}
}
* constructor
*/
function wfSpecialListusers() {
- global $wgUser, $wgOut, $wgLang;
+ global $wgRequest;
list( $limit, $offset ) = wfCheckLimits();
$slu = new ListUsersPage();
+
+ /**
+ * Get some parameters
+ */
+ $slu->requestedGroup = $wgRequest->getVal('group');
+ $slu->requestedUser = $wgRequest->getVal('username');
return $slu->doQuery( $offset, $limit );
}