summaryrefslogtreecommitdiff
path: root/includes/specials/SpecialUserrights.php
diff options
context:
space:
mode:
Diffstat (limited to 'includes/specials/SpecialUserrights.php')
-rw-r--r--includes/specials/SpecialUserrights.php107
1 files changed, 65 insertions, 42 deletions
diff --git a/includes/specials/SpecialUserrights.php b/includes/specials/SpecialUserrights.php
index 36caf9a6..6ea8668b 100644
--- a/includes/specials/SpecialUserrights.php
+++ b/includes/specials/SpecialUserrights.php
@@ -1,13 +1,29 @@
<?php
/**
- * Special page to allow managing user group membership
+ * Implements Special:Userrights
+ *
+ * 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.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup SpecialPage
*/
/**
- * A class to manage user levels rights.
+ * Special page to allow managing user group membership
+ *
* @ingroup SpecialPage
*/
class UserrightsPage extends SpecialPage {
@@ -32,10 +48,10 @@ class UserrightsPage extends SpecialPage {
public function userCanChangeRights( $user, $checkIfSelf = true ) {
$available = $this->changeableGroups();
return !empty( $available['add'] )
- or !empty( $available['remove'] )
- or ( ( $this->isself || !$checkIfSelf ) and
+ || !empty( $available['remove'] )
+ || ( ( $this->isself || !$checkIfSelf ) &&
( !empty( $available['add-self'] )
- or !empty( $available['remove-self'] ) ) );
+ || !empty( $available['remove-self'] ) ) );
}
/**
@@ -49,7 +65,7 @@ class UserrightsPage extends SpecialPage {
// any groups, it's a bit silly to give them the user search prompt.
global $wgUser, $wgRequest, $wgOut;
- if( $par ) {
+ if( $par !== null ) {
$this->mTarget = $par;
} else {
$this->mTarget = $wgRequest->getVal( 'user' );
@@ -67,7 +83,7 @@ class UserrightsPage extends SpecialPage {
$available = $this->changeableGroups();
- if ( !$this->mTarget ) {
+ if ( $this->mTarget === null ) {
/*
* If the user specified no target, and they can only
* edit their own groups, automatically set them as the
@@ -77,8 +93,9 @@ class UserrightsPage extends SpecialPage {
$this->mTarget = $wgUser->getName();
}
- if ( $this->mTarget == $wgUser->getName() )
+ if ( User::getCanonicalName( $this->mTarget ) == $wgUser->getName() ) {
$this->isself = true;
+ }
if( !$this->userCanChangeRights( $wgUser, true ) ) {
// fixme... there may be intermediate groups we can mention.
@@ -99,8 +116,9 @@ class UserrightsPage extends SpecialPage {
$this->setHeaders();
// show the general form
- if ( count( $available['add'] ) || count( $available['remove'] ) )
+ if ( count( $available['add'] ) || count( $available['remove'] ) ) {
$this->switchForm();
+ }
if( $wgRequest->wasPosted() ) {
// save settings
@@ -121,7 +139,7 @@ class UserrightsPage extends SpecialPage {
}
// show some more forms
- if( $this->mTarget ) {
+ if( $this->mTarget !== null ) {
$this->editUserGroupsForm( $this->mTarget );
}
}
@@ -139,12 +157,14 @@ class UserrightsPage extends SpecialPage {
* @return null
*/
function saveUserGroups( $username, $reason = '' ) {
- global $wgRequest, $wgUser, $wgGroupsAddToSelf, $wgGroupsRemoveFromSelf;
+ global $wgRequest, $wgOut;
- $user = $this->fetchUser( $username );
- if( $user instanceof WikiErrorMsg ) {
- $wgOut->addWikiMsgArray( $user->getMessageKey(), $user->getMessageArgs() );
+ $status = $this->fetchUser( $username );
+ if( !$status->isOK() ) {
+ $wgOut->addWikiText( $status->getWikiText() );
return;
+ } else {
+ $user = $status->value;
}
$allgroups = $this->getAllGroups();
@@ -162,7 +182,7 @@ class UserrightsPage extends SpecialPage {
$removegroup[] = $group;
}
}
-
+
$this->doSaveUserGroups( $user, $addgroup, $removegroup, $reason );
}
@@ -247,10 +267,12 @@ class UserrightsPage extends SpecialPage {
function editUserGroupsForm( $username ) {
global $wgOut;
- $user = $this->fetchUser( $username );
- if( $user instanceof WikiErrorMsg ) {
- $wgOut->addWikiMsgArray( $user->getMessageKey(), $user->getMessageArgs() );
+ $status = $this->fetchUser( $username );
+ if( !$status->isOK() ) {
+ $wgOut->addWikiText( $status->getWikiText() );
return;
+ } else {
+ $user = $status->value;
}
$groups = $user->getGroups();
@@ -267,7 +289,7 @@ class UserrightsPage extends SpecialPage {
* return a user (or proxy) object for manipulating it.
*
* Side effects: error output for invalid access
- * @return mixed User, UserRightsProxy, or WikiErrorMsg
+ * @return Status object
*/
public function fetchUser( $username ) {
global $wgUser, $wgUserrightsInterwikiDelimiter;
@@ -278,21 +300,21 @@ class UserrightsPage extends SpecialPage {
$database = '';
} else {
list( $name, $database ) = array_map( 'trim', $parts );
-
+
if( $database == wfWikiID() ) {
$database = '';
} else {
if( !$wgUser->isAllowed( 'userrights-interwiki' ) ) {
- return new WikiErrorMsg( 'userrights-no-interwiki' );
+ return Status::newFatal( 'userrights-no-interwiki' );
}
if( !UserRightsProxy::validDatabase( $database ) ) {
- return new WikiErrorMsg( 'userrights-nodatabase', $database );
+ return Status::newFatal( 'userrights-nodatabase', $database );
}
}
}
- if( $name == '' ) {
- return new WikiErrorMsg( 'nouserspecified' );
+ if( $name === '' ) {
+ return Status::newFatal( 'nouserspecified' );
}
if( $name{0} == '#' ) {
@@ -307,13 +329,13 @@ class UserrightsPage extends SpecialPage {
}
if( !$name ) {
- return new WikiErrorMsg( 'noname' );
+ return Status::newFatal( 'noname' );
}
} else {
$name = User::getCanonicalName( $name );
- if( !$name ) {
+ if( $name === false ) {
// invalid name
- return new WikiErrorMsg( 'nosuchusershort', $username );
+ return Status::newFatal( 'nosuchusershort', $username );
}
}
@@ -324,10 +346,10 @@ class UserrightsPage extends SpecialPage {
}
if( !$user || $user->isAnon() ) {
- return new WikiErrorMsg( 'nosuchusershort', $username );
+ return Status::newFatal( 'nosuchusershort', $username );
}
- return $user;
+ return Status::newGood( $user );
}
function makeGroupNameList( $ids ) {
@@ -352,14 +374,13 @@ class UserrightsPage extends SpecialPage {
function switchForm() {
global $wgOut, $wgScript;
$wgOut->addHTML(
- Xml::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'name' => 'uluser', 'id' => 'mw-userrights-form1' ) ) .
- Xml::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
- Xml::openElement( 'fieldset' ) .
- Xml::element( 'legend', array(), wfMsg( 'userrights-lookup-user' ) ) .
- Xml::inputLabel( wfMsg( 'userrights-user-editname' ), 'user', 'username', 30, $this->mTarget ) . ' ' .
+ Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'name' => 'uluser', 'id' => 'mw-userrights-form1' ) ) .
+ Html::hidden( 'title', $this->getTitle()->getPrefixedText() ) .
+ Xml::fieldset( wfMsg( 'userrights-lookup-user' ) ) .
+ Xml::inputLabel( wfMsg( 'userrights-user-editname' ), 'user', 'username', 30, str_replace( '_', ' ', $this->mTarget ) ) . ' ' .
Xml::submitButton( wfMsg( 'editusergroup' ) ) .
- Xml::closeElement( 'fieldset' ) .
- Xml::closeElement( 'form' ) . "\n"
+ Html::closeElement( 'fieldset' ) .
+ Html::closeElement( 'form' ) . "\n"
);
}
@@ -396,8 +417,9 @@ class UserrightsPage extends SpecialPage {
global $wgOut, $wgUser, $wgLang;
$list = array();
- foreach( $groups as $group )
+ foreach( $groups as $group ) {
$list[] = self::buildGroupLink( $group );
+ }
$autolist = array();
if ( $user instanceof User ) {
@@ -417,8 +439,8 @@ class UserrightsPage extends SpecialPage {
}
$wgOut->addHTML(
Xml::openElement( 'form', array( 'method' => 'post', 'action' => $this->getTitle()->getLocalURL(), 'name' => 'editGroup', 'id' => 'mw-userrights-form2' ) ) .
- Xml::hidden( 'user', $this->mTarget ) .
- Xml::hidden( 'wpEditToken', $wgUser->editToken( $this->mTarget ) ) .
+ Html::hidden( 'user', $this->mTarget ) .
+ Html::hidden( 'wpEditToken', $wgUser->editToken( $this->mTarget ) ) .
Xml::openElement( 'fieldset' ) .
Xml::element( 'legend', array(), wfMsg( 'userrights-editusergroup' ) ) .
wfMsgExt( 'editinguser', array( 'parse' ), wfEscapeWikiText( $user->getName() ) ) .
@@ -437,7 +459,8 @@ class UserrightsPage extends SpecialPage {
<tr>
<td></td>
<td class='mw-submit'>" .
- Xml::submitButton( wfMsg( 'saveusergroups' ), array( 'name' => 'saveusergroups', 'accesskey' => 's' ) ) .
+ Xml::submitButton( wfMsg( 'saveusergroups' ),
+ array( 'name' => 'saveusergroups' ) + $wgUser->getSkin()->tooltipAndAccessKeyAttribs( 'userrights-set' ) ) .
"</td>
</tr>" .
Xml::closeElement( 'table' ) . "\n" .
@@ -511,7 +534,7 @@ class UserrightsPage extends SpecialPage {
foreach( $columns as $name => $column ) {
if( $column === array() )
continue;
- $ret .= xml::element( 'th', null, wfMsg( 'userrights-' . $name . '-col' ) );
+ $ret .= Xml::element( 'th', null, wfMsg( 'userrights-' . $name . '-col' ) );
}
$ret.= "</tr>\n<tr>\n";
foreach( $columns as $column ) {
@@ -522,7 +545,7 @@ class UserrightsPage extends SpecialPage {
$attr = $checkbox['disabled'] ? array( 'disabled' => 'disabled' ) : array();
if ( $checkbox['irreversible'] ) {
- $text = htmlspecialchars( wfMsg( 'userrights-irreversible-marker',
+ $text = htmlspecialchars( wfMsg( 'userrights-irreversible-marker',
User::getGroupMember( $group ) ) );
} else {
$text = htmlspecialchars( User::getGroupMember( $group ) );