<?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 - Juno Simultaneous Release : Projects";
	$pageKeywords	= "juno, release, simultaneous, release train, eclipse 4, e4";
	$pageAuthor		= "Christopher Guindon";
	
	include_once 'includes/app.php';
					
	# Paste your HTML content between the EOHTML markers!	
	ob_start();
	?>
<div id="fullcolumn" class="juno projects">
		<?php include_once('includes/header.php');?>
		<div id="container">	
			<?php include_once('includes/nav.php');?>			
			<div id="window">
				<?php include_once('includes/sidebar-1.php');?>	
				<div id="main">			
					<table class="projects ">
						<thead>
							<tr>
								<td class="td_name textshadow darkbg">Project Name</td>
								<td class="td_version textshadow darkbg">Version</td>
								<td class="td_download textshadow darkbg">Download</td>
							</tr>	
						</thead>		
					</table>
					<div class="content-scroll">
					<table class="projects" cellpadding="2" cellspacing="2">
						
						<?php 
						$count = 0;
						$new = 0;
						if(is_array($projects)){
							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++;

								print "<tr>
											<td class=\"td_name\"><a href=\"$url\">$projectName</a>  <a href=\"http://www.eclipse.org/projects/project.php?id=$projectid\" class=\"gear_link\">Project information</a></td>
											<td class=\"td_version\">$version</td>
											<td class=\"td_download\">$download</td>
										</tr>";
							}//end foreach
						
						}
						?>
					<tfoot>
							<tr">							
							<td id="td_count" colspan="3">Project count : <?php print $count;?></td>
						</tr>
						</tfoot>	
				</table>
			</div>				
		</div>	
			</div>
		</div>
	</div>
	<?php include_once('includes/footer.php');
	$html = ob_get_clean();
	# Generate the web page
	$App->Promotion = TRUE;
	$App->AddExtraHtmlHeader('<link type="text/css" href="/juno/style.css" rel="stylesheet"/><!--[if IE 7]> <link rel="stylesheet" type="text/css" href="/home/content/ie7_nova.css" media="screen"/> <![endif]-->');	
	$App->generatePage('Nova', $Menu, NULL , $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
