<?php
/**
 * Copyright (c) 2009, 2018 Eclipse Foundation.
 *
 * 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:
 *   Wayne Beaton (Eclipse Foundation) - Initial implementation
 *   Eric Poirier (Eclipse Foundation)
 *
 * SPDX-License-Identifier: EPL-2.0
 */

// Set the theme for your project's web pages.
// See the Committer Tools "How Do I" for list of themes
// https://dev.eclipse.org/committers/
$theme = NULL;
$App->Promotion = TRUE;
$App->setOutDated();
// Define your project-wide Nav bars here.
// Format is Link text, link URL (can be http://www.someothersite.com/), target
// (_self, _blank)
$Nav->addNavSeparator("Usage Data", "index.php");
$Nav->addCustomNav("User Guide", "userguide.php", "_self", 1);
$Nav->addCustomNav("Terms of Use", "terms.php", "_self", 1);
$Nav->addCustomNav("FAQ", "faq.php", "_self", 1);
$Nav->addCustomNav("Contact Us", "mailto:eclipse_udc@eclipse.org", "_self", 1);

$Nav->addNavSeparator("Reports", "index.php");
$Nav->addCustomNav("Usage Trends", "usage.php", "_self", 1);
$Nav->addCustomNav("Views, Editors, ...", "results.php", "_self", 1);

$Nav->addNavSeparator("Reports (csv)", null);
$Nav->addCustomNav("Bundles", "reports/csv.php?kind=bundle", "_self", 1);
$Nav->addCustomNav("Views", "reports/csv.php?kind=view", "_self", 1);
$Nav->addCustomNav("Editors", "reports/csv.php?kind=editor", "_self", 1);
$Nav->addCustomNav("Perspectives", "reports/csv.php?kind=perspective", "_self", 1);
$Nav->addCustomNav("Commands", "reports/csv.php?kind=command", "_self", 1);
$Nav->addCustomNav("Geography", "reports/csv.php?geo", "_self", 1);
