<?php
/**
 * *****************************************************************************
 * Copyright (c) 2023 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
 * *****************************************************************************
 */
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());

$pageTitle = "Eclipse Foundation Open Source Project Namespaces";
$pageAuthor = "Wayne Beaton";
$pageKeywords = "eclipse,scm,vcs,dvcs,git,cvs,svn";

require_once $_SERVER['DOCUMENT_ROOT'] . '/projects/classes/Project.class.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/projects/classes/database.inc';
require_once $_SERVER['DOCUMENT_ROOT'] . '/projects/classes/common.php';
require_once $_SERVER['DOCUMENT_ROOT'] . '/projects/classes/debug.php';

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

  echo $pageTitle;
  ?></h1>

<?php
$projects = array();
$sql = "select project, namespace, name, path from ProjectNamespaces";
query("dashboard", $sql, array(), function($row) use (&$projects) {
	$projects[$row['project']][$row['namespace']][] = $row['name'];
});

echo "<ul>";
foreach($projects as $id => $namespaces) {
	echo "<li>$id";
	echo "<ul>";
	foreach($namespaces as $namespace => $names) {
		echo "<li>$namespace";
		echo "<ul>";
		foreach($names as $name) {
			echo "<li>$name</li>";
		}
		echo "</ul>";
		echo "</li>";
	}
	echo "</ul>";
	echo "</li>";
}
echo "</ul>";
?>


</div>
</div>
<?php
$html = ob_get_contents();
ob_end_clean();
$App->generatePage(NULL, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>