<?php
/**
 * Copyright (c) 2014, 2018 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 API and implementation
 *
 * SPDX-License-Identifier: EPL-2.0
 */

require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");

$App = new App();
$App->PageRSS = "//feeds.feedburner.com/eclipse/fnews";
$App->PageRSSTitle = "Eclipse Foundation News";
$Theme = $App->getThemeClass();

// Begin: page-specific settings.  Change these.
$pageTitle = "The Community for Open Innovation and Collaboration";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("eclipse, project, plug-ins, plugins, java, ide, swt, refactoring, free java ide, tools, platform, open source, development environment, development, ide");
$Theme->setPageAuthor("Eclipse Foundation, Inc.");
$Theme->setTitle("Enabling Open Innovation &amp; Collaboration");

ob_start();
?>
<div class="jumbotron featured-jumbotron">
  <div class="container margin-bottom-10">
    <div class="row">
      <div class="col-md-20 col-md-offset-2 col-sm-18 col-sm-offset-3">
        <h1 style="margin-bottom:25px;font-size:38px;">The Community for Open<br> Innovation and Collaboration</h1>
        <p style="margin-bottom:20px; font-size:21px;font-weight: 400;">The Eclipse Foundation provides our global community of individuals and organizations with a mature, scalable, and business-friendly environment for open source software collaboration and innovation.
</p>
        <div class="row">
          <div class="col-md-6 col-xs-12">
            <a href="/projects/" class="jumbotron-icon"><i data-feather="compass" stroke-width="1"></i></a>
            <a href="/projects/" class="btn btn-warning">Discover Projects</a>
          </div>
          <div class="col-md-6 col-xs-12">
            <a href="/org/workinggroups/" class="jumbotron-icon"><i data-feather="share-2" stroke-width="1"></i></a>
            <a href="/org/workinggroups/" class="btn btn-warning">Working Groups</a>
          </div>
          <div class="col-md-6 col-xs-12">
            <a href="/membership/" class="jumbotron-icon"><i data-feather="users" stroke-width="1"></i></a>
            <a href="/membership/" class="btn btn-warning">Members</a>
          </div>
          <div class="col-md-6 col-xs-12">
            <a href="/org/value/" class="jumbotron-icon"><i data-feather="briefcase" stroke-width="1"></i></a>
            <a href="/org/value/" class="btn btn-warning">Business Value</a>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>
<?php
$extra_header_html = ob_get_clean();
$Theme->setExtraHeaderHtml($extra_header_html);
$App->AddExtraJSFooter('
<script>
$(function() {
  // Eclipse News and Announcements
  $("#news-list-community").eclipseFdnApi({
    type: "newsItems"
  });
  $("#news-list-announcements").eclipseFdnApi({
    type: "newsItems"
  });
});
</script>
');
$App->AddExtraJSFooter('<script src="/home/js/featured-projects-committer.js"></script>');
// Place your html content in a file called content/en_pagename.php
ob_start();
include("content/en_" . $App->getScriptName());
$html = ob_get_clean();

$Theme->setHtml($html);
$Theme->setThemeVariables(array('hide_breadcrumbs' => TRUE, 'main_container_classes' => 'container-full'));
$Theme->setAttributes('header-wrapper', 'header-default-bg-img featured-jumbotron-bottom-shape');
$Theme->preventCaching();
$Theme->generatePage();