<?php
/*******************************************************************************
 * Copyright (c) 2005,2017 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *******************************************************************************/
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());

$pageTitle 		= "Committer Due Diligence Guidelines";
$pageKeywords	= "legal, foundation, committer, committers, diligence, guidelines, IP, intellectual property, policy, procedure";
$pageAuthor		= "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>

<!-- <div id="rightcolumn">
		<div class="sideitem">
			<h6>Related Links</h6>
			<ul>
			<li><a href="https://projects.eclipse.org/user/cla/validate>CLA Validator Tool</a></li>
			</ul>
		</div>
	</div> -->

<?php
	$html = ob_get_contents();
	ob_end_clean();
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);

?>
