<?php

#*****************************************************************************
#
# index.php
#
# Author: 		Wayne Beaton
# Date:			2011-01-26
#
# Description: Releases (Simultaneous Release) Landing Page
#
#****************************************************************************

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/SimultaneousReleaseInfo.class.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/debug.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/common.php");
trace_file_info(__FILE__);

$releases = getSimultaneousReleaseNames();
$release = getCurrentSimultaneousReleaseName();
if (isset($_GET['release'])) {
	$target = $_GET['release'];
	if (in_array($target, $releases)) $release = $target;
}
$releaseName = ucfirst($release);

#
# Begin: page-specific settings.  Change these.
$pageTitle 		= "Eclipse $releaseName Release";
$pageKeywords	= "";
$pageAuthor		= "Wayne Beaton";

$projects = getAllProjectsInSimultaneousRelease($release);

ob_start();
?>
<div id="midcolumn">
<h1><?= $pageTitle ?></h1>

<p>The following projects are part of the <?php echo $releaseName; ?> release.</p>

<?php 
	function getFormattedReleaseNames($project) {
		$releases = $project->getSimultaneousReleaseNames();
		$names = array();
		foreach($releases as $release) {
			$names[] = ucfirst($release);
		}
		return $names;
	}
		
	foreach ($projects as $project) {
		/* var Project $project */
		
		$simultaneousReleaseInfo = $project->getSimultaneousReleaseInfo();
		
		if ($simultaneousReleaseInfo) {
			
			$out = $project->getName();
			$paragraph = $project->getShortDescription();
			$url = $project->getProjectUrl();
			if ($url) $paragraph .= " <a href=\"$url\">[more]</a>";
			
			echo "<h3>$out</h3>
			<p>$paragraph</p>";
			
			if ($simultaneousReleaseInfo->getNested()) {
				echo "<p>Includes subprojects:</p>";
				echo "<ul>";
				foreach($simultaneousReleaseInfo->getNested() as $nested) {
					/* var Project $nested */
					$name = $nested->getName();
					$url = $nested->getProjectUrl();
					if ($url) $name = "<a href=\"$url\">$name</a>";
					echo "<li>$name</li>";
				}
				echo "</ul>";
			}
		}
	}
	
	echo get_trace_html();

?>

</div>

<div id="rightcolumn">
<div class="sideitem">
<h6>Other Releases</h6>
<?php 
	echo "<ul>";
	foreach($releases as $name) {
		$out = ucfirst($name);
		if ($name != $release) $out = "<a href=\"?release=$name\">$out</a>";
		echo "<li>$out</li>";
	}
	echo "</ul>";
?>
</div>
</div>

<?php
$html = ob_get_contents();
ob_end_clean();
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
