<?php
/**
 * Copyright (c) 2019 Eclipse Foundation and others.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 * Christopher Guindon (Eclipse Foundation) - Initial implementation
 * Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */

require_once (realpath(dirname(__FILE__) . "/../../eclipse.org-common/system/app.class.php"));
$App = new App();
include ($App->getProjectCommon());

$pageTitle = 'Eclipse IDE 2020-09';
$Theme->setPageKeywords("eclipse 2020-09, release, simultaneous, release train, 2020-09");
$Theme->setPageTitle($pageTitle);

ob_start();
?>
<div class="jumbotron featured-jumbotron margin-bottom-0">
  <div class="container">
    <div class="row">
      <div class="col-md-20 col-md-offset-2 col-sm-18 col-sm-offset-3">
        <h1 class="jumbotron-title">Eclipse IDE</h1>
        <h2 class="h3 fw-600">The Leading Open Platform for Professional Developers</h2>
        <hr>
        <?php if(time() >= strtotime("16 september 2020 10:00")): ?>
          <ul class="list-inline">
            <li><a class="btn btn-primary" href="/downloads"><img class="eclipseide-btn" src="/eclipseide/2020-09/images/btn-download.svg"> Download 2020-09</a></li>
            <li><a class="btn btn-primary" href="/downloads/packages"><img class="eclipseide-btn" src="/eclipseide/2020-09/images/btn-packages.svg"> Other Packages</a></li>
            <li><a class="btn btn-primary" href="/donate"><img class="eclipseide-btn" src="/eclipseide/2020-09/images/btn-donate.svg"> Donate</a></li>
          </ul>
        <?php else: ?>
          <p>September 16, 2020</p>
        <?php endif; ?>
      </div>
    </div>
  </div>
</div>
<?php
$extra_header_html = ob_get_clean();
$Theme->setExtraHeaderHtml($extra_header_html);

// Place your html content in a file called content/en_pagename.php
ob_start();
include ("content/en_index.html");
$html = ob_get_clean();

$Theme->setHtml($html);

$variables = array();
//$variables['btn_cfa']['hide'] = TRUE;
$variables['btn_cfa']['text'] = '<i class="fa fa-star"></i> Donate';
$variables['btn_cfa']['href'] = 'https://www.eclipse.org/donate?campaign=landingpage_2020-09&scope=donatebutton';
$variables['btn_cfa']['class'] = 'btn btn-huge btn-info';
$Theme->setThemeVariables($variables);

$Theme->setExtraHeaders('<link href="/eclipseide/2020-09/style.css" media="screen" rel="stylesheet" type="text/css"/>');
$Theme->setAttributes('header-wrapper', 'header-eclipseide');
$Theme->setThemeVariables(array('hide_breadcrumbs' => TRUE, 'main_container_classes' => 'container-full footer-offset'));
$Theme->generatePage();