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

$news = new FeedParser();
$news->addPath($_SERVER['DOCUMENT_ROOT'] . "/community/news/2005newsarchive.rss");
$news->addPath($_SERVER['DOCUMENT_ROOT'] . "/community/news/archive/news.rss");
$news->setPressRelease(TRUE);
$news->setLimit(500);
$news->setViewMoreLink('/org/press-release/index.php?archive=true');
$news->setCount(25);

if (isset($_GET['archive'])) {
  $pageTitle .= " (Archive)";
  $news->setCount(5000);
}

ob_start();
?>

<h1><?php print $pageTitle; ?></h1>
<div class="news-list">
<div class="news-list-col">
  <?php print $news->output();?>
</div></div>
<?php
$html = ob_get_clean();


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