<?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-09';
$Theme->setPageKeywords("eclipse 2021-09, release, simultaneous, release train, 2021-09");
$Theme->setPageTitle($pageTitle);

ob_start();
?>
<div class="jumbotron featured-jumbotron margin-bottom-0">
  <div class="container">
    <div class="row">
      <div class="col-md-12">
        <h1 class="jumbotron-title">Eclipse IDE</h1>
        <h2 class="h3 fw-600">The Leading Open Platform for Professional Developers</h2>
      </div>
    </div>
    <?php if(time() >= strtotime("15 september 2021 10:00")): ?>
      <div class="jumbotron-links">
        <ul class="list-inline text-center">
          <li><a class="btn btn-primary" href="/downloads/packages/installer">Download 2021-09</a></li>
          <li><a class="btn btn-primary" href="/downloads/packages">Other Packages</a></li>
          <li><a class="btn btn-primary" href="/donate">Donate</a></li>
        </ul>
        <?php else: ?>
          <p>September 15, 2021</p>
        <?php endif; ?>
      </div>
  </div>
</div>
<?php
$extra_header_html = ob_get_clean();
$Theme->setExtraHeaderHtml($extra_header_html);

ob_start();
?>
<div class="container featured-connected">
  <h2>Stay Connected with Eclipse Projects</h2>
  <p>Stay up-to-date with the Eclipse IDE by following us on social media!</p>
  <div class="row">
    <div class="col-md-24">
      <ul class="list-inline featured-social-links margin-bottom-30">
        <li>
          <a href="https://twitter.com/EclipseJavaIDE">
            <i class="fa fa-twitter"><span class="sr-only">Twitter</span></i>
          </a>
        </li>
        <li>
          <a href="https://www.instagram.com/eclipsejavaide/">
            <i class="fa fa-instagram"><span class="sr-only">Instagram</span></i>
          </a>
        </li>
        <li>
          <a href="https://www.facebook.com/eclipse.org/">
            <i class="fa fa-facebook"><span class="sr-only">Facebook</span></i>
          </a>
        </li>
        <li>
          <a href="https://www.youtube.com/playlist?list=PLy7t4z5SYNaSNjL60ofpwVhfA7mOF3Pgk">
            <i class="fa fa-youtube"><span class="sr-only">Youtube</span></i>
          </a>
        </li>
      </ul>
    </div>
  </div>
</div>
<?php
$footer_content_prefix = ob_get_clean();
$Theme->setFooterContentPrefix($footer_content_prefix);

// 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-09&scope=donatebutton';
$variables['btn_cfa']['class'] = 'btn btn-huge btn-info';
$Theme->setThemeVariables($variables);

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

$Theme->generatePage();