<?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:
 *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
 *    Christopher Guindon (Eclipse Foundation) - Re-implementation for the new solstice theme
 *
 * SPDX-License-Identifier: EPL-2.0
 */

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

$App = new App();
$App->PageRSS = "/projects/reviews-rss.php";
$Theme = $App->getThemeClass();

$pageTitle = "Eclipse Membership Benefits";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("eclipse membership, become a member, membership faq, membership expire");
$Theme->setPageAuthor("Christopher Guindon");

$hide_tips = TRUE;
$hide_faqs = TRUE;
$show_corporate_sponsors_block = TRUE;

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>Eclipse Membership</h1>
        <p>Through the support of our member organizations, the Eclipse Foundation provides the open source community with IT, Intellectual Property, Mentors and Marketing services.</p>
      </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->setAttributes('header-wrapper', 'header-alternate-bg-img-1');
$Theme->generatePage();