<?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 accompanies
 * this distribution, and is available at http://eclipse.org/legal/epl-2.0
 *
 * Contributors:
 *   Eric Poirier (Eclipse Foundation)
 */

require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");

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

include("_projectCommon.php");

$pageTitle = "Eclipse Foundation Legal Frequently Asked Questions (FAQ)";
$Theme->setPageTitle($pageTitle);
$Theme->setPageAuthor('Mike Milinkovich');
$Theme->setPageKeywords('legal, faq, foundation');

// 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/legalfaq.html'); ?>
  </div>
</div>
<?php
$html = ob_get_clean();

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