<?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();
  $Firewall = $App->getWebmaster('firewall');

  $App->preventCaching();

  include("_projectCommon.php");

  $pageTitle     = "Manage Firewall Rules";
  $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();
  print $Firewall->outputPage($pageTitle, 'firewall');
  $html = ob_get_clean();

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