<?php
/*******************************************************************************
 * Copyright (c) 2013 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:
*    Wayne Beaton (Eclipse Foundation)- initial API and implementation
*******************************************************************************/

/*
 * Export the release information for a single project, specified
* via the "id" parameter.
*
* e.g. http://www.eclipse.org/projects/export/releases.json.php?id=technology.woolsey
*
* INTERNAL USE ONLY: restricted to callers within the Eclipse Foundation.
*/
require_once(dirname(__FILE__) . "/../../eclipse.org-common/system/app.class.php");
$App = new App();

require_once(dirname(__FILE__) . "/../classes/SimultaneousReleaseInfo.class.php");
require_once(dirname(__FILE__) . "/../classes/common.php");
require_once(dirname(__FILE__) . "/../classes/debug.php");

//mustBeEclipseFoundationCaller();

$previous = null;
$releases = array();
foreach(getSimultaneousReleaseNames() as $name) {
	$date = getSimultaneousReleaseDate($name);
	
	$releases[$name]['name'] = ucfirst($name);
	$releases[$name]['date'] = date('Y-m-d', $date);
	$releases[$name]['previous'] = $previous;
	$previous = $name;
	
	foreach(getAllProjectsInSimultaneousRelease($name) as $project) {
		$id = $project->getId();

		$info = $project->getSimultaneousReleaseInfo($name);
		if (!$info) continue;
		
		$releases[$name]['projects'][$id]['project'] = $id;
		$releases[$name]['projects'][$id]['offset'] = $info->getOffset();
		
		foreach($info->getReleases() as $release) {
			$releases[$name]['projects'][$id]['releases'][$release->getName()]['name'] = $release->getName();
			$releases[$name]['projects'][$id]['releases'][$release->getName()]['date'] = date('Y-m-d', $release->getDate());
		}
	}
}

echo json_encode($releases);
?>