<?php  																			
/*******************************************************************************
 * Copyright (c) 2010, 2011 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
 *******************************************************************************/
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	
											
$App = new App();
$Nav = new Nav();
$Menu = new Menu();

include($App->getProjectCommon()); 

require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/Project.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/debug.php");
trace_file_info(__FILE__);

$pageTitle 		= "Eclipse Projects Overview";
$pageAuthor		= "";
$pageKeywords	= "Eclipse, project, download, list";

ob_start();
?>
<div id="maincontent">
<div id="midcolumn">

<?php 
foreach(getTopLevelProjects() as $project) {
	$name = $project->getName();
	echo "<h2>$name</h2>";
	
	foreach ($project->getChildren() as $child) {
		summarizeProject($child);
	}
}

function summarizeProject($project) {
	/* var $project Project */
	$id = $project->getId();
	$name = $project->getName();
	
	$links = array();
	
	$links[] = "<a href=\"/projects/project.php?id=$id\">[Info]</a>";
	if ($url = $project->getProjectUrl()) $links[] = "<a href=\"$url\">[Website]</a>";
	if ($proposal = $project->getProposal()) 
		$links[] = "<a href=\"" . $proposal->getProposalUrl() . "\">[Proposal]</a>";

	echo "<h3>$name ($id)</h3>";
	
	$links = join(' ', $links);	
	echo "<p>$links</p>";
	
	if (!$project->hasRecentCommitActivity(6)) {
		echo "<p>Project has no commit activity in the last six months.</p>";
	}
	
// 	$scope = $project->getScope();
// 	if (!$scope) $scope = '<p>Cannot find scope.</p>';
// 	echo $scope;
}

?>

<?php echo get_trace_html(); ?>

</div><!-- midcolumn -->

</div><!-- maincontent -->
<?php
	# Paste your HTML content between the EOHTML markers!
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, null, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>