<?php
/**
 * Copyright (c) 2005-2015, 2018 Eclipse Foundation.
 *
 * This program and the accompanying materials are made
 * available under the terms of the Eclipse Public License 2.0
 * which is available at https://www.eclipse.org/legal/epl-2.0/
 *
 * Contributors:
 *   Eclipse Foundation - initial implementation
 *   Eric Poirier (Eclipse Foundation)
 *
 * 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");
$App = new App();
$Nav = new Nav();
$Theme = $App->getThemeClass();

include ($App->getProjectCommon());

include ("scripts/candidate.php");
$year = "2018";
$candidates = get_all_candidates($year);

//
// Begin: page-specific settings. Change these.
$pageTitle = "Eclipse Foundation Election Process";

$committer_candidates = get_candidates_list_as_html($candidates, $year, 'committer');
$addin_candidates = get_candidates_list_as_html($candidates, $year, 'addin');

$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("foundation, governance, board, elections");
$Theme->setPageAuthor("Mike & Wayner");

ob_start();
include ("content/en_" . $App->getScriptName());
$html = ob_get_clean();

$Theme->setNav($Nav);
$Theme->setHtml($html);
$Theme->generatePage();

function get_candidates_list_as_html(&$candidates, $year, $type) {
  $type_name = strcmp($type, 'committer') == 0 ? 'Committer' : 'Sustaining Member';
  $html = "<h3>$type_name Candidates</h3><table border=\"0\" cellpadding=\"5\">";
  foreach ($candidates as $candidate) {
    if (strcmp($candidate->type, $type) != 0)
      continue;
    $html .= <<<EOHTML
        <tr>
          <td valign="top"><a href="candidate.php?year=$year&id=$candidate->id"><img src="$candidate->image" width="75"></a></td>
          <td valign="top" style="border-bottom: dashed 1px #494949;">
            <strong><a href="candidate.php?year=$year&id=$candidate->id">$candidate->name</a></strong>
            <br>$candidate->title
            <p>$candidate->contact</p>
          </td>
        </tr>
EOHTML;
  }
  $html .= "</table>";

  return $html;
}
