<?php
/*******************************************************************************
 * Copyright (c) 2010 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://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Wayne Beaton (Eclipse Foundation)- initial API and implementation
 *******************************************************************************/

header("Pragma: no-cache");
	
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/common.php");

/*
 * Gather up the parameters from the request so that we can
 * include them in URLs that we place on the page. I suppose that
 * we could use cookies...
 * 
 * TODO Consider using cookies.
 */
$parameters = '';
$separator = '?';
foreach($_GET as $key => $value) {
	$parameters .= $separator . $key . '=' . $value;
	$separator = '&';
} 

$theme = "Nova";
$App->Promotion = TRUE;

$Nav->addNavSeparator("Project Tools", "index.php$parameters");
$Nav->addCustomNav("Project Status", "/projects/tools/status.php$parameters", "_self", 2);
$Nav->addCustomNav("SCM Countdown", "/projects/scmcountdown.php$parameters", "_self", 2);

$Nav->addNavSeparator( "IP", null);
$Nav->addCustomNav("IP Log Generator", "/projects/ip_log.php$parameters", "_self", 2);
$Nav->addCustomNav("Contribution Review", "/projects/tools/ip_contribution_review.php$parameters", "_self", 2);
$Nav->addCustomNav("CQ Overview", "/projects/tools/ip_cq_overview.php$parameters", "_self", 2);
$Nav->addCustomNav("Downloads Report", "/projects/tools/downloads.php$parameters", "_self", 2);

$Nav->addNavSeparator( "Lifecycle", null);
$Nav->addCustomNav("Proposals", "/projects/tools/proposals.php$parameters", "_self", 2);
$Nav->addCustomNav("Reviews", "/projects/tools/reviews.php$parameters", "_self", 2);

$info = user_info_html();
$Nav->setHTMLBlock("<div style=\"border:solid;border-width:1px;border-color:gray;margin:5px;margin-top:15px;padding:5px\">$info</div>");
?>