<?php
/**
 * Copyright (c) 2020 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:
 *    Eric Poirier (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();
$Theme = $App->getThemeClass();

// Begin: page-specific settings.  Change these.
$pageTitle = "Enabling Global Collaboration on Open Source Innovation";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("eclipse, europe");
$Theme->setPageAuthor("Eclipse Foundation, Inc.");
$Theme->setTitle("Expanding the Global Level Playing Field for Open Collaboration");

ob_start();
?>
<div class="jumbotron featured-jumbotron">
  <div class="container margin-bottom-10">
    <div class="row">
      <div class="col-md-24 col-md-offset-0 col-sm-18 col-sm-offset-3">
        <h1 style="margin-bottom:25px;font-size:32px;"><?php print $pageTitle; ?></h1>
        <div class="row">
          <div class="col-md-12 col-md-offset-6"><p style="margin-bottom:20px; font-size:21px;">The Eclipse Foundation Transitions to Europe as Part
of Continued Global Expansion.</p></div>
        </div>


        <ul class="list-inline margin-top-30">
          <li><a class="btn btn-primary" href="https://newsroom.eclipse.org/news/announcements/open-source-software-leader-eclipse-foundation-officially-transitions-eu-based">Read the Announcement</a></li>
          <li><a class="btn btn-primary" href="https://accounts.eclipse.org/contact/membership/aisbl">Become a Member</a></li>
        </ul>
      </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_" . $App->getScriptName());
$html = ob_get_clean();

$Theme->setHtml($html);
$Theme->setExtraHeaders('<link href="/europe/styles.css?v=1" media="screen" rel="stylesheet" type="text/css"/>');
$Theme->setThemeVariables(array('main_container_classes' => 'container-full'));
$Theme->setAttributes('header-wrapper', 'header-europe-bg-img');
$Theme->preventCaching();
$Theme->generatePage();