2 include_once( "LinksUpdate.php" );
4 function wfSpecialMakesysop()
6 global $wgUser, $wgOut, $action, $target;
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();
24 if ( $_POST['wpMakesysopSubmit'] ) {
32 function showForm( $err = "")
34 global $wgOut, $wgUser, $wgLang;
35 global $wpNewTitle, $wpOldTitle, $wpMovetalk, $target, $wpRights, $wpMakesysopUser;
37 if ( $wgUser->isDeveloper() ) {
38 $wgOut->setPageTitle( wfMsg( "set_user_rights" ) );
40 $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
43 $wgOut->addWikiText( wfMsg( "makesysoptext" ) );
45 $titleObj = Title
::makeTitle( NS_SPECIAL
, "Makesysop" );
46 $action = $titleObj->escapeLocalURL( "action=submit" );
49 $wgOut->setSubtitle( wfMsg( "formerror" ) );
50 $wgOut->addHTML( "<p><font color='red' size='+1'>{$err}</font>\n" );
52 $namedesc = wfMsg( "makesysopname" );
53 if ( isset( $wpMakesysopUser ) ) {
54 $encUser = htmlspecialchars( $wpMakesysopUser );
60 <form id=\"makesysop\" method=\"post\" action=\"{$action}\">
63 <td align=right>$namedesc</td>
65 <input type=text size=40 name=\"wpMakesysopUser\" value=\"$encUser\">
70 $makeburo = wfMsg( "setbureaucratflag" );
73 <td> </td><td align=left>
74 <input type=checkbox name=\"wpSetBureaucrat\" value=1>$makeburo
79 if ( $wgUser->isDeveloper() ) {
80 $rights = wfMsg( "rights" );
81 if ( isset( $wpRights ) ) {
82 $encRights = htmlspecialchars( $wpRights );
89 <td align=right>$rights</td>
91 <input type=text size=40 name=\"wpRights\" value=\"$encRights\">
97 if ( $wgUser->isDeveloper() ) {
98 $mss = wfMsg( "set_user_rights" );
100 $mss = wfMsg( "makesysopsubmit" );
104 <td> </td><td align=left>
105 <input type=submit name=\"wpMakesysopSubmit\" value=\"{$mss}\">
115 global $wgOut, $wgUser, $wgLang, $wpMakesysopUser, $wpSetBureaucrat;
116 global $wgDBname, $wgMemc, $wpRights, $wgLocalDatabases;
118 $parts = explode( "@", $wpMakesysopUser );
119 if( count( $parts ) == 2 && $wgUser->isDeveloper() ){
120 $username = $parts[0];
121 if ( array_key_exists( $parts[1], $wgLocalDatabases ) ) {
122 $dbName = $wgLocalDatabases[$parts[1]];
123 $usertable = $dbName . ".user";
129 $username = $wpMakesysopUser;
133 if ( $username{0} == "#" ) {
134 $id = intval( substr( $username, 1 ) );
135 $sql = "SELECT user_id,user_rights FROM $usertable WHERE user_id=$id";
137 $encName = wfStrencode( $username );
138 $sql = "SELECT user_id, user_rights FROM $usertable WHERE user_name = '{$encName}'";
141 $prev = wfIgnoreSQLErrors( TRUE );
142 $res = wfQuery( $sql, DB_WRITE
);
143 wfIgnoreSQLErrors( $prev );
145 global $wgOut, $wgUser, $wgLang, $wpMakesysopUser, $wpSetBureaucrat;
146 global $wgDBname, $wgMemc, $wpRights, $wgLocalDatabases;
148 $parts = explode( "@", $wpMakesysopUser );
149 if( count( $parts ) == 2 && $wgUser->isDeveloper() ){
150 $username = wfStrencode( $parts[0] );
151 if ( array_key_exists( $parts[1], $wgLocalDatabases ) ) {
152 $dbName = $wgLocalDatabases[$parts[1]];
153 $usertable = $dbName . ".user";
159 $username = wfStrencode( $wpMakesysopUser );
163 if ( $username{0} == "#" ) {
164 $id = intval( substr( $username, 1 ) );
165 $sql = "SELECT user_id,user_rights FROM $usertable WHERE user_id=$id";
167 $encName = wfStrencode( $username );
168 $sql = "SELECT user_id, user_rights FROM $usertable WHERE user_name = '{$username}'";
172 $prev = wfIgnoreSQLErrors( TRUE );
173 $res = wfQuery("SELECT user_id, user_rights FROM $usertable WHERE user_name = '{$username}'", DB_WRITE
);
174 wfIgnoreSQLErrors( $prev );
176 if( wfLastErrno() ||
! $username ||
wfNumRows( $res ) == 0 ){
181 $row = wfFetchObject( $res );
182 $id = intval( $row->user_id
);
183 $rightsNotation = array();
185 if ( $wgUser->isDeveloper() ) {
186 $newrights = (string)$wpRights;
187 $rightsNotation[] = "=$wpRights";
189 if( $row->user_rights
){
190 $rights = explode(",", $row->user_rights
);
191 if(! in_array("sysop", $rights ) ){
193 $rightsNotation[] = "+sysop ";
195 if ( $wpSetBureaucrat && !in_array( "bureaucrat", $rights ) ) {
196 $rights[] = "bureaucrat";
197 $rightsNotation[] = "+bureaucrat ";
199 $newrights = addslashes( implode( ",", $rights ) );
201 $newrights = "sysop";
202 $rightsNotation[] = "+sysop";
203 if ( $wpSetBureaucrat ) {
204 $rightsNotation[] = "+bureaucrat";
205 $newrights .= ",bureaucrat";
210 if ( count( $rightsNotation ) == 0 ) {
213 $sql = "UPDATE $usertable SET user_rights = '{$newrights}' WHERE user_id = $id LIMIT 1";
214 wfQuery($sql, DB_WRITE
);
215 $wgMemc->delete( "$dbName:user:id:$id" );
217 $bureaucratLog = wfMsg( "bureaucratlog" );
218 $action = wfMsg( "bureaucratlogentry", $wpMakesysopUser, implode( " ", $rightsNotation ) );
220 $log = new LogPage( $bureaucratLog );
221 $log->addEntry( $action, "" );
223 $this->showSuccess();
227 function showSuccess()
229 global $wgOut, $wpMakesysopUser, $wgUser;
231 $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
233 if ( $wgUser->isDeveloper() ) {
234 $text = wfMsg( "user_rights_set", $wpMakesysopUser );
236 $text = wfMsg( "makesysopok", $wpMakesysopUser );
239 $wgOut->addWikiText( $text );
246 global $wgOut, $wpMakesysopUser, $wgUser;
248 $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
249 if ( $wgUser->isDeveloper() ) {
250 $this->showForm( wfMsg( "set_rights_fail", $wpMakesysopUser ) );
252 $this->showForm( wfMsg( "makesysopfail", $wpMakesysopUser ) );