<?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 2019-06';
$Theme->setPageKeywords("eclipse 2019-06, release, simultaneous, release train, 2019-06");
$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("19 June 2019 10:00")): ?>
          <a style="width:245px;" class="btn btn-white btn-lg margin-bottom-20" href="/downloads/packages/installer"><i class="fa fa-download"></i> Download 2019-06</a>
          <p><small><a class="white" href="/downloads/packages">Other Packages</a></small></p>
        <?php else: ?>
          <p>June 19, 2019</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);

$Theme->setExtraHeaders('<link href="/eclipseide/2019-06/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();