<?php
/**
 * Copyright (c) 2016, 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:
 *   Christopher Guindon (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 = "Developer Certificate of Origin";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("certificate, Developer Certificate of Origin, contributor, legal, eclipse");
$Theme->setPageAuthor("Mike Milinkovich");

// Paste your HTML content between the EOHTML markers!
$html = '<div id="midcolumn">';

// Fetch DCO.HTML and return evertying in <body>
$document = new DOMDocument();
$new_document = new DOMDocument();
$document->loadHTML(file_get_contents('DCO.html'));
$body = $document->getElementsByTagName('body')->item(0);
foreach ($body->childNodes as $child) {
  $new_document->appendChild($new_document->importNode($child, true));
}

$html .= $new_document->saveHTML();
$html .= '</div>';
ob_start();
include ('content/eca_sidebar.php');
$html .= ob_get_clean();

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