<?php
/*******************************************************************************
 * Copyright (c) 2017 Eclipse Foundation
 *
 * This program and the accompanying materials are made available under
 * the terms of the Eclipse Public License v2.0 which is available at
 * http://www.eclipse.org/legal/epl-2.0
 *******************************************************************************/
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.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');

mustBeEclipseFoundationCaller();

$comments = isset($_GET['comments']) && $_GET['comments']=='true';

$App = new App();
$sql = "
  select
   p.PersonId as id,
   p.FName as first,
   p.LName as last,
   p.Email as email,
   sd.Description as document,
   EffectiveDate as start,
   ExpirationDate as end,
   ScannedDocumentBLOB as json
  from People as p
   join PeopleDocuments as pd on p.PersonId=pd.PersonId
   join SYS_Documents as sd on pd.DocumentId=sd.DocumentId
  where sd.description in ('Eclipse Contributor Agreement', 'Contributor License Agreement')
   and pd.ScannedDocumentMime = 'application/json'
 ";

$fp = fopen('php://output', 'w');
fputcsv($fp, array('id', 'first', 'last', 'email', 'document', 'start', 'end', 'legal', 'public', 'employer', 'email2'));

query('foundation', $sql, array(), function($row) use (&$fp) {
  $cla = json_decode($row['json'], true);
  // It looks like some content is not being encoded properly and
  // json_decode is failing on newlines embedded in, e.g. the address
  // field. If decoding fails the first time, clean up whitespace
  // and try again.
  if (!$cla) $cla = json_decode(preg_replace('/[\r|\n]+/','\n',$row['json']), true);
  if ($cla) {
   fputcsv($fp, array(
    $row['id'],
    $row['first'],
    $row['last'],
    $row['email'],
    $row['document'],
    $row['start'],
    $row['end'],
    $cla['legal_name'],
    $cla['public_name'],
    $cla['employer'],
    $cla['email']
   ));
  } else {
   if ($comments) {
    fwrite($fp, "# Cannot decode ECA for {$row['id']} ({$row['start']}).");
   }
  }
});

fclose($fp);