<?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 * 12);
$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 );
?>
