<?php
/**
 * Copyright (c) 2005, 2020 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
 *
 * SPDX-License-Identifier: EPL-2.0
 */

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

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

include($App->getProjectCommon());

$pageTitle = "Guidelines for User Groups that Support Eclipse Foundation Projects and Working Groups";
$Theme->setPageTitle($pageTitle);
$Theme->setPageKeywords("legal, documents, about");
$Theme->setPageAuthor("Wayne Beaton");

ob_start();
include("content/en_" . $App->getScriptName());
$html = ob_get_clean();
ob_end_clean();
$Theme->setNav($Nav);
$Theme->setHtml($html);
$Theme->generatePage();