<?php
/**
 * Copyright (c) 2005, 2017, 2018 Eclipse Foundation and others.
 *
 * 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:
 *   Denis Roy (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");

$App = new App();
$Theme = $App->getThemeClass();

include ($App->getProjectCommon());

$pageTitle = "Committer Due Diligence Guidelines";

$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("legal, foundation, committer, committers, diligence, guidelines, IP, intellectual property, policy, procedure");
$Theme->setPageAuthor("Mike Milinkovich");

// FIXME Workaround because I can't get Asciidoctor to generate embeddable HTML
function getBodyContent($path) {
  $DOMDocument = new DOMDocument();
  $DOMDocument->loadHTMLFile($path);
  $body = $DOMDocument->getElementsByTagName('body')->item(0);
  $content = "";
  foreach ($body->childNodes as $childNode) {
    $content .= $DOMDocument->saveHTML($childNode);
  }
  return $content;
}

ob_start();
?>
<div id="midcolumn">
  <div class="homeitem3col">
    <?php print getBodyContent(dirname(__FILE__) . '/documents/html/committers-dd.html'); ?>
  </div>
</div>
<?php
$html = ob_get_contents();
ob_end_clean();

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