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

  $App->preventCaching();

  include("_projectCommon.php");

  $pageTitle     = "Manage Jobs";
  $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);
