<?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'

	#*****************************************************************************
	#
	# index.php
	#
	# Author: 		Markus Knauer
	# Date:			2007-02-20
	#
	# Description: Download page of the Eclipse Packaging Project
	#
	#
	#****************************************************************************
	
	#
	# Begin: page-specific settings.  Change these. 
	$pageTitle 		    = "EPP Nightly Package Builds";
	$pageKeywords	    = "eclipse, download, ganymede, europa, packages, packaging, tools, nightly";
	$pageAuthor		    = "Markus Knauer";

$downloadBasePath = $App->getDownloadBasePath();
$statusContent33 = getEPPStatusContent($App->getDownloadBasePath().'/technology/epp/downloads/testing/status33.stub');
$statusContent34 = getEPPStatusContent($App->getDownloadBasePath().'/technology/epp/downloads/testing/status34test.stub');
$statusContent35 = getEPPStatusContent($App->getDownloadBasePath().'/technology/epp/downloads/testing/status35.stub');

function getEPPStatusContent($filename) {
    if (is_file($filename)) {
        ob_start();
        include $filename;
        $contents = ob_get_contents();
        ob_end_clean();
        return $contents;
    }
    return false;
}
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# $Nav->addNavSeparator("My Page Links", 	"downloads.php");
	# $Nav->addCustomNav("My Link", "mypage.php", "_self", 3);
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank", 3);

	# End: page-specific settings
	#
		
	# Paste your HTML content between the EOHTML markers!	
	$html = <<<EOHTML

<div id="maincontent">


<!-- MIDCOLUMN START -->
<div id="midcolumn">

<h1>$pageTitle</h1>

<p>If you are looking for Galileo milestone package builds, you will find these
on the <a href="http://www.eclipse.org/downloads/packages/">EPP Download Packages</a> 
page, but at the moment they are not yet available. This page contains the nightly 
builds only.</p>

<div class="homeitem3col">
<h3>Eclipse Galileo Nightly Builds</h3>

<ul>
 <li>Eclipse Platform 3.5 Milestones</li>
 <li>Galileo Staging Update Site</li>
<ul>

<table border="1">
<tr>
  <th>Build ID (GMT)</th>
  <th>JavaME</th>
  <th>CPP</th>
  <th>Java</th>
  <th>JEE</th>
  <th>Modeling</th>
  <th>RCP</th>
  <th>Reporting</th>
</tr>
$statusContent35
</table>
</div>

<hr class="clearer" />

<div class="homeitem3col">
<h3>Eclipse Ganymede Nightly Builds</h3>

<ul>
 <li>Eclipse Platform 3.4.2RC3: M20090211-1700</li>
 <li>Ganymede Staging Update Site</li>
 <li><b>Note:</b> All packages contain the <a href="usagedata/">EPP Usage Data Collector</a>! 
     Interested in its first results? Go to the 
     <a href="usagedata/results.php">UDC results</a> page.</li>
<ul>

<table border="1">
<tr>
  <th>Build ID (GMT)</th>
  <th>CPP</th>
  <th>Java</th>
  <th>JEE</th>
  <th>RCP</th>
  <th>Modeling</th>
  <th>Reporting</th>
</tr>
$statusContent34
</table>
</div>

<hr class="clearer" />

<div class="homeitem3col">
<h3>Eclipse Europa Nightly Builds</h3>

<ul>
 <li>Detailed package description: <a href="content.php">package content</a></li>
 <li>Eclipse Platform 3.3.x: M20080221-1800</li>
 <li>Europa Staging Update Site</li>
<ul>

<table border="1">
<tr>
  <th>Build ID (GMT)</th>
  <th>CPP</th>
  <th>Java</th>
  <th>JEE</th>
  <th>RCP</th>
</tr>
$statusContent33
</table>
</div>

<hr class="clearer" />
</div>
<!-- MIDCOLUMN END -->

<!-- RIGHTCOLUMN START -->
<div id="rightcolumn">
<div class="sideitem">
<h6>Other downloads</h6>
<ul>
  <li><a href="/downloads">EPP Release Builds</a></li>
  <li><a href="http://www.eclipse.org/downloads/packages/">EPP Milestone Builds</a></li>
  <li><a href="http://download.eclipse.org/eclipse/">Eclipse Platform Downloads</a></li>
</ul>
</div>
<div class="sideitem">
<h6>Galileo Links</h6>
<ul>
  <li><a href="https://build.eclipse.org/hudson/">Galileo Build Status</a></li>
  <li><a href="http://wiki.eclipse.org/Galileo">Galileo Wiki Page</a></li>
  <li><a href="http://build.eclipse.org/galileo/staging/">Galileo Staging</a></li>
  <li><a href="http://download.eclipse.org/releases/galileo/">Galileo Milestones</a></li>
</ul>
</div>
<div class="sideitem">
<h6>Ganymede Links</h6>
<ul>
  <li><a href="http://build.eclipse.org/ganymede/">Ganymede Build Status</a></li>
  <li><a href="http://wiki.eclipse.org/Ganymede_Simultaneous_Release">Ganymede Wiki Page</a></li>
</ul>
</div>
<div class="sideitem">
<h6>Europa Links</h6>
<ul>
  <li><a href="http://dash.eclipse.org/~bfreeman/europa/">Europa Build Status</a></li>
  <li><a href="http://wiki.eclipse.org/Europa_Simultaneous_Release">Europa Wiki Page</a></li>
</ul>
</div>
</div>
<!-- RIGHTCOLUMN END -->

</div>

EOHTML;


	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
