298 $template->header(); |
298 $template->header(); |
299 echo '<h3>An error occurred during the logout process.</h3><p>'.$l.'</p>'; |
299 echo '<h3>An error occurred during the logout process.</h3><p>'.$l.'</p>'; |
300 $template->footer(); |
300 $template->footer(); |
301 } |
301 } |
302 |
302 |
303 function page_Special_Register() { |
303 function page_Special_Register() |
|
304 { |
304 global $db, $session, $paths, $template, $plugins; // Common objects |
305 global $db, $session, $paths, $template, $plugins; // Common objects |
305 if(getConfig('account_activation') == 'disable' && ( ( $session->user_level >= USER_LEVEL_ADMIN && !isset($_GET['IWannaPlayToo']) ) || $session->user_level < USER_LEVEL_ADMIN || !$session->user_logged_in )) |
306 if(getConfig('account_activation') == 'disable' && ( ( $session->user_level >= USER_LEVEL_ADMIN && !isset($_GET['IWannaPlayToo']) ) || $session->user_level < USER_LEVEL_ADMIN || !$session->user_logged_in )) |
306 { |
307 { |
307 $s = ($session->user_level >= USER_LEVEL_ADMIN) ? '<p>Oops...it seems that you <em>are</em> the administrator...hehe...you can also <a href="'.makeUrl($paths->page, 'IWannaPlayToo', true).'">force account registration to work</a>.</p>' : ''; |
308 $s = ($session->user_level >= USER_LEVEL_ADMIN) ? '<p>Oops...it seems that you <em>are</em> the administrator...hehe...you can also <a href="'.makeUrl($paths->page, 'IWannaPlayToo', true).'">force account registration to work</a>.</p>' : ''; |
308 die_friendly('Registration disabled', '<p>The administrator has disabled new user registration on this site.</p>' . $s); |
309 die_friendly('Registration disabled', '<p>The administrator has disabled new user registration on this site.</p>' . $s); |
309 } |
310 } |
310 if(isset($_POST['submit'])) { |
311 if(isset($_POST['submit'])) |
|
312 { |
|
313 $_GET['coppa'] = ( isset($_POST['coppa']) ) ? $_POST['coppa'] : 'x'; |
|
314 |
311 $captcharesult = $session->get_captcha($_POST['captchahash']); |
315 $captcharesult = $session->get_captcha($_POST['captchahash']); |
312 if($captcharesult != $_POST['captchacode']) |
316 if($captcharesult != $_POST['captchacode']) |
|
317 { |
313 $s = 'The confirmation code you entered was incorrect.'; |
318 $s = 'The confirmation code you entered was incorrect.'; |
|
319 } |
314 else |
320 else |
315 // CAPTCHA code was correct, create the account |
321 { |
316 $s = $session->create_user($_POST['username'], $_POST['password'], $_POST['email'], $_POST['real_name']); |
322 if ( getConfig('enable_coppa') == '1' && ( !isset($_POST['coppa']) || ( isset($_POST['coppa']) && !in_array($_POST['coppa'], array('yes', 'no')) ) ) ) |
317 if($s == 'success') |
323 { |
|
324 $s = 'Invalid COPPA input'; |
|
325 } |
|
326 else |
|
327 { |
|
328 $coppa = ( isset($_POST['coppa']) && $_POST['coppa'] == 'yes' ); |
|
329 |
|
330 // CAPTCHA code was correct, create the account |
|
331 $s = $session->create_user($_POST['username'], $_POST['password'], $_POST['email'], $_POST['real_name'], $coppa); |
|
332 } |
|
333 } |
|
334 if($s == 'success' && !isset($coppa)) |
318 { |
335 { |
319 switch(getConfig('account_activation')) |
336 switch(getConfig('account_activation')) |
320 { |
337 { |
321 case "none": |
338 case "none": |
322 default: |
339 default: |
329 $str = 'Because this site requires administrative account activation, you cannot use your account at the moment. A notice has been sent to the site administration team that will alert them that your account has been created.'; |
346 $str = 'Because this site requires administrative account activation, you cannot use your account at the moment. A notice has been sent to the site administration team that will alert them that your account has been created.'; |
330 break; |
347 break; |
331 } |
348 } |
332 die_friendly('Registration successful', '<p>Thank you for registering, your user account has been created. '.$str.'</p>'); |
349 die_friendly('Registration successful', '<p>Thank you for registering, your user account has been created. '.$str.'</p>'); |
333 } |
350 } |
|
351 else if ( $s == 'success' && $coppa ) |
|
352 { |
|
353 $str = 'However, in compliance with the Childrens\' Online Privacy Protection Act, you must have your parent or legal guardian activate your account. Please ask them to check their e-mail for further information.'; |
|
354 die_friendly('Registration successful', '<p>Thank you for registering, your user account has been created. '.$str.'</p>'); |
|
355 } |
334 } |
356 } |
335 $template->header(); |
357 $template->header(); |
336 echo 'A user account enables you to have greater control over your browsing experience.'; |
358 echo 'A user account enables you to have greater control over your browsing experience.'; |
337 $session->kill_captcha(); |
359 |
338 $captchacode = $session->make_captcha(); |
360 if ( getConfig('enable_coppa') != '1' || ( isset($_GET['coppa']) && in_array($_GET['coppa'], array('yes', 'no')) ) ) |
339 ?> |
361 { |
340 <h3>Create a user account</h3> |
362 $coppa = ( isset($_GET['coppa']) && $_GET['coppa'] == 'yes' ); |
341 <form name="regform" action="<?php echo makeUrl($paths->page); ?>" method="post"> |
363 $session->kill_captcha(); |
342 <div class="tblholder"> |
364 $captchacode = $session->make_captcha(); |
343 <table border="0" width="100%" cellspacing="1" cellpadding="4"> |
365 ?> |
344 <tr><th class="subhead" colspan="3">Please tell us a little bit about yourself.</th></tr> |
366 <h3>Create a user account</h3> |
345 <?php if(isset($_POST['submit'])) echo '<tr><td colspan="3" class="row2" style="color: red;">'.$s.'</td></tr>'; ?> |
367 <form name="regform" action="<?php echo makeUrl($paths->page); ?>" method="post"> |
346 <tr><td class="row1" style="width: 50%;">Preferred username:<span id="e_username"></span></td><td class="row1" style="width: 50%;"><input type="text" name="username" size="30" onkeyup="namegood = false; validateForm();" onblur="checkUsername();" /></td><td class="row1" style="max-width: 24px;"><img alt="Good/bad icon" src="<?php echo scriptPath; ?>/images/bad.gif" id="s_username" /></td></tr> |
368 <div class="tblholder"> |
347 <tr><td class="row3" style="width: 50%;" rowspan="2">Password:<span id="e_password"></span></td><td class="row3" style="width: 50%;"><input type="password" name="password" size="30" onkeyup="validateForm();" /></td><td rowspan="2" class="row3" style="max-width: 24px;"><img alt="Good/bad icon" src="<?php echo scriptPath; ?>/images/bad.gif" id="s_password" /></td></tr> |
369 <table border="0" width="100%" cellspacing="1" cellpadding="4"> |
348 <tr><td class="row3" style="width: 50%;"><input type="password" name="password_confirm" size="30" onkeyup="validateForm();" /> <small>Enter your password again to confirm.</small></td></tr> |
370 <tr><th class="subhead" colspan="3">Please tell us a little bit about yourself.</th></tr> |
349 <tr><td class="row1" style="width: 50%;">E-mail address:<?php if(getConfig('account_activation')=='user') echo '<br /><small>An e-mail with an account activation key will be sent to this address, so please ensure that it is correct.</small></td>'; ?><td class="row1" style="width: 50%;"><input type="text" name="email" size="30" onkeyup="validateForm();" /></td><td class="row1" style="max-width: 24px;"><img alt="Good/bad icon" src="<?php echo scriptPath; ?>/images/bad.gif" id="s_email" /></td></tr> |
371 <?php if(isset($_POST['submit'])) echo '<tr><td colspan="3" class="row2" style="color: red;">'.$s.'</td></tr>'; ?> |
350 <tr><td class="row3" style="width: 50%;">Real name:<br /><small>Giving your real name is totally optional. If you choose to provide your real name, it will be used to provide attribution for any edits or contributions you may make to this site.</small><td class="row3" style="width: 50%;"><input type="text" name="real_name" size="30" /></td><td class="row3" style="max-width: 24px;"></td></tr> |
372 <tr><td class="row1" style="width: 50%;">Preferred username:<span id="e_username"></span></td><td class="row1" style="width: 50%;"><input type="text" name="username" size="30" onkeyup="namegood = false; validateForm();" onblur="checkUsername();" /></td><td class="row1" style="max-width: 24px;"><img alt="Good/bad icon" src="<?php echo scriptPath; ?>/images/bad.gif" id="s_username" /></td></tr> |
351 <tr><td class="row1" style="width: 50%;" rowspan="2">Visual confirmation<br /><small>Please enter the code shown in the image to the right into the text box. This process helps to ensure that this registration is not being performed by an automated bot. If the image to the right is illegible, you can <a href="#" onclick="regenCaptcha(); return false;">generate a new image</a>.<br /><br />If you are visually impaired or otherwise cannot read the text shown to the right, please contact the site management and they will create an account for you.</small></td><td colspan="2" class="row1"><img id="captchaimg" alt="CAPTCHA image" src="<?php echo makeUrlNS('Special', 'Captcha/'.$captchacode); ?>" /><span id="b_username"></span></td></tr> |
373 <tr><td class="row3" style="width: 50%;" rowspan="2">Password:<span id="e_password"></span></td><td class="row3" style="width: 50%;"><input type="password" name="password" size="30" onkeyup="validateForm();" /></td><td rowspan="2" class="row3" style="max-width: 24px;"><img alt="Good/bad icon" src="<?php echo scriptPath; ?>/images/bad.gif" id="s_password" /></td></tr> |
352 <tr><td class="row1" colspan="2">Code: <input name="captchacode" type="text" size="10" /><input type="hidden" name="captchahash" value="<?php echo $captchacode; ?>" /></td></tr> |
374 <tr><td class="row3" style="width: 50%;"><input type="password" name="password_confirm" size="30" onkeyup="validateForm();" /> <small>Enter your password again to confirm.</small></td></tr> |
353 <tr><td class="row2" colspan="3" style="text-align: center;"><input type="submit" name="submit" value="Create my account" /></td></tr> |
375 <tr><td class="row1" style="width: 50%;"><?php if ( $coppa ) echo 'Your parent or guardian\'s e'; else echo 'E'; ?>-mail address:<?php if(getConfig('account_activation')=='user') echo '<br /><small>An e-mail with an account activation key will be sent to this address, so please ensure that it is correct.</small></td>'; ?><td class="row1" style="width: 50%;"><input type="text" name="email" size="30" onkeyup="validateForm();" /></td><td class="row1" style="max-width: 24px;"><img alt="Good/bad icon" src="<?php echo scriptPath; ?>/images/bad.gif" id="s_email" /></td></tr> |
354 </table> |
376 <tr><td class="row3" style="width: 50%;">Real name:<br /><small>Giving your real name is totally optional. If you choose to provide your real name, it will be used to provide attribution for any edits or contributions you may make to this site.</small><td class="row3" style="width: 50%;"><input type="text" name="real_name" size="30" /></td><td class="row3" style="max-width: 24px;"></td></tr> |
355 </div> |
377 <tr><td class="row1" style="width: 50%;" rowspan="2">Visual confirmation<br /><small>Please enter the code shown in the image to the right into the text box. This process helps to ensure that this registration is not being performed by an automated bot. If the image to the right is illegible, you can <a href="#" onclick="regenCaptcha(); return false;">generate a new image</a>.<br /><br />If you are visually impaired or otherwise cannot read the text shown to the right, please contact the site management and they will create an account for you.</small></td><td colspan="2" class="row1"><img id="captchaimg" alt="CAPTCHA image" src="<?php echo makeUrlNS('Special', 'Captcha/'.$captchacode); ?>" /><span id="b_username"></span></td></tr> |
356 </form> |
378 <tr><td class="row1" colspan="2">Code: <input name="captchacode" type="text" size="10" /><input type="hidden" name="captchahash" value="<?php echo $captchacode; ?>" /></td></tr> |
357 <script type="text/javascript"> |
379 <tr><td class="row2" colspan="3" style="text-align: center;"><input type="submit" name="submit" value="Create my account" /></td></tr> |
358 // <![CDATA[ |
380 </table> |
359 var namegood = false; |
381 </div> |
360 function validateForm() |
382 <?php |
361 { |
383 $val = ( $coppa ) ? 'yes' : 'no'; |
362 var frm = document.forms.regform; |
384 echo '<input type="hidden" name="coppa" value="' . $val . '" />'; |
363 failed = false; |
385 ?> |
364 |
386 </form> |
365 // Username |
387 <script type="text/javascript"> |
366 if(!namegood) |
388 // <![CDATA[ |
367 { |
389 var namegood = false; |
368 if(frm.username.value.match(/^([A-z0-9 \!@\-\(\)]+){2,}$/ig)) |
390 function validateForm() |
|
391 { |
|
392 var frm = document.forms.regform; |
|
393 failed = false; |
|
394 |
|
395 // Username |
|
396 if(!namegood) |
369 { |
397 { |
370 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/unknown.gif'; |
398 if(frm.username.value.match(/^([A-z0-9 \!@\-\(\)]+){2,}$/ig)) |
371 document.getElementById('e_username').innerHTML = ''; // '<br /><small><b>Checking availability...</b></small>'; |
399 { |
|
400 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/unknown.gif'; |
|
401 document.getElementById('e_username').innerHTML = ''; // '<br /><small><b>Checking availability...</b></small>'; |
|
402 } else { |
|
403 failed = true; |
|
404 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/bad.gif'; |
|
405 document.getElementById('e_username').innerHTML = '<br /><small>Your username must be at least two characters in length and may contain only alphanumeric characters (A-Z and 0-9), spaces, and the following characters: :, !, @, #, *.</small>'; |
|
406 } |
|
407 } |
|
408 document.getElementById('b_username').innerHTML = ''; |
|
409 if(hex_md5(frm.real_name.value) == 'fa8e397ae0f6cd5b0f90a3f48178cd7e') |
|
410 { |
|
411 document.getElementById('b_username').innerHTML = '<br /><br />Hey...I know you!<br /><img alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Bill_Gates_2004_cr.jpg/220px-Bill_Gates_2004_cr.jpg" />'; |
|
412 } |
|
413 |
|
414 // Password |
|
415 if(frm.password.value.match(/^(.+){6,}$/ig) && frm.password_confirm.value.match(/^(.+){6,}$/ig) && frm.password.value == frm.password_confirm.value) |
|
416 { |
|
417 document.getElementById('s_password').src='<?php echo scriptPath; ?>/images/good.gif'; |
|
418 document.getElementById('e_password').innerHTML = '<br /><small>The password you entered is valid.</small>'; |
372 } else { |
419 } else { |
373 failed = true; |
420 failed = true; |
374 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/bad.gif'; |
421 if(frm.password.value.length < 6) |
375 document.getElementById('e_username').innerHTML = '<br /><small>Your username must be at least two characters in length and may contain only alphanumeric characters (A-Z and 0-9), spaces, and the following characters: :, !, @, #, *.</small>'; |
422 document.getElementById('e_password').innerHTML = '<br /><small>Your password must be at least six characters in length.</small>'; |
|
423 else if(frm.password.value != frm.password_confirm.value) |
|
424 document.getElementById('e_password').innerHTML = '<br /><small>The passwords you entered do not match.</small>'; |
|
425 else |
|
426 document.getElementById('e_password').innerHTML = ''; |
|
427 document.getElementById('s_password').src='<?php echo scriptPath; ?>/images/bad.gif'; |
376 } |
428 } |
377 } |
429 |
378 document.getElementById('b_username').innerHTML = ''; |
430 // E-mail address |
379 if(hex_md5(frm.real_name.value) == 'fa8e397ae0f6cd5b0f90a3f48178cd7e') |
431 if(frm.email.value.match(/^(?:[\w\d]+\.?)+@(?:(?:[\w\d]\-?)+\.)+\w{2,4}$/)) |
380 { |
|
381 document.getElementById('b_username').innerHTML = '<br /><br />Hey...I know you!<br /><img alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Bill_Gates_2004_cr.jpg/220px-Bill_Gates_2004_cr.jpg" />'; |
|
382 } |
|
383 |
|
384 // Password |
|
385 if(frm.password.value.match(/^(.+){6,}$/ig) && frm.password_confirm.value.match(/^(.+){6,}$/ig) && frm.password.value == frm.password_confirm.value) |
|
386 { |
|
387 document.getElementById('s_password').src='<?php echo scriptPath; ?>/images/good.gif'; |
|
388 document.getElementById('e_password').innerHTML = '<br /><small>The password you entered is valid.</small>'; |
|
389 } else { |
|
390 failed = true; |
|
391 if(frm.password.value.length < 6) |
|
392 document.getElementById('e_password').innerHTML = '<br /><small>Your password must be at least six characters in length.</small>'; |
|
393 else if(frm.password.value != frm.password_confirm.value) |
|
394 document.getElementById('e_password').innerHTML = '<br /><small>The passwords you entered do not match.</small>'; |
|
395 else |
|
396 document.getElementById('e_password').innerHTML = ''; |
|
397 document.getElementById('s_password').src='<?php echo scriptPath; ?>/images/bad.gif'; |
|
398 } |
|
399 |
|
400 // E-mail address |
|
401 if(frm.email.value.match(/^(?:[\w\d]+\.?)+@(?:(?:[\w\d]\-?)+\.)+\w{2,4}$/)) |
|
402 { |
|
403 document.getElementById('s_email').src='<?php echo scriptPath; ?>/images/good.gif'; |
|
404 } else { |
|
405 failed = true; |
|
406 document.getElementById('s_email').src='<?php echo scriptPath; ?>/images/bad.gif'; |
|
407 } |
|
408 if(failed) |
|
409 { |
|
410 frm.submit.disabled = 'disabled'; |
|
411 } else { |
|
412 frm.submit.disabled = false; |
|
413 } |
|
414 } |
|
415 function checkUsername() |
|
416 { |
|
417 var frm = document.forms.regform; |
|
418 |
|
419 if(!namegood) |
|
420 { |
|
421 if(frm.username.value.match(/^([A-z0-9 \.:\!@\#\*]+){2,}$/ig)) |
|
422 { |
432 { |
423 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/unknown.gif'; |
433 document.getElementById('s_email').src='<?php echo scriptPath; ?>/images/good.gif'; |
424 document.getElementById('e_username').innerHTML = ''; |
|
425 } else { |
434 } else { |
426 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/bad.gif'; |
435 failed = true; |
427 document.getElementById('e_username').innerHTML = '<br /><small>Your username must be at least two characters in length and may contain only alphanumeric characters (A-Z and 0-9), spaces, and the following characters: :, !, @, #, *.</small>'; |
436 document.getElementById('s_email').src='<?php echo scriptPath; ?>/images/bad.gif'; |
428 return false; |
|
429 } |
437 } |
430 } |
438 if(failed) |
431 |
439 { |
432 document.getElementById('e_username').innerHTML = '<br /><small><b>Checking availability...</b></small>'; |
440 frm.submit.disabled = 'disabled'; |
433 ajaxGet('<?php echo scriptPath; ?>/ajax.php?title=null&_mode=checkusername&name='+escape(frm.username.value), function() { |
441 } else { |
434 if(ajax.readyState == 4) |
442 frm.submit.disabled = false; |
435 if(ajax.responseText == 'good') |
443 } |
|
444 } |
|
445 function checkUsername() |
|
446 { |
|
447 var frm = document.forms.regform; |
|
448 |
|
449 if(!namegood) |
|
450 { |
|
451 if(frm.username.value.match(/^([A-z0-9 \.:\!@\#\*]+){2,}$/ig)) |
436 { |
452 { |
437 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/good.gif'; |
453 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/unknown.gif'; |
438 document.getElementById('e_username').innerHTML = '<br /><small><b>This username is available.</b></small>'; |
454 document.getElementById('e_username').innerHTML = ''; |
439 namegood = true; |
455 } else { |
440 } else if(ajax.responseText == 'bad') { |
|
441 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/bad.gif'; |
456 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/bad.gif'; |
442 document.getElementById('e_username').innerHTML = '<br /><small><b>Error: that username is already taken.</b></small>'; |
457 document.getElementById('e_username').innerHTML = '<br /><small>Your username must be at least two characters in length and may contain only alphanumeric characters (A-Z and 0-9), spaces, and the following characters: :, !, @, #, *.</small>'; |
443 namegood = false; |
458 return false; |
444 } else { |
|
445 document.getElementById('e_username').innerHTML = ajax.responseText; |
|
446 } |
459 } |
447 }); |
460 } |
448 } |
461 |
449 function regenCaptcha() |
462 document.getElementById('e_username').innerHTML = '<br /><small><b>Checking availability...</b></small>'; |
450 { |
463 ajaxGet('<?php echo scriptPath; ?>/ajax.php?title=null&_mode=checkusername&name='+escape(frm.username.value), function() { |
451 var frm = document.forms.regform; |
464 if(ajax.readyState == 4) |
452 document.getElementById('captchaimg').src = '<?php echo makeUrlNS("Special", "Captcha/"); ?>'+frm.captchahash.value+'/'+Math.floor(Math.random() * 100000); |
465 if(ajax.responseText == 'good') |
453 return false; |
466 { |
454 } |
467 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/good.gif'; |
455 validateForm(); |
468 document.getElementById('e_username').innerHTML = '<br /><small><b>This username is available.</b></small>'; |
456 setTimeout('checkUsername();', 1000); |
469 namegood = true; |
457 // ]]> |
470 } else if(ajax.responseText == 'bad') { |
458 </script> |
471 document.getElementById('s_username').src='<?php echo scriptPath; ?>/images/bad.gif'; |
459 <?php |
472 document.getElementById('e_username').innerHTML = '<br /><small><b>Error: that username is already taken.</b></small>'; |
|
473 namegood = false; |
|
474 } else { |
|
475 document.getElementById('e_username').innerHTML = ajax.responseText; |
|
476 } |
|
477 }); |
|
478 } |
|
479 function regenCaptcha() |
|
480 { |
|
481 var frm = document.forms.regform; |
|
482 document.getElementById('captchaimg').src = '<?php echo makeUrlNS("Special", "Captcha/"); ?>'+frm.captchahash.value+'/'+Math.floor(Math.random() * 100000); |
|
483 return false; |
|
484 } |
|
485 validateForm(); |
|
486 setTimeout('checkUsername();', 1000); |
|
487 // ]]> |
|
488 </script> |
|
489 <?php |
|
490 } |
|
491 else |
|
492 { |
|
493 $year = intval( date('Y') ); |
|
494 $year = $year - 13; |
|
495 $month = date('F'); |
|
496 $day = date('d'); |
|
497 |
|
498 $yo13_date = "$month $day, $year"; |
|
499 $link_coppa_yes = makeUrlNS('Special', 'Register', 'coppa=yes', true); |
|
500 $link_coppa_no = makeUrlNS('Special', 'Register', 'coppa=no', true); |
|
501 |
|
502 // COPPA enabled, ask age |
|
503 echo '<div class="tblholder">'; |
|
504 echo '<table border="0" cellspacing="1" cellpadding="4">'; |
|
505 echo '<tr> |
|
506 <td class="row1"> |
|
507 Before you can register, please tell us your age. |
|
508 </td> |
|
509 </tr> |
|
510 <tr> |
|
511 <td class="row3"> |
|
512 <a href="' . $link_coppa_no . '">I was born <b>on or before</b> ' . $yo13_date . ' and am <b>at least</b> 13 years of age</a><br /> |
|
513 <a href="' . $link_coppa_yes . '">I was born <b>after</b> ' . $yo13_date . ' and am <b>less than</b> 13 years of age</a> |
|
514 </td> |
|
515 </tr>'; |
|
516 echo '</table>'; |
|
517 echo '</div>'; |
|
518 } |
460 $template->footer(); |
519 $template->footer(); |
461 } |
520 } |
462 |
521 |
463 /* |
522 /* |
464 If you want the old preferences page back, be my guest. |
523 If you want the old preferences page back, be my guest. |