getID() or $wgUser->isBlocked() ) { $wgOut->errorpage( "movenologin", "movenologintext" ); return; } if (! $wgUser->isBureaucrat() && ! $wgUser->isDeveloper() ){ $wgOut->errorpage( "bureaucrattitle", "bureaucrattext" ); return; } if ( wfReadOnly() ) { $wgOut->readOnlyPage(); return; } $f = new MakesysopForm(); if ( $_POST['wpMakesysopSubmit'] ) { $f->doSubmit(); } else { $f->showForm( "" ); } } class MakesysopForm { function showForm( $err = "") { global $wgOut, $wgUser, $wgLang; global $wpNewTitle, $wpOldTitle, $wpMovetalk, $target, $wpRights, $wpMakesysopUser; if ( $wgUser->isDeveloper() ) { $wgOut->setPageTitle( wfMsg( "set_user_rights" ) ); } else { $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) ); } $wgOut->addWikiText( wfMsg( "makesysoptext" ) ); $titleObj = Title::makeTitle( NS_SPECIAL, "Makesysop" ); $action = $titleObj->escapeLocalURL( "action=submit" ); if ( "" != $err ) { $wgOut->setSubtitle( wfMsg( "formerror" ) ); $wgOut->addHTML( "

{$err}\n" ); } $namedesc = wfMsg( "makesysopname" ); if ( isset( $wpMakesysopUser ) ) { $encUser = htmlspecialchars( $wpMakesysopUser ); } else { $encUser = ""; } $wgOut->addHTML( "

" ); /* $makeburo = wfMsg( "setbureaucratflag" ); $wgOut->addHTML( "" );*/ if ( $wgUser->isDeveloper() ) { $rights = wfMsg( "rights" ); if ( isset( $wpRights ) ) { $encRights = htmlspecialchars( $wpRights ); } else { $encRights = "sysop"; } $wgOut->addHTML( " " ); } if ( $wgUser->isDeveloper() ) { $mss = wfMsg( "set_user_rights" ); } else { $mss = wfMsg( "makesysopsubmit" ); } $wgOut->addHTML( "
$namedesc
  $makeburo
$rights
 
\n" ); } function doSubmit() { global $wgOut, $wgUser, $wgLang, $wpMakesysopUser, $wpSetBureaucrat; global $wgDBname, $wgMemc, $wpRights, $wgLocalDatabases; $parts = explode( "@", $wpMakesysopUser ); if( count( $parts ) == 2 && $wgUser->isDeveloper() ){ $username = $parts[0]; if ( array_key_exists( $parts[1], $wgLocalDatabases ) ) { $dbName = $wgLocalDatabases[$parts[1]]; $usertable = $dbName . ".user"; } else { $this->showFail(); return; } } else { $username = $wpMakesysopUser; $usertable = "user"; $dbName = $wgDBname; } if ( $username{0} == "#" ) { $id = intval( substr( $username, 1 ) ); $sql = "SELECT user_id,user_rights FROM $usertable WHERE user_id=$id"; } else { $encName = wfStrencode( $username ); $sql = "SELECT user_id, user_rights FROM $usertable WHERE user_name = '{$encName}'"; } $prev = wfIgnoreSQLErrors( TRUE ); $res = wfQuery( $sql, DB_WRITE); wfIgnoreSQLErrors( $prev ); global $wgOut, $wgUser, $wgLang, $wpMakesysopUser, $wpSetBureaucrat; global $wgDBname, $wgMemc, $wpRights, $wgLocalDatabases; $parts = explode( "@", $wpMakesysopUser ); if( count( $parts ) == 2 && $wgUser->isDeveloper() ){ $username = wfStrencode( $parts[0] ); if ( array_key_exists( $parts[1], $wgLocalDatabases ) ) { $dbName = $wgLocalDatabases[$parts[1]]; $usertable = $dbName . ".user"; } else { $this->showFail(); return; } } else { $username = wfStrencode( $wpMakesysopUser ); $usertable = "user"; $dbName = $wgDBname; } if ( $username{0} == "#" ) { $id = intval( substr( $username, 1 ) ); $sql = "SELECT user_id,user_rights FROM $usertable WHERE user_id=$id"; } else { $encName = wfStrencode( $username ); $sql = "SELECT user_id, user_rights FROM $usertable WHERE user_name = '{$username}'"; } $prev = wfIgnoreSQLErrors( TRUE ); $res = wfQuery("SELECT user_id, user_rights FROM $usertable WHERE user_name = '{$username}'", DB_WRITE); wfIgnoreSQLErrors( $prev ); if( wfLastErrno() || ! $username || wfNumRows( $res ) == 0 ){ $this->showFail(); return; } $row = wfFetchObject( $res ); $id = intval( $row->user_id ); $rightsNotation = array(); if ( $wgUser->isDeveloper() ) { $newrights = (string)$wpRights; $rightsNotation[] = "=$wpRights"; } else { 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 ) ); } else { $newrights = "sysop"; $rightsNotation[] = "+sysop"; if ( $wpSetBureaucrat ) { $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); $wgMemc->delete( "$dbName:user:id:$id" ); $bureaucratLog = wfMsg( "bureaucratlog" ); $action = wfMsg( "bureaucratlogentry", $wpMakesysopUser, implode( " ", $rightsNotation ) ); $log = new LogPage( $bureaucratLog ); $log->addEntry( $action, "" ); $this->showSuccess(); } } function showSuccess() { global $wgOut, $wpMakesysopUser, $wgUser; $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) ); if ( $wgUser->isDeveloper() ) { $text = wfMsg( "user_rights_set", $wpMakesysopUser ); } else { $text = wfMsg( "makesysopok", $wpMakesysopUser ); } $text .= "\n\n"; $wgOut->addWikiText( $text ); $this->showForm(); } function showFail() { global $wgOut, $wpMakesysopUser, $wgUser; $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) ); if ( $wgUser->isDeveloper() ) { $this->showForm( wfMsg( "set_rights_fail", $wpMakesysopUser ) ); } else { $this->showForm( wfMsg( "makesysopfail", $wpMakesysopUser ) ); } } } ?>