<?php
/*******************************************************************************
 * Copyright (c) 2012-2015 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Denis Roy (Eclipse Foundation)- initial API and implementation
 *    Christopher Guindon (Eclipse Foundation) - Bug 432355 - Update l&f of the Eclipse site login
 *******************************************************************************/
  header('Content-Type: text/html; charset=utf-8');
  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/captcha/captcha.class.php");
  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/users/siteLogin.class.php");

  $App   = new App();
  $Nav  = new Nav();
  $Menu   = new Menu();
  $Sitelogin = new Sitelogin('password-recovery');
  $Captcha = new Captcha;

  $App->preventCaching();

  include("_projectCommon.php");

  $pageTitle     = "Eclipse - Password Recovery";
  $pageKeywords  = "eclipse, password, recovery";
  $pageAuthor    = "Eclipse Foundation, Inc.";

  // Custom theme variables
  $variables = array();
  $variables['main_container_classes'] = 'container-full footer-offset breadcrumbs-offset background-grey';
  $App->setThemeVariables($variables);

  $Session = $App->useSession();
  if ($Session->isLoggedIn()) {
    $Session->destroy(TRUE);
    $App->setSystemMessage('logout', 'You have successfully been logged out.', 'success');
  }
  $stage = $Sitelogin->getStage();

  $var_reset = $Sitelogin->getVariables('reset');

  ob_start();
  include("content/en_" . $App->getScriptName());
  $html = ob_get_clean();

  $App->setGoogleAnalyticsTrackingCode(NULL);
  # Generate the web page
  $App->generatePage($theme, $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);
