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

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 Ganymede milestone package builds, you will find those
on the <a href="http://www.eclipse.org/downloads/packages/">EPP Ganymede Milestone</a> 
page. This page contains the nightly builds.</p>

<p>Please try these packages and comment on the 
<a href="http://dev.eclipse.org/newslists/news.eclipse.technology.packaging/maillist.html">EPP newsgroup</a> 
or write bugreports in Bugzilla.</p>

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

<ul>
 <li>Eclipse Platform 3.4.0RC4: S-3.4RC4-200806091311</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 Ganymede Milestone Builds</a></li>
  <li><a href="http://download.eclipse.org/eclipse/">Eclipse Platform Downloads</a></li>
</ul>
</div>
<div class="sideitem">
<h6>Important 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>
  <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);
?>
