-<?
-include_once( "LinksUpdate.php" );
+<?php
+/**
+ * File is replaced by SpecialUserlevels. It is kept here for migration purposes
+ * @package MediaWiki
+ * @subpackage SpecialPage
+ * @deprecated
+ */
-function wfSpecialMakesysop()
-{
- global $wgUser, $wgOut, $action, $target;
+die('Use SpecialUserlevels instead !!'); // [av]
+
+
+/**
+ *
+ */
+require_once( "LinksUpdate.php" );
+
+/**
+ * Constructor
+ */
+function wfSpecialMakesysop() {
+ global $wgUser, $wgOut, $wgRequest;
if ( 0 == $wgUser->getID() or $wgUser->isBlocked() ) {
$wgOut->errorpage( "movenologin", "movenologintext" );
return;
}
- if (! $wgUser->isBureaucrat()){
+ if (! $wgUser->isAllowed('userrights') ) {
$wgOut->errorpage( "bureaucrattitle", "bureaucrattext" );
return;
}
-
+
if ( wfReadOnly() ) {
$wgOut->readOnlyPage();
return;
}
- $f = new MakesysopForm();
+ $f = new MakesysopForm( $wgRequest );
- if ( $_POST['wpMakesysopSubmit'] ) {
+ if ( $f->mSubmit ) {
$f->doSubmit();
} else {
- $f->showForm( "" );
+ $f->showForm( '' );
}
}
-class MakesysopForm {
- function showForm( $err = "")
- {
+/**
+ *
+ * @package MediaWiki
+ * @subpackage SpecialPage
+ */
+class MakesysopForm {
+ var $mTarget, $mAction, $mRights, $mUser, $mSubmit;
+
+ function MakesysopForm( &$request ) {
+ $this->mAction = $request->getText( 'action' );
+ $this->mRights = $request->getVal( 'wpRights' );
+ $this->mUser = $request->getText( 'wpMakesysopUser' );
+ $this->mSubmit = $request->getBool( 'wpMakesysopSubmit' ) && $request->wasPosted();
+ $this->mBuro = $request->getBool( 'wpSetBureaucrat' );
+ }
+
+ function showForm( $err = '') {
global $wgOut, $wgUser, $wgLang;
- global $wpNewTitle, $wpOldTitle, $wpMovetalk, $target;
- $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
+ if ( $wgUser->isDeveloper() ) {
+ $wgOut->setPageTitle( wfMsg( "set_user_rights" ) );
+ } else {
+ $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
+ }
$wgOut->addWikiText( wfMsg( "makesysoptext" ) );
- $action = wfLocalUrlE( $wgLang->specialPage( "Makesysop" ),
- "action=submit" );
+ $titleObj = Title::makeTitle( NS_SPECIAL, "Makesysop" );
+ $action = $titleObj->escapeLocalURL( "action=submit" );
if ( "" != $err ) {
$wgOut->setSubtitle( wfMsg( "formerror" ) );
- $wgOut->addHTML( "<p><font color='red' size='+1'>{$err}</font>\n" );
+ $wgOut->addHTML( "<p class='error'>{$err}</p>\n" );
}
$namedesc = wfMsg( "makesysopname" );
- $wgOut->addHTML( "<p>
+ if ( !is_null( $this->mUser ) ) {
+ $encUser = htmlspecialchars( $this->mUser );
+ } else {
+ $encUser = "";
+ }
+
+ $wgOut->addHTML( "
<form id=\"makesysop\" method=\"post\" action=\"{$action}\">
- <table border=0>
+ <table border='0'>
<tr>
- <td align=right>$namedesc</td>
- <td align=left>
- <input type=text size=40 name=\"wpMakesysopUser\">
+ <td align='right'>$namedesc</td>
+ <td align='left'>
+ <input type='text' size='40' name=\"wpMakesysopUser\" value=\"$encUser\" />
</td>
</tr>"
);
+
$makeburo = wfMsg( "setbureaucratflag" );
$wgOut->addHTML(
"<tr>
</tr>"
);
- $mss = wfMsg( "makesysopsubmit" );
+ if ( $wgUser->isDeveloper() ) {
+ $rights = wfMsg( "rights" );
+ if ( !is_null( $this->mRights ) ) {
+ $encRights = htmlspecialchars( $this->mRights );
+ } else {
+ $encRights = "sysop";
+ }
+
+ $wgOut->addHTML( "
+ <tr>
+ <td align='right'>$rights</td>
+ <td align='left'>
+ <input type='text' size='40' name=\"wpRights\" value=\"$encRights\" />
+ </td>
+ </tr>"
+ );
+ }
+
+ if ( $wgUser->isDeveloper() ) {
+ $mss = wfMsg( "set_user_rights" );
+ } else {
+ $mss = wfMsg( "makesysopsubmit" );
+ }
$wgOut->addHTML(
"<tr>
- <td> </td><td align=left>
- <input type=submit name=\"wpMakesysopSubmit\" value=\"{$mss}\">
+ <td> </td><td align='left'>
+ <input type='submit' name=\"wpMakesysopSubmit\" value=\"{$mss}\" />
</td></tr></table>
</form>\n"
);
}
- function doSubmit()
- {
- global $wgOut, $wgUser, $wgLang, $wpMakesysopUser, $wpSetBureaucrat;
- global $wgDBname, $wgMemc;
+ function doSubmit() {
+ global $wgOut, $wgUser, $wgLang;
+ global $wgDBname, $wgMemc, $wgLocalDatabases;
+
+ $fname = 'MakesysopForm::doSubmit';
- $parts = explode( "@", $wpMakesysopUser );
- if( count( $parts ) == 2){
- $username = addslashes( $parts[0] );
- $usertable = $parts[1] . "wiki.user";
- $dbName = $parts[1] . "wiki";
+ $dbw =& wfGetDB( DB_MASTER );
+ $parts = explode( '@', $this->mUser );
+ $user_rights = $dbw->tableName( 'user_rights' );
+ $usertable = $dbw->tableName( 'user' );
+
+ if( count( $parts ) == 2 && $wgUser->isDeveloper() && strpos( '.', $user_rights ) === false ){
+ $username = $dbw->strencode( $parts[0] );
+ if ( array_key_exists( $parts[1], $wgLocalDatabases ) ) {
+ $dbName = $wgLocalDatabases[$parts[1]];
+ $user_rights = $dbName . '.' . $user_rights;
+ $usertable = $usertable . '.' . $usertable;
+ } else {
+ $this->showFail();
+ return;
+ }
} else {
- $username = addslashes( $wpMakesysopUser );
- $usertable = "user";
+ $username = wfStrencode( $this->mUser );
$dbName = $wgDBname;
}
- $prev = wfIgnoreSQLErrors( TRUE );
- $res = wfQuery("SELECT user_id, user_rights FROM $usertable WHERE user_name = '{$username}'", DB_WRITE);
- wfIgnoreSQLErrors( $prev );
+ if ( $username{0} == "#" ) {
+ $id = intval( substr( $username, 1 ) );
+ $sql = "SELECT ur_user,ur_rights FROM $user_rights WHERE ur_user=$id FOR UPDATE";
+ } else {
+ $encName = $dbw->strencode( $username );
+ $sql = "SELECT ur_user, ur_rights FROM $usertable LEFT JOIN $user_rights ON user_id=ur_user WHERE user_name = '{$username}' FOR UPDATE";
+ }
+
+ $prev = $dbw->ignoreErrors( TRUE );
+ $res = $dbw->query( $sql );
+ $dbw->ignoreErrors( $prev );
- if( wfLastErrno() || ! $username || wfNumRows( $res ) == 0 ){
+ if( $dbw->lastErrno() || ! $username || $dbw->numRows( $res ) == 0 ){
$this->showFail();
return;
}
- $row = wfFetchObject( $res );
- $id = intval( $row->user_id );
+ $row = $dbw->fetchObject( $res );
+ $id = intval( $row->ur_user );
$rightsNotation = array();
- if( $row->user_rights ){
- $rights = explode(",", $row->user_rights );
- if(! in_array("sysop", $rights ) ){
- $rights[] = "sysop";
- $rightsNotation[] = "+sysop ";
- }
- if ( $wpSetBureaucrat && !in_array( "bureaucrat", $rights ) ) {
- $rights[] = "bureaucrat";
- $rightsNotation[] = "+bureaucrat ";
- }
- $newrights = addslashes( implode( ",", $rights ) );
+ if ( $wgUser->isDeveloper() ) {
+ $newrights = (string)$this->mRights;
+ $rightsNotation[] = "=$this->mRights";
} else {
- $newrights = "sysop";
- $rightsNotation[] = "+sysop";
- if ( $wpSetBureaucrat ) {
- $rightsNotation[] = "+bureaucrat";
- $newrights .= ",bureaucrat";
+ if( $row->ur_rights ){
+ $rights = explode(",", $row->ur_rights );
+ if(! in_array("sysop", $rights ) ){
+ $rights[] = "sysop";
+ $rightsNotation[] = "+sysop ";
+ }
+ if ( $this->mBuro && !in_array( "bureaucrat", $rights ) ) {
+ $rights[] = "bureaucrat";
+ $rightsNotation[] = "+bureaucrat ";
+ }
+ $newrights = addslashes( implode( ",", $rights ) );
+ } else {
+ $newrights = "sysop";
+ $rightsNotation[] = "+sysop";
+ if ( $this->mBuro ) {
+ $rightsNotation[] = "+bureaucrat";
+ $newrights .= ",bureaucrat";
+ }
}
}
if ( count( $rightsNotation ) == 0 ) {
$this->showFail();
} else {
- $sql = "UPDATE $usertable SET user_rights = '{$newrights}' WHERE user_id = $id LIMIT 1";
- wfQuery($sql, DB_WRITE);
+ #$sql = "UPDATE $user_rights SET user_rights = '{$newrights}' WHERE user_id = $id LIMIT 1";
+ #$dbw->query($sql);
+ $dbw->replace( $user_rights, array( array( 'ur_user', 'ur_rights' )),
+ array( 'ur_user' => $id, 'ur_rights' => $newrights ) , $fname );
$wgMemc->delete( "$dbName:user:id:$id" );
- $bureaucratLog = wfMsg( "bureaucratlog" );
- $action = wfMsg( "bureaucratlogentry", $wpMakesysopUser, implode( " ", $rightsNotation ) );
-
- $log = new LogPage( $bureaucratLog );
- $log->addEntry( $action, "" );
+ $log = new LogPage( 'rights' );
+ $log->addEntry( 'rights', Title::makeTitle( NS_USER, $this->mUser ),
+ implode( " ", $rightsNotation ) );
$this->showSuccess();
}
}
- function showSuccess()
- {
- global $wgOut, $wpMakesysopUser;
+ function showSuccess() {
+ global $wgOut, $wgUser;
$wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
- $text = wfMsg( "makesysopok", $wpMakesysopUser );
+
+ if ( $wgUser->isDeveloper() ) {
+ $text = wfMsg( "user_rights_set", $this->mUser );
+ } else {
+ $text = wfMsg( "makesysopok", $this->mUser );
+ }
+ $text .= "\n\n";
$wgOut->addWikiText( $text );
$this->showForm();
}
- function showFail()
- {
- global $wgOut, $wpMakesysopUser;
+ function showFail() {
+ global $wgOut, $wgUser;
$wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
- $this->showForm( wfMsg( "makesysopfail", $wpMakesysopUser ) );
+ if ( $wgUser->isDeveloper() ) {
+ $this->showForm( wfMsg( "set_rights_fail", $this->mUser ) );
+ } else {
+ $this->showForm( wfMsg( "makesysopfail", $this->mUser ) );
+ }
}
}
?>