<?php
/**
 * Copyright (c) 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:
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */

require_once dirname(__FILE__) . "/../eclipse.org-common/system/app.class.php";

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

include (dirname(__FILE__) . "/_projectCommon.php");

$pageTitle = "Third Party Content Licenses";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("legal, privacy, policy");
$Theme->setPageAuthor("Wayne Beaton");

$licenseFile = dirname(__FILE__) . "/licenses.json";

function dumpLicenseList($file) {
  $licenses = json_decode(file_get_contents($file), true);
  echo "<ul>";
  foreach ($licenses['approved'] as $spdx => $name) {
    echo "<li>{$name}</li>";
  }
  echo "</ul>";
}

// I'm pretty sure that this just won't work; it would end up
// being the date that the content was extracted from Git onto
// the web server.
// $modified = max(filemtime(__FILE__), filemtime($licenseFile));
$modified = strtotime("2017-10-19");

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

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