<?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");

$featured_story = $Theme->getFeaturedStory();

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-announces-transition-europe-part">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();