Fix sort for proper index
[mediawiki.git] / includes / SpecialUserlogin.php
blob062e7d09af27f7aad3c020474a9e868ce0ffbf1e
1 <?
3 function wfSpecialUserlogin()
5 global $wpCreateaccount, $wpCreateaccountMail;
6 global $wpLoginattempt, $wpMailmypassword;
7 global $action;
9 $fields = array( "wpName", "wpPassword", "wpName",
10 "wpPassword", "wpRetype", "wpEmail" );
11 wfCleanFormFields( $fields );
13 if ( isset( $wpCreateaccount ) ) {
14 addNewAccount();
15 } else if ( isset( $wpCreateaccountMail ) ) {
16 addNewAccountMailPassword();
17 } else if ( isset( $wpMailmypassword ) ) {
18 mailPassword();
19 } else if ( "submit" == $action || isset( $wpLoginattempt ) ) {
20 processLogin();
21 } else {
22 mainLoginForm( "" );
27 /* private */ function addNewAccountMailPassword()
29 global $wgOut, $wpEmail, $wpName;
31 if ("" == $wpEmail) {
32 mainLoginForm( wfMsg( "noemail", $wpName ) );
33 return;
36 $u = addNewaccountInternal();
38 if ($u == NULL) {
39 return;
42 $u->saveSettings();
43 if (mailPasswordInternal($u) == NULL)
45 return;
48 $wgOut->setPageTitle( wfMsg( "accmailtitle" ) );
49 $wgOut->setRobotpolicy( "noindex,nofollow" );
50 $wgOut->setArticleFlag( false );
52 $wgOut->addWikiText( wfMsg( "accmailtext", $u->getName(), $u->getEmail() ) );
53 $wgOut->returnToMain( false );
55 $u = 0;
59 /* private */ function addNewAccount()
61 global $wgUser, $wgOut, $wpPassword, $wpRetype, $wpName, $wpRemember;
62 global $wpEmail, $wgDeferredUpdateList;
64 $u = addNewAccountInternal();
66 if ($u == NULL) {
67 return;
70 $wgUser = $u;
71 successfulLogin( wfMsg( "welcomecreation", $wgUser->getName() ) );
75 /* private */ function addNewAccountInternal()
77 global $wgUser, $wgOut, $wpPassword, $wpRetype, $wpName, $wpRemember;
78 global $wpEmail, $wgDeferredUpdateList;
80 if (!$wgUser->isAllowedToCreateAccount()) {
81 userNotPrivilegedMessage();
82 return;
85 if ( 0 != strcmp( $wpPassword, $wpRetype ) ) {
86 mainLoginForm( wfMsg( "badretype" ) );
87 return;
89 $wpName = trim( $wpName );
90 if ( ( "" == $wpName ) ||
91 preg_match( "/\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}/", $wpName ) ||
92 (strpos( $wpName, "/" ) !== false) )
94 mainLoginForm( wfMsg( "noname" ) );
95 return;
97 if ( wfReadOnly() ) {
98 $wgOut->readOnlyPage();
99 return;
101 $u = User::newFromName( $wpName );
103 if ( 0 != $u->idForName() ) {
104 mainLoginForm( wfMsg( "userexists" ) );
105 return;
107 $u->addToDatabase();
108 $u->setPassword( $wpPassword );
109 $u->setEmail( $wpEmail );
110 if ( 1 == $wpRemember ) { $r = 1; }
111 else { $r = 0; }
112 $u->setOption( "rememberpassword", $r );
114 return $u;
120 /* private */ function processLogin()
122 global $wgUser, $wpName, $wpPassword, $wpRemember;
123 global $returnto;
125 if ( "" == $wpName ) {
126 mainLoginForm( wfMsg( "noname" ) );
127 return;
129 $u = User::newFromName( $wpName );
130 $id = $u->idForName();
131 if ( 0 == $id ) {
132 mainLoginForm( wfMsg( "nosuchuser", $u->getName() ) );
133 return;
135 $u->setId( $id );
136 $u->loadFromDatabase();
137 $ep = $u->encryptPassword( $wpPassword );
138 if ( 0 != strcmp( $ep, $u->getPassword() ) ) {
139 if ( 0 != strcmp( $ep, $u->getNewpassword() ) ) {
140 mainLoginForm( wfMsg( "wrongpassword" ) );
141 return;
145 # We've verified now, update the real record
147 if ( 1 == $wpRemember ) {
148 $r = 1;
149 $u->setCookiePassword( $wpPassword );
150 } else {
151 $r = 0;
153 $u->setOption( "rememberpassword", $r );
155 $wgUser = $u;
156 successfulLogin( wfMsg( "loginsuccess", $wgUser->getName() ) );
159 /* private */ function mailPassword()
161 global $wgUser, $wpName, $wgDeferredUpdateList, $wgOutputEncoding;
162 global $wgCookiePath, $wgCookieDomain, $wgDBname;
164 if ( "" == $wpName ) {
165 mainLoginForm( wfMsg( "noname" ) );
166 return;
168 $u = User::newFromName( $wpName );
169 $id = $u->idForName();
170 if ( 0 == $id ) {
171 mainLoginForm( wfMsg( "nosuchuser", $u->getName() ) );
172 return;
174 $u->setId( $id );
175 $u->loadFromDatabase();
177 if (mailPasswordInternal($u) == NULL) {
178 return;
181 mainLoginForm( wfMsg( "passwordsent", $u->getName() ) );
185 /* private */ function mailPasswordInternal( $u )
187 global $wpName, $wgDeferredUpdateList, $wgOutputEncoding;
188 global $wgPasswordSender;
190 if ( "" == $u->getEmail() ) {
191 mainLoginForm( wfMsg( "noemail", $u->getName() ) );
192 return;
194 $np = User::randomPassword();
195 $u->setNewpassword( $np );
197 setcookie( "{$wgDBname}Password", "", time() - 3600, $wgCookiePath, $wgCookieDomain );
198 $u->saveSettings();
200 $ip = getenv( "REMOTE_ADDR" );
201 if ( "" == $ip ) { $ip = "(Unknown)"; }
203 $m = wfMsg( "passwordremindertext", $ip, $u->getName(), $np );
205 mail( $u->getEmail(), wfMsg( "passwordremindertitle" ), $m,
206 "MIME-Version: 1.0\r\n" .
207 "Content-type: text/plain; charset={$wgOutputEncoding}\r\n" .
208 "Content-transfer-encoding: 8bit\r\n" .
209 "From: $wgPasswordSender" );
211 return $u;
218 /* private */ function successfulLogin( $msg )
220 global $wgUser, $wgOut, $returnto;
221 global $wgDeferredUpdateList;
223 $wgUser->setCookies();
224 $up = new UserUpdate();
225 array_push( $wgDeferredUpdateList, $up );
227 $wgOut->setPageTitle( wfMsg( "loginsuccesstitle" ) );
228 $wgOut->setRobotpolicy( "noindex,nofollow" );
229 $wgOut->setArticleFlag( false );
230 $wgOut->addHTML( $msg . "\n<p>" );
231 $wgOut->returnToMain();
238 function userNotPrivilegedMessage()
240 global $wgOut, $wgUser, $wgLang;
242 $wgOut->setPageTitle( wfMsg( "whitelistacctitle" ) );
243 $wgOut->setRobotpolicy( "noindex,nofollow" );
244 $wgOut->setArticleFlag( false );
246 $wgOut->addWikiText( wfMsg( "whitelistacctext" ) );
247 $wgOut->returnToMain( false );
253 /* private */ function mainLoginForm( $err )
255 global $wgUser, $wgOut, $wgLang, $returnto;
256 global $wpName, $wpPassword, $wpRetype, $wpRemember;
257 global $wpEmail, $HTTP_COOKIE_VARS, $wgDBname;
259 $le = wfMsg( "loginerror" );
260 $yn = wfMsg( "yourname" );
261 $yp = wfMsg( "yourpassword" );
262 $ypa = wfMsg( "yourpasswordagain" );
263 $rmp = wfMsg( "remembermypassword" );
264 $ayn = wfMsg( "areyounew" );
265 $nuo = wfMsg( "newusersonly" );
266 $li = wfMsg( "login" );
267 $ca = wfMsg( "createaccount" );
268 $cam = wfMsg( "createaccountmail" );
269 $ye = wfMsg( "youremail" );
270 $efl = wfMsg( "emailforlost" );
271 $mmp = wfMsg( "mailmypassword" );
273 $name = $wpName;
274 if ( "" == $name ) {
275 if ( 0 != $wgUser->getID() ) {
276 $name = $wgUser->getName();
277 } else {
278 $name = $HTTP_COOKIE_VARS["{$wgDBname}UserName"];
281 $pwd = $wpPassword;
283 $wgOut->setPageTitle( wfMsg( "userlogin" ) );
284 $wgOut->setRobotpolicy( "noindex,nofollow" );
285 $wgOut->setArticleFlag( false );
287 if ( "" == $err ) {
288 $wgOut->addHTML( "<h2>$li:</h2>\n" );
289 } else {
290 $wgOut->addHTML( "<h2>$le:</h2>\n<font size='+1'
291 color='red'>$err</font>\n" );
293 if ( 1 == $wgUser->getOption( "rememberpassword" ) ) {
294 $checked = " checked";
295 } else {
296 $checked = "";
298 $q = "action=submit";
299 if ( "" != $returnto ) { $q .= "&returnto=" . wfUrlencode($returnto); }
300 $action = wfLocalUrlE( $wgLang->specialPage( "Userlogin" ), $q );
302 $wpName = wfEscapeHTML( $wpName );
303 $wpPassword = wfEscapeHTML( $wpPassword );
304 $wpRetype = wfEscapeHTML( $wpRetype );
305 $wpEmail = wfEscapeHTML( $wpEmail );
307 if ($wgUser->getID() != 0) {
308 $cambutton = "<input tabindex=6 type=submit name=\"wpCreateaccountMail\" value=\"{$cam}\">";
311 $wgOut->addHTML( "
312 <form name=\"userlogin\" id=\"userlogin\" method=\"post\" action=\"{$action}\">
313 <table border=0><tr>
314 <td align=right>$yn:</td>
315 <td colspan=2 align=left>
316 <input tabindex=1 type=text name=\"wpName\" value=\"{$name}\" size=20>
317 </td></tr><tr>
318 <td align=right>$yp:</td>
319 <td align=left>
320 <input tabindex=2 type=password name=\"wpPassword\" value=\"{$pwd}\" size=20>
321 </td>
322 <td align=left>
323 <input tabindex=3 type=submit name=\"wpLoginattempt\" value=\"{$li}\">
324 </td></tr>");
326 if ($wgUser->isAllowedToCreateAccount()) {
328 $wgOut->addHTML("<tr><td colspan=3>&nbsp;</td></tr><tr>
329 <td align=right>$ypa:</td>
330 <td align=left>
331 <input tabindex=4 type=password name=\"wpRetype\" value=\"{$wpRetype}\"
332 size=20>
333 </td><td>$nuo</td></tr>
334 <tr>
335 <td align=right>$ye:</td>
336 <td align=left>
337 <input tabindex=5 type=text name=\"wpEmail\" value=\"{$wpEmail}\" size=20>
338 </td><td align=left>
339 <input tabindex=6 type=submit name=\"wpCreateaccount\" value=\"{$ca}\">
340 $cambutton
341 </td></tr>");
344 $wgOut->addHTML("
345 <tr>
346 <td colspan=3 align=left>
347 <input tabindex=7 type=checkbox name=\"wpRemember\" value=\"1\" id=\"wpRemember\"$checked><label for=\"wpRemember\">$rmp</label>
348 </td></tr>
349 <tr><td colspan=3>&nbsp;</td></tr><tr>
350 <td colspan=3 align=left>
351 <p>$efl<br>
352 <input tabindex=8 type=submit name=\"wpMailmypassword\" value=\"{$mmp}\">
353 </td></tr></table>
354 </form>\n" );