<?php
/*******************************************************************************
 * Copyright (c) 2014, 2016 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://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - Initial implementation
 *******************************************************************************/

  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
  require_once($_SERVER['DOCUMENT_ROOT'] . "/downloads/downloads/controller.compare.php");
  require_once($_SERVER['DOCUMENT_ROOT'] . "/downloads/downloads/controller.downloads.php");
  require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/downloads/eclipseInstaller.php");

  $App = New App();
  $EclipseInstaller = new EclipseInstaller('oxygen/R2');

  // @todo: We should probably move these functions to Theme().
  $App->Promotion = TRUE;
  $App->PageRSS = "/downloads/rss.php";
  $App->PageRSSTitle = "Eclipse Releases";
  $App->AddExtraJSFooter('<script type="text/javascript" src="/downloads/assets/public/javascript/downloads.min.js"></script>');
  $App->Promotion = FALSE;

  # CONFIGURATION
  $page = 'download';

  $Downloads = new Downloads($App);
  $Downloads->setReleaseTitle('Eclipse Oxygen.2 (4.7.2)  Release');
  $Downloads->setPrefixPackage('release');
  $Downloads->setRelease('oxygen');
  //$Downloads->setFriendsEarlyAccess(TRUE);

  $Theme = $App->getThemeClass();

  // @todo: There seems to be a bug with the Breadcrumbs.
  // The download links does not get added automatically if $pageTitle
  // is not set.
  $pageTitle = 'Eclipse Downloads';

  //$Theme->setBreadcrumb($Breadcrumb);
  //$Theme->setNav($Nav);
  //$Theme->setMenu($Menu);
  $Theme->setPageAuthor('Eclipse Foundation');
  $Theme->setPageKeywords('eclipse, download, downloads, mirror, project, plug-ins, plugins, java, ide, swt, refactoring, free java ide, tools, platform, open source, development environment, development, ide');
  $Theme->setPageTitle($pageTitle);

    // Custom theme variables
  $variables = array();
  $variables['main_container_classes'] = 'container-full';
  // CFA Link - Big orange button in header
  $variables['btn_cfa'] = array(
    'hide' => TRUE, // Optional - Hide the CFA button.
  );
  $App->setThemeVariables($variables);

  require_once($_SERVER['DOCUMENT_ROOT'] . "/downloads/downloads/view.tpl.php");

  $Theme->setHtml($html);

  $Theme->setExtraHeaders('<link href="/downloads/assets/public/stylesheets/packages.min.css" media="screen" rel="stylesheet" type="text/css"/>');
  $Theme->generatePage();
