2 require_once( "LinksUpdate.php" );
4 function wfSpecialMakesysop()
6 global $wgUser, $wgOut, $wgRequest;
8 if ( 0 == $wgUser->getID() or $wgUser->isBlocked() ) {
9 $wgOut->errorpage( "movenologin", "movenologintext" );
12 if (! $wgUser->isBureaucrat() && ! $wgUser->isDeveloper() ){
13 $wgOut->errorpage( "bureaucrattitle", "bureaucrattext" );
18 $wgOut->readOnlyPage();
22 $f = new MakesysopForm( $wgRequest );
32 var $mTarget, $mAction, $mRights, $mUser, $mSubmit;
34 function MakesysopForm( &$request )
36 $this->mAction
= $request->getText( 'action' );
37 $this->mRights
= $request->getVal( 'wpRights' );
38 $this->mUser
= $request->getText( 'wpMakesysopUser' );
39 $this->mSubmit
= $request->getBool( 'wpMakesysopSubmit' ) && $request->wasPosted();
40 $this->mBuro
= $request->getBool( 'wpSetBureaucrat' );
43 function showForm( $err = "")
45 global $wgOut, $wgUser, $wgLang;
47 if ( $wgUser->isDeveloper() ) {
48 $wgOut->setPageTitle( wfMsg( "set_user_rights" ) );
50 $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
53 $wgOut->addWikiText( wfMsg( "makesysoptext" ) );
55 $titleObj = Title
::makeTitle( NS_SPECIAL
, "Makesysop" );
56 $action = $titleObj->escapeLocalURL( "action=submit" );
59 $wgOut->setSubtitle( wfMsg( "formerror" ) );
60 $wgOut->addHTML( "<p class='error'>{$err}</p>\n" );
62 $namedesc = wfMsg( "makesysopname" );
63 if ( !is_null( $this->mUser
) ) {
64 $encUser = htmlspecialchars( $this->mUser
);
70 <form id=\"makesysop\" method=\"post\" action=\"{$action}\">
73 <td align='right'>$namedesc</td>
75 <input type='text' size='40' name=\"wpMakesysopUser\" value=\"$encUser\" />
80 $makeburo = wfMsg( "setbureaucratflag" );
83 <td> </td><td align=left>
84 <input type=checkbox name=\"wpSetBureaucrat\" value=1>$makeburo
89 if ( $wgUser->isDeveloper() ) {
90 $rights = wfMsg( "rights" );
91 if ( !is_null( $this->mRights
) ) {
92 $encRights = htmlspecialchars( $this->mRights
);
99 <td align='right'>$rights</td>
101 <input type='text' size='40' name=\"wpRights\" value=\"$encRights\" />
107 if ( $wgUser->isDeveloper() ) {
108 $mss = wfMsg( "set_user_rights" );
110 $mss = wfMsg( "makesysopsubmit" );
114 <td> </td><td align='left'>
115 <input type='submit' name=\"wpMakesysopSubmit\" value=\"{$mss}\" />
124 global $wgOut, $wgUser, $wgLang;
125 global $wgDBname, $wgMemc, $wgLocalDatabases;
127 $dbw =& wfGetDB( DB_MASTER
);
128 $parts = explode( "@", $this->mUser
);
129 $usertable = $dbw->tableName( 'user' );
131 if( count( $parts ) == 2 && $wgUser->isDeveloper() && strpos( '.', $usertable ) === false ){
132 $username = $dbw->strencode( $parts[0] );
133 if ( array_key_exists( $parts[1], $wgLocalDatabases ) ) {
134 $dbName = $wgLocalDatabases[$parts[1]];
135 $usertable = $dbName . "." . $usertable;
141 $username = wfStrencode( $this->mUser
);
144 if ( $username{0} == "#" ) {
145 $id = intval( substr( $username, 1 ) );
146 $sql = "SELECT user_id,user_rights FROM $usertable WHERE user_id=$id FOR UPDATE";
148 $encName = $dbw->strencode( $username );
149 $sql = "SELECT user_id, user_rights FROM $usertable WHERE user_name = '{$username}' FOR UPDATE";
152 $prev = $dbw->ignoreErrors( TRUE );
153 $res = $dbw->query( $sql );
154 $dbw->setIgnoreSQLErrors( $prev );
156 if( $dbw->lastErrno() ||
! $username ||
$dbw->numRows( $res ) == 0 ){
161 $row = $dbw->fetchObject( $res );
162 $id = intval( $row->user_id
);
163 $rightsNotation = array();
165 if ( $wgUser->isDeveloper() ) {
166 $newrights = (string)$this->mRights
;
167 $rightsNotation[] = "=$this->mRights";
169 if( $row->user_rights
){
170 $rights = explode(",", $row->user_rights
);
171 if(! in_array("sysop", $rights ) ){
173 $rightsNotation[] = "+sysop ";
175 if ( $this->mBuro
&& !in_array( "bureaucrat", $rights ) ) {
176 $rights[] = "bureaucrat";
177 $rightsNotation[] = "+bureaucrat ";
179 $newrights = addslashes( implode( ",", $rights ) );
181 $newrights = "sysop";
182 $rightsNotation[] = "+sysop";
183 if ( $this->mBuro
) {
184 $rightsNotation[] = "+bureaucrat";
185 $newrights .= ",bureaucrat";
190 if ( count( $rightsNotation ) == 0 ) {
193 $sql = "UPDATE $usertable SET user_rights = '{$newrights}' WHERE user_id = $id LIMIT 1";
195 $wgMemc->delete( "$dbName:user:id:$id" );
197 $bureaucratLog = wfMsg( "bureaucratlog" );
198 $action = wfMsg( "bureaucratlogentry", $this->mUser
, implode( " ", $rightsNotation ) );
200 $log = new LogPage( $bureaucratLog );
201 $log->addEntry( $action, "" );
203 $this->showSuccess();
207 function showSuccess()
209 global $wgOut, $wgUser;
211 $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
213 if ( $wgUser->isDeveloper() ) {
214 $text = wfMsg( "user_rights_set", $this->mUser
);
216 $text = wfMsg( "makesysopok", $this->mUser
);
219 $wgOut->addWikiText( $text );
226 global $wgOut, $wgUser;
228 $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
229 if ( $wgUser->isDeveloper() ) {
230 $this->showForm( wfMsg( "set_rights_fail", $this->mUser
) );
232 $this->showForm( wfMsg( "makesysopfail", $this->mUser
) );