<?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 2021-03';
$Theme->setPageKeywords("eclipse 2021-03, release, simultaneous, release train, 2021-03");
$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("17 march 2021 10:00")): ?>
          <ul class="list-inline">
            <li><a class="btn btn-primary" href="/downloads/packages/installer"><img class="eclipseide-btn" src="/eclipseide/2021-03/images/btn-download.svg"> Download 2021-03</a></li>
            <li><a class="btn btn-primary" href="/downloads/packages"><img class="eclipseide-btn" src="/eclipseide/2021-03/images/btn-packages.svg"> Other Packages</a></li>
            <li><a class="btn btn-primary" href="/donate"><img class="eclipseide-btn" src="/eclipseide/2021-03/images/btn-donate.svg"> Donate</a></li>
          </ul>
        <?php else: ?>
          <p>March 17, 2021</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_2021-03&scope=donatebutton';
$variables['btn_cfa']['class'] = 'btn btn-huge btn-info';
$Theme->setThemeVariables($variables);

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