bug 1004 Capitalized Norsk
[lhc/web/wiklou.git] / includes / SpecialMakesysop.php
1 <?php
2 /**
3 * File is replaced by SpecialUserlevels. It is kept here for migration purposes
4 * @package MediaWiki
5 * @subpackage SpecialPage
6 * @deprecated
7 */
8
9 die('Use SpecialUserlevels instead !!'); // [av]
10
11
12 /**
13 *
14 */
15 require_once( "LinksUpdate.php" );
16
17 /**
18 * Constructor
19 */
20 function wfSpecialMakesysop() {
21 global $wgUser, $wgOut, $wgRequest;
22
23 if ( 0 == $wgUser->getID() or $wgUser->isBlocked() ) {
24 $wgOut->errorpage( "movenologin", "movenologintext" );
25 return;
26 }
27 if (! $wgUser->isAllowed('userrights') ) {
28 $wgOut->errorpage( "bureaucrattitle", "bureaucrattext" );
29 return;
30 }
31
32 if ( wfReadOnly() ) {
33 $wgOut->readOnlyPage();
34 return;
35 }
36
37 $f = new MakesysopForm( $wgRequest );
38
39 if ( $f->mSubmit ) {
40 $f->doSubmit();
41 } else {
42 $f->showForm( '' );
43 }
44 }
45
46 /**
47 *
48 * @package MediaWiki
49 * @subpackage SpecialPage
50 */
51 class MakesysopForm {
52 var $mTarget, $mAction, $mRights, $mUser, $mSubmit;
53
54 function MakesysopForm( &$request ) {
55 $this->mAction = $request->getText( 'action' );
56 $this->mRights = $request->getVal( 'wpRights' );
57 $this->mUser = $request->getText( 'wpMakesysopUser' );
58 $this->mSubmit = $request->getBool( 'wpMakesysopSubmit' ) && $request->wasPosted();
59 $this->mBuro = $request->getBool( 'wpSetBureaucrat' );
60 }
61
62 function showForm( $err = '') {
63 global $wgOut, $wgUser, $wgLang;
64
65 if ( $wgUser->isDeveloper() ) {
66 $wgOut->setPageTitle( wfMsg( "set_user_rights" ) );
67 } else {
68 $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
69 }
70
71 $wgOut->addWikiText( wfMsg( "makesysoptext" ) );
72
73 $titleObj = Title::makeTitle( NS_SPECIAL, "Makesysop" );
74 $action = $titleObj->escapeLocalURL( "action=submit" );
75
76 if ( "" != $err ) {
77 $wgOut->setSubtitle( wfMsg( "formerror" ) );
78 $wgOut->addHTML( "<p class='error'>{$err}</p>\n" );
79 }
80 $namedesc = wfMsg( "makesysopname" );
81 if ( !is_null( $this->mUser ) ) {
82 $encUser = htmlspecialchars( $this->mUser );
83 } else {
84 $encUser = "";
85 }
86
87 $wgOut->addHTML( "
88 <form id=\"makesysop\" method=\"post\" action=\"{$action}\">
89 <table border='0'>
90 <tr>
91 <td align='right'>$namedesc</td>
92 <td align='left'>
93 <input type='text' size='40' name=\"wpMakesysopUser\" value=\"$encUser\" />
94 </td>
95 </tr>"
96 );
97
98 $makeburo = wfMsg( "setbureaucratflag" );
99 $wgOut->addHTML(
100 "<tr>
101 <td>&nbsp;</td><td align=left>
102 <input type=checkbox name=\"wpSetBureaucrat\" value=1>$makeburo
103 </td>
104 </tr>"
105 );
106
107 if ( $wgUser->isDeveloper() ) {
108 $rights = wfMsg( "rights" );
109 if ( !is_null( $this->mRights ) ) {
110 $encRights = htmlspecialchars( $this->mRights );
111 } else {
112 $encRights = "sysop";
113 }
114
115 $wgOut->addHTML( "
116 <tr>
117 <td align='right'>$rights</td>
118 <td align='left'>
119 <input type='text' size='40' name=\"wpRights\" value=\"$encRights\" />
120 </td>
121 </tr>"
122 );
123 }
124
125 if ( $wgUser->isDeveloper() ) {
126 $mss = wfMsg( "set_user_rights" );
127 } else {
128 $mss = wfMsg( "makesysopsubmit" );
129 }
130 $wgOut->addHTML(
131 "<tr>
132 <td>&nbsp;</td><td align='left'>
133 <input type='submit' name=\"wpMakesysopSubmit\" value=\"{$mss}\" />
134 </td></tr></table>
135 </form>\n"
136 );
137
138 }
139
140 function doSubmit() {
141 global $wgOut, $wgUser, $wgLang;
142 global $wgDBname, $wgMemc, $wgLocalDatabases;
143
144 $fname = 'MakesysopForm::doSubmit';
145
146 $dbw =& wfGetDB( DB_MASTER );
147 $parts = explode( '@', $this->mUser );
148 $user_rights = $dbw->tableName( 'user_rights' );
149 $usertable = $dbw->tableName( 'user' );
150
151 if( count( $parts ) == 2 && $wgUser->isDeveloper() && strpos( '.', $user_rights ) === false ){
152 $username = $dbw->strencode( $parts[0] );
153 if ( array_key_exists( $parts[1], $wgLocalDatabases ) ) {
154 $dbName = $wgLocalDatabases[$parts[1]];
155 $user_rights = $dbName . '.' . $user_rights;
156 $usertable = $usertable . '.' . $usertable;
157 } else {
158 $this->showFail();
159 return;
160 }
161 } else {
162 $username = wfStrencode( $this->mUser );
163 $dbName = $wgDBname;
164 }
165 if ( $username{0} == "#" ) {
166 $id = intval( substr( $username, 1 ) );
167 $sql = "SELECT ur_user,ur_rights FROM $user_rights WHERE ur_user=$id FOR UPDATE";
168 } else {
169 $encName = $dbw->strencode( $username );
170 $sql = "SELECT ur_user, ur_rights FROM $usertable LEFT JOIN $user_rights ON user_id=ur_user WHERE user_name = '{$username}' FOR UPDATE";
171 }
172
173 $prev = $dbw->ignoreErrors( TRUE );
174 $res = $dbw->query( $sql );
175 $dbw->ignoreErrors( $prev );
176
177 if( $dbw->lastErrno() || ! $username || $dbw->numRows( $res ) == 0 ){
178 $this->showFail();
179 return;
180 }
181
182 $row = $dbw->fetchObject( $res );
183 $id = intval( $row->ur_user );
184 $rightsNotation = array();
185
186 if ( $wgUser->isDeveloper() ) {
187 $newrights = (string)$this->mRights;
188 $rightsNotation[] = "=$this->mRights";
189 } else {
190 if( $row->ur_rights ){
191 $rights = explode(",", $row->ur_rights );
192 if(! in_array("sysop", $rights ) ){
193 $rights[] = "sysop";
194 $rightsNotation[] = "+sysop ";
195 }
196 if ( $this->mBuro && !in_array( "bureaucrat", $rights ) ) {
197 $rights[] = "bureaucrat";
198 $rightsNotation[] = "+bureaucrat ";
199 }
200 $newrights = addslashes( implode( ",", $rights ) );
201 } else {
202 $newrights = "sysop";
203 $rightsNotation[] = "+sysop";
204 if ( $this->mBuro ) {
205 $rightsNotation[] = "+bureaucrat";
206 $newrights .= ",bureaucrat";
207 }
208 }
209 }
210
211 if ( count( $rightsNotation ) == 0 ) {
212 $this->showFail();
213 } else {
214 #$sql = "UPDATE $user_rights SET user_rights = '{$newrights}' WHERE user_id = $id LIMIT 1";
215 #$dbw->query($sql);
216 $dbw->replace( $user_rights, array( array( 'ur_user', 'ur_rights' )),
217 array( 'ur_user' => $id, 'ur_rights' => $newrights ) , $fname );
218 $wgMemc->delete( "$dbName:user:id:$id" );
219
220 $log = new LogPage( 'rights' );
221 $log->addEntry( 'rights', Title::makeTitle( NS_USER, $this->mUser ),
222 implode( " ", $rightsNotation ) );
223
224 $this->showSuccess();
225 }
226 }
227
228 function showSuccess() {
229 global $wgOut, $wgUser;
230
231 $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
232
233 if ( $wgUser->isDeveloper() ) {
234 $text = wfMsg( "user_rights_set", $this->mUser );
235 } else {
236 $text = wfMsg( "makesysopok", $this->mUser );
237 }
238 $text .= "\n\n";
239 $wgOut->addWikiText( $text );
240 $this->showForm();
241
242 }
243
244 function showFail() {
245 global $wgOut, $wgUser;
246
247 $wgOut->setPagetitle( wfMsg( "makesysoptitle" ) );
248 if ( $wgUser->isDeveloper() ) {
249 $this->showForm( wfMsg( "set_rights_fail", $this->mUser ) );
250 } else {
251 $this->showForm( wfMsg( "makesysopfail", $this->mUser ) );
252 }
253 }
254 }
255 ?>