<?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('neon/R1');

  // @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 Neon.1 (4.6.1)  Release');
  $Downloads->setPrefixPackage('release');
  $Downloads->setRelease('neon');
  //$Downloads->setFriendsEarlyAccess(TRUE);

  $Theme = $App->getThemeClass($theme);

  // @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();
