<?php
/*******************************************************************************
 * Copyright (c) 2015 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Eric Poirier (Eclipse Foundation) - initial API and implementation
 *******************************************************************************/

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

  $App   = new App();
  $Nav  = new Nav();
  $Menu   = new Menu();
  $MailingLists = $App->getWebmaster('mailinglists');

  $App->preventCaching();

  include("_projectCommon.php");

  $pageTitle     = "Manage Mailing Lists and Newsgroups";
  $pageKeywords  = "";
  $pageAuthor    = "Eclipse Foundation, Inc.";

  // Custom theme variables
  $variables = array();
  $variables['main_container_classes'] = 'container-full footer-offset breadcrumbs-offset background-grey';
  $App->setThemeVariables($variables);


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

  # Generate the web page
  $App->generatePage($theme, $Menu, NULL, $pageAuthor, $pageKeywords, $pageTitle, $html);
