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

$branding = <<<EOBRANDING
<div id="branding">
<img src="images/projectdash.gif" alt="Dash"/>
</div>
EOBRANDING;
$Menu->setProjectBranding($branding);

$pageTitle = "Dash";

ob_start();
?>
<div id="maincontent">
	<div id="midcolumn">

<h2>What is Project Dash?</h2><p>
Project Dash is a place where the community itself cancollaborate on tools for community awareness and collaboration in support of ourultimate objective of committer quality and cooperation.
This is very much a research project as we are notentirely sure what these tools will be. </p>

<center><table width="100%"><tr>
<td valign="top" align="center"><a href="http://dash.eclipse.org/dash/commits/web-app/"><img src="images/summary.png" border="0"><br>
Commits Explorer</a></td>
<td valign="top" align="center"><a href="http://portal.eclipse.org/"><img src="images/portal.png" border="0"><br>
Foundation Portal</a></td>
</td></table></center>

<h2>New &amp; Noteworthy</h2>
<ul>
<?php
$files = glob('new-and-noteworthy/M*.htm');
foreach( $files as $filename ) {
	if( preg_match( "/(M\d+)\./", $filename, $matches ) ) {
		?><li><a href="<?= $filename ?>"><?= $matches[1] ?></a> - <?= date('F j, Y', filemtime($filename)) ?>
		</li><?php
	}
}
?>
</ul>

<h2>The Rest of The Story</h2>
<p>See our <a href="http://wiki.eclipse.org/Dash_Project">wiki pages</a> for
discussions, directions, plans, accomplishments, and all the rest.
</p>

	</div>
	
</div>

<div id="rightcolumn">
 <div class="sideitem">
   <h6>Incubation</h6>
   <div style="text-align: center">
   <a href="/projects/what-is-incubation.php"><img src="/images/egg-incubation.png" alt="Incubation"/></a>
   </div>
 </div>
</div>

<?php
	$html = ob_get_contents();
	ob_end_clean();

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