<?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("_projectCommon.php");    # All on the same line to unclutter the user's desktop'


	#*****************************************************************************
	#
	# index.php
	#
	# Author: 		Denis Roy
	# Date:			2005-10-11
	#
	# Description: display list of projects for downloads
	#
	#****************************************************************************

	#
	# Begin: page-specific settings.  Change these.
	$pageTitle 		= "Eclipse for PHP Developers Package";
	$pageKeywords	= "eclipse,download,downloads,mirror,project,plug-ins,plugins,java,ide,swt,refactoring,free java ide,tools,platform,open source,development environment,development,ide";
	$pageAuthor		= "Eclipse Foundation, Inc.";
	
	$App->PageRSS = "/downloads/rss.php";
	$App->PageRSSTitle = "Eclipse Releases";
	
	# Add page-specific Nav bars here
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank)
	# $Nav->addCustomNav("My Link", "mypage.php", "_self");
	# $Nav->addCustomNav("Google", "http://www.google.com/", "_blank");

	# End: page-specific settings
	#
	# Enable polls on this page
	# Polls are good for 3 months!
	#$App->usePolls();

	# Poll 1 - without a bar graph
	#$Poll = new Poll(1, "How could we improve the way you obtain Eclipse?", "http://www.eclipse.org/downloads/");
	#$Poll->addOption(1, "Sell DVD subscriptions");
	#$Poll->addOption(2, "Use BitTorrent");
	#$Poll->addOption(3, "Get more mirrors");
	#$Poll->addOption(4, "Get faster mirrors");
	#$Poll->addOption(5, "Add more bandwidth");
	#$Poll->addOption(6, "It works fine as it is");
	# $Poll->noGraph();  # uncomment to disable bar graph
	#$pollHTML = $Poll->getHTML();


	 # require_once "/home/data/httpd/eclipse-php-classes/downloads/livedownload.class.php";

	# $LiveDownload = new LiveDownload();
	# $dl_count = number_format($LiveDownload->selectDownloadCount("SDK_31"), 0, '', ',');




	# Place your html content in a file called content/en_pagename.php
	$downloadBasepath = $App->getDownloadBasePath();
	// UnComment this line to restore the old download page.
	// include("content/en_" . $App->getScriptName());
	// Comment this line to restore the old download page.
	ob_start();
	?>
	<div class="midcolumn">
	<h1><?php print $pageTitle;?></h1>
	
	<h3>Looking for the Eclipse for PHP Developers Package?</h3>
	<p>Due to lack of a package maintainer for the Indigo release there will be no PHP (<a href="/pdt/">PDT</a>) package.  If you would like to install PDT into your Eclipse installtion you can do so by using the Install New Software feature from the Help Menu and installing the PHP Development Tools (PDT) SDK Feature from the Eclipse Indigo Repo >> http://download.eclipse.org/releases/indigo</p>
	</div>
	<?php 
	
	$html = ob_get_clean();
	
	
	# Generate the web page
	$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="helios.css?a" media="screen" />');		
	$App->generatePage("Nova", $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
