<?php

#*****************************************************************************
#
# index.php
#
# Author: 		Wayne Beaton
# Date:			2011-03-04
#
# Description: Releases (Simultaneous Release) rendered in CSV form.
#
#****************************************************************************

header('Content-type: text/plain');
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	
$App 	= new App();

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;
}
$projects = getAllProjectsInSimultaneousRelease($release);

foreach($projects as $project) {
	$id = $project->getId();
	$info = $project->getSimultaneousReleaseInfo($release);
	if (!$info) continue;
	$offset = $info->getOffset();
	
	foreach($info->getReleases() as $projectRelease) {
		$version = $projectRelease->getName() ? $projectRelease->getName() : null;
		if (!$version) $version = "??";
			
		$download = $projectRelease->getDownload();			
		$plan = $projectRelease->getPlan();
			
		if ($review = $projectRelease->getReview()) {
			$doc = $review->getSlidesUrl();
			$iplog = $review->getIplogUrl();
		}
		
		echo "$id, $offset, $version, $download, $plan, $doc, $iplog\n";
	}
}

?>
