<?php
/*******************************************************************************
 * Copyright (c) 2013 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(dirname(__FILE__) . "/../../eclipse.org-common/system/app.class.php");
$App = new App();

require_once(dirname(__FILE__) . "/../classes/database.inc");
require_once(dirname(__FILE__) . "/../classes/common.php");
require_once(dirname(__FILE__) . "/../classes/debug.php");

mustBeEclipseFoundationCaller();

$id = isset($_GET['id']) ? $_GET['id'] : null;
if (!isValidProjectId($id)) exit();

header('Content-type: text/plain');

$dash = "
	select
		distinct gca.email
	from ProjectRollup as pr
		join  GitRepo as gr on pr.subproject=gr.project
		join GitCommitAuthor as gca on gr.path=gca.path
		left join CommitterEmail as ce on gca.email=ce.email
		left join CommitterProject as cp on ce.id=cp.id
		left join Committer as cm on gca.name=concat(cm.first, ' ', cm.last)
	where gca.email not like '%@users.noreply.github.com'
		and pr.project='$id' and cp.project is null
		and cm.email is null
		and gca.email not like '%eclipse.org'";

query('dashboard', $dash, array(), function ($row) {
	$sql = "
		SELECT
			distinct p.PersonId, p.FName, p.LName, p.Email
		FROM People as p
			join PeopleDocuments as pd
				on p.PersonId=pd.PersonId
				and pd.DocumentID in ('99f64b0dac3e41dc1e97','a6f31f81d1b9abbcdbba')
				and pd.ExpirationDate is null
			left join PeopleDocuments as v3 on p.PersonId=v3.PersonId
				and v3.DocumentId='99f64b0dac3e41dc1e97'
				and v3.Version=3.0 and v3.ExpirationDate is null
		where email='{$row['email']}'
			and v3.PersonId is null";

	query('foundation', $sql, array(), function($row) {
		echo "{$row['Email']}\n";
	});

});


?>