

<? 
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/smartconnection.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/classes/projects/projectInfoList.class.php");

function findHeliosRelease($releases)
{
	$retval = array();
	foreach ($releases as $rr)
	{
		$earlydate = strtotime("2010-06-21");
		$latedate = strtotime("2010-07-01");
		$date = strtotime($rr->date);
		if (($date >= $earlydate) && ($date <= $latedate))
		{
			$retval['version'] = $rr->name;
		}
	}
	return $retval;
}

function projectTable()
{
	ob_start();
	?>
	<table cellspacing=0 class="webinars">
		<tr class="header">
			<td width="35%">Project Name</td>
			<td width="12%" align="center">Version</td>
			<td width="10%" align="center">Project Summary</td>
			<? /*<td class="tableHeader" width="12%" align="center">New And Noteworthy</td>*/ ?>
			<td width="12%" align="center">Download</td>
		</tr>
	<?
	$projectInfoList = new projectInfoList();
	$projectInfoList->selectProjectInfoList(NULL, 'simultaneousrelease', 'helios', 1);
	$projectInfoList->alphaSortList();
	
	$numProjects = $projectInfoList->getCount();
	
	for ($i = 0; $i < $numProjects; $i++)
	{
		$projectInfoIterator = $projectInfoList->getItemAt($i);
		$projectName = $projectInfoIterator->projectname;
		$projectid = $projectInfoIterator->projectid;
		$projectShortName = $projectInfoIterator->projectshortname;
		$download = $projectInfoIterator->downloadsurl;
		$url = $projectInfoIterator->projecturl;
		$releases = $projectInfoIterator->releases;
		$downloadurl = $projectInfoIterator->downloadsurl;
		$releaseInfo = str_replace('\"', '', findHeliosRelease($releases));
		if ($projectName != ""){
		?>	<tr class="tableRow">
			<td><b><a href="<?=$url;?>"><?=$projectName;?></a></b></td>
			<td align="center"><?=$releaseInfo['version'];?></td>
			<td align="center"><a href="http://www.eclipse.org/projects/project_summary.php?projectid=<?=$projectid;?>"><img src="images/homepage.gif"></a></td>
			<td align="center"><? if ($downloadurl != "") {?><a href="<?=$downloadurl;?>">Download</a> <? } ?></td>
		</tr> <? }
	}
	?> 
	</table>
	<?	
	$html = ob_get_contents();
	ob_end_clean();
	
	return $html;
} ?>
