<?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 = "Eclipse Foundation Software User Agreement";

// Fetch notice.html content from <body></body>
$DOMDocument = new DOMDocument();
$DOMDocument->loadHTMLFile(dirname(__FILE__) . "/notice.html");
$body = $DOMDocument->getElementsByTagName('body')->item(0);
$epl = "";
foreach ($body->childNodes as $childNode) {
  $epl .= $DOMDocument->saveHTML($childNode);
}

$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("eclipse, license, user, agreement, sua");
$Theme->setPageAuthor("Mike Milinkovich");

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

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