<?php

# Alert the user that this is not a valid entry point to MediaWiki if they try to access the special pages file directly.
if (!defined('MEDIAWIKI')) {
        echo <<<EOT
To install my extension, put the following line in LocalSettings.php:
require_once( "\$IP/extensions/UserloginHTTPS/UserloginHTTPS.php" );
EOT;
        exit( 1 );
}
 
$wgExtensionCredits['specialpage'][] = array(
	'name' => 'UserloginHTTPS',
	'author' => 'Magnus Kristiansen',
	'url' => 'http://www.mediawiki.org/wiki/Extension:UserloginHTTPS',
	'description' => 'Redirect Special:Userlogin to HTTPS if accessed via HTTP',
	'descriptionmsg' => 'userloginhttps-desc',
	'version' => '1.0.0',
);
 
$wgHooks['SpecialPage_initList'][] = 'ulh_overrideUserlogin';

function ulh_overrideUserlogin(&$list) {
  global $ulh_originalData;

  $ulh_originalData = $list['Userlogin'];
  $list['Userlogin'] = array('SpecialPage', 'Userlogin', '', true, 'ulh_SpecialUserlogin', __FILE__);

  return true;
}

function ulh_SpecialUserlogin($par) {
  global $wgRequest, $wgOut, $ulh_originalData;

  $url = $wgRequest->getFullRequestURL();
  if (substr($url, 0, 5) == 'http:') {
    $new_url = 'https:' . substr($url, 5);
    $wgOut->redirect($new_url);
    return;
  }

  $rec = $ulh_originalData;
  if ( is_string( $rec ) ) {
    $className = $rec;
    $sp = new $className;
  } elseif ( is_array( $rec ) ) {
    $className = array_shift( $rec );
    $sp = wfCreateObject( $className, $rec );
  } else {
    $wgOut->showErrorPage('Internal error', 'Error in Userlogin override.');
    return;
  }

  require_once($sp->getFile());
  wfSpecialUserlogin($par);
}

?>