<?php
/*******************************************************************************
 * Copyright (c) 2014 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Christopher Guindon (Eclipse Foundation) - Initial implementation
 *******************************************************************************/

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

$App   = new App();
$Nav  = new Nav();
$Theme = $App->getThemeClass();
include($App->getProjectCommon());

require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/parser/feedparser.class.php");

# Begin: page-specific settings.  Change these.
$pageTitle     = "Eclipse Foundation Press Releases";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("eclipse, foundation , press, release, news about eclipse, Eclipse Announcements");
$Theme->setPageAuthor("Christopher Guindon");

ob_start();
?>

<h1><?php print $pageTitle; ?></h1>
<div id="pr-list" publish-target="eclipse_org" data-press-release="1" data-pagination="true"  data-news-count="10"></div>


<?php
$html = ob_get_clean();
$App->AddExtraJSFooter('
  <script>
$(function() {
  // Eclipse News and Announcements
  $("#pr-list").eclipseFdnApi({
    type: "newsItems"
  });

});
</script>

');

$Theme->setNav($Nav);
$Theme->setHtml($html);
$Theme->generatePage();
