<?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/2005newsarchive.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>
<?php print $news->output();?>

<?php
$html = ob_get_clean();


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