<?php
/********************************************************************************
 * Copyright (c) 2016 The Eclipse Foundation
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * SPDX-License-Identifier: EPL-2.0
 ********************************************************************************/
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 ());

require_once $_SERVER ['DOCUMENT_ROOT'] . '/projects/classes/Project.class.php';
require_once $_SERVER ['DOCUMENT_ROOT'] . '/projects/classes/common.php';
require_once $_SERVER ['DOCUMENT_ROOT'] . '/projects/classes/debug.php';
require_once dirname ( __FILE__ ) . '/kpi.inc';
require_once dirname ( __FILE__ ) . '/charts.inc';

// Let's keep this restricted to Eclipse Foundation employees
// for now.
mustBeFoundationEmployee();

$pageTitle = "Eclipse Project KPIs";
$pageKeywords = "";
$pageAuthor = "Wayne Beaton";

$App->AddExtraHtmlHeader("
<style>
img.company-logo {margin: 1em; width: 64px}
</style>");

ob_start ();

function getProjectNickName($id) {
 return ($project = Project::getProject($id)) ? $project->getNickName() : $id;
}

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

<?php
$age = isset($_GET['age']) ? (int)$_GET['age'] : 5;
$context = new ChartContext($age);

$filter = isset($_GET['filter']) ? $_GET['filter'] : '.';

foreach(scandir(dirname(__FILE__) . '/kpis') as $file) {
	if ($file == '.') continue;
	if ($file == '..') continue;
	// TODO Confirm that an injection attack is not possible.
	if (!preg_match("/$filter/", $file)) continue;
	require "kpis/$file";
	if (preg_match('/^(.*)\.inc/', $file, $matches)) {
		$callback = 'chart_' . $matches[1];
		$chart = call_user_func($callback, $context);
		$chart->render();
	}
}

?>

</div>
</div>

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