<?php 	
/*******************************************************************************
 * Copyright (c) 2011 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 - initial API and implementation
 *******************************************************************************/

/**
 * This file provides a listing of all the sources of information used by
 * the "Project Downloads" tool. More specifically, this script shows a
 * listing of all directories scanned for each project. This file is linked
 * to by ./downloads.php
 */
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/common.php");
require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/debug.php");
trace_file_info(__FILE__);

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();	

if ($App->devmode) {
	$base = $_SERVER['DOCUMENT_ROOT'] . '/projects/tests/data/ip-scans';
} else {
	$base = '/home/data/httpd/writable/projects/ip-scans/';
	mustBeCommitter();
	include($App->getProjectCommon()); 
}

function getMapping($base) {
	global $projectNamePattern;
	
	$mapping = array();
	$file = fopen("$base/mapping.txt", "r");
	if (!$file) return $mapping;
	
	while (($line = fgets($file)) !== false) {
		if (!preg_match("/^($projectNamePattern),(.+)\$/", $line, $matches)) continue;
		$id = $matches[1];
		$path = $matches[3];
		
		$mapping[$id][] = $path;
	}
	fclose($file);
	
	ksort($mapping);
	return $mapping;
}

ob_start();

$pageKeywords = "";
$pageTitle = "Project Downloads Sources";
$pageAuthor = "Wayne Beaton";
?>

<div id="midcolumn">
<h1><?= $pageTitle ?></h1>

<div class="homeitem">

<p>This page lists the sources of download information used
by the <a href="downloads.php">Project Downloads</a> Tool.
Please report any errors you find to 
		<a href="mailto:emo@eclipse.org">EMO</a>.</p>

<?php 
	$mapping = getMapping($base);
	echo "<ul>";
	foreach($mapping as $project => $paths) {
		echo "<li>";
		echo "$project";
		echo "<ul>";
		foreach ($paths as $path) {
			echo "<li>$path</li>";
		}
		echo "</ul>";
		echo "</li>";
	}
	echo "</ul>";
?>

</div>
</div>

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

echo get_trace_html();
?>