<?php  																														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());    # All on the same line to unclutter the user's desktop'
/*******************************************************************************
 * Copyright (c) 2009-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:
 *    
 *******************************************************************************/

	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		= "Eclipse.org - Indigo Simultaneous Release";
	$pageKeywords	= "indigo, release, simultaneous, release train, 3.7";
	$pageAuthor		= "Nathan Gervais";

	
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/Project.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/SimultaneousReleaseInfo.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/debug.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/common.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/images.inc");
//$release = getCurrentSimultaneousReleaseName();
$release = 'indigo';
$projects = getAllProjectsInSimultaneousRelease($release);
sortProjects($projects, 'name');
	# Paste your HTML content between the EOHTML markers!	
	ob_start();

	?>
	<div id="fullcolumn" class="indigo">
		<a href="/indigo"><img id="indigoLogo" src="images/indigologo.png"/></a>
		<div id="container">
			<div id="nav">
				<ul>
					<li><a href="/downloads/index-developer.php">Downloads</a></li>
					<li><a class="active" href="projects.php">Projects</a></li>
					<li><a href="http://wiki.eclipse.org/Eclipse_DemoCamps_Indigo_2011">DemoCamps</a></li>
					<li class="last"><a href="friends.php">The Indigo 500</a></li>
				</ul>
			</div>
			<div id="window" class="overflow">
			<table class="projects">
		<tr class="header">
			<td width="35%">Project Name</td>
			<td width="12%" align="center">Version</td>
			<td width="12%" align="center">Download</td>
		</tr>			
	<?php 
	$count = 0;
	$new = 0;
	
	foreach ($projects as $project) {
		/* var Project $project */	
		$projectName = $project->getName();
		$projectid = $project->getId();
		$download = $project->getDownloadsUrl();
		if ($download) $download = "<a href=\"$download\"><img src=\"$images->download_small\"/></a>";
		$url = $project->getProjectUrl();
		$info = $project->getSimultaneousReleaseInfo($release);
		if (!$info) continue;
		
		if ($info->isNew()) {
			$projectName = "$projectName [new]";
			$new++;
		}
		$versions = array();
		foreach($info->getReleases() as $projectRelease) {
			if ($projectRelease->getName()) $versions[] = $projectRelease->getName();
		}
		$version = implode(', ', $versions);
		$version = preg_replace('/ /', '&nbsp;', $version);
		
		$count++;
		
		echo "<tr class=\"tableRow\">
			<td><b><a href=\"$url\">$projectName</a></b></td>
			<td align=\"center\">$version</td>
			<td align=\"center\">$download</td>
		</tr>";
	}
	?>

			
			</table>			
			</div>
		</div>
	</div>
	<?
	$html = ob_get_clean();

	# Generate the web page
	$App->Promotion = TRUE;
	$App->AddExtraHtmlHeader('<link type="text/css" href="/indigo/style.css" rel="stylesheet"/>');	
	$App->generatePage('Nova', $Menu, NULL , $pageAuthor, $pageKeywords, $pageTitle, $html);
?>