<?php

# <modeling variables>
$PR = "technology/rtsc";
$projectName = "RTSC";

$isEMFserver = (preg_match("/^emf(?:\.torolab\.ibm\.com)$/", $_SERVER["SERVER_NAME"]));
$isBuildServer = (preg_match("/^(dsdp|build)\.eclipse\.org$/", $_SERVER["SERVER_NAME"])) || $isEMFserver;
$isBuildDotEclipseServer = $_SERVER["SERVER_NAME"] == "build.eclipse.org";
$isWWWserver = (preg_match("/^(?:www.|)eclipse.org$/", $_SERVER["SERVER_NAME"]));
$isEclipseCluster = (preg_match("/^(?:www.||download.|download1.|build.)eclipse.org$/", $_SERVER["SERVER_NAME"]));
$debug = (isset ($_GET["debug"]) && preg_match("/^\d+$/", $_GET["debug"]) ? $_GET["debug"] : -1);
$writableRoot = ($isBuildServer ? $_SERVER["DOCUMENT_ROOT"] . "/dsdp/includes/" : "/home/data/httpd/writable/dsdp/");
$writableBuildRoot = $isBuildDotEclipseServer ? "/opt/public/dsdp" : "/home/www-data";

$rooturl = "http://" . $_SERVER["HTTP_HOST"] . "/$PR";
$downurl = ($isBuildServer ? "" : "http://www.eclipse.org");
$bugurl = "https://bugs.eclipse.org";

# 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/
# Optional: defaults to system theme 
#$theme = "Lazarus";
if (isset ($_GET["skin"]) && preg_match("/^(Blue|EclipseStandard|Industrial|Lazarus|Miasma|Modern|OldStyle|Phoenix|PhoenixTest|PlainText)$/", $_GET["skin"], $regs))
{
	$theme = $regs[1];
}
else
{
	$theme = "Lazarus";
}

/* projects/components in cvs */
/* "proj" => "cvsname" */
#$cvsprojs = array (); /* should always be empty */
$cvsprojs = array (
	"rse" => "org.eclipse.tm.rse"
);

/* sub-projects/components in cvs for projects/components above (if any) */
/* "cvsname" => array("shortname" => "cvs-subname") */
$cvscoms = array(
	"org.eclipse.tm.core" => array (
		"terminal" => "terminal",
		"discovery" => "discovery"
		/* add more here */
	)
);

/* Readable Project names: "bugzilla component" => "shortname" */
$projects = array(
	"RSE" => "rse",
	#"TCF" => "tcf",
	"Terminal" => "terminal",
	#"Core" => "discovery",
);

$bugcoms = array_flip($projects);
$bugcoms = preg_replace("/ /", "%20", $bugcoms);

$extraprojects = array(); //components with only downloads, no info yet, "prettyname" => "directory"
$nodownloads = array("coordinated","jcrm","temporality", "emf4net"); //components with only information, no downloads, or no builds available yet, "projectkey"
$nonewsgroup = array(); //components without newsgroup
$nomailinglist = array(); //components without mailinglist
#$incubating = $projects; // ALL components are incubating
$incubating = array("tcf"); //Only TCF is incubating for now
$hasmoved = array(
	"query" => "emf", "transaction" => "emf", "validation" => "emf",
	"eodm" => "mdt", "ocl" => "mdt",
	"jet" => "m2t", "jeteditor" => "m2t"); // components which have moved, and to where
$nomenclature = "Component"; //are we dealing with "components" or "projects"?

include_once "scripts.php";

$regs = null;

$buildtypes = array(
	"R" => "Release",
	"S" => "Stable",
	"I" => "Integration",
	"M" => "Maintenance",
	"N" => "Nightly"
);
# </modeling variables>

	# Define your project-wide Nav bars here.
	# Format is Link text, link URL (can be http://www.someothersite.com/), target (_self, _blank), level (1, 2 or 3)
	# these are optional

	$Nav->setLinkList(array());
	$branding = <<<EOBRANDING
<div id="branding">
<h1><a href="http://www.eclipse.org/rtsc/">Real-Time Software Components (RTSC)</a></h1>
</div>
EOBRANDING;

	$Menu->setProjectBranding($branding);
	
	$Nav->addNavSeparator("RTSC", 	"/dsdp/rtsc");
	$Nav->addCustomNav("About This Project", "http://www.eclipse.org/projects/project_summary.php?projectid=technology.rtsc", "_self", 1);
	$Nav->addCustomNav("Wiki", "http://wiki.eclipse.org/DSDP/RTSC", "_self", 2); 
	$Nav->addCustomNav("Mailing List", "https://dev.eclipse.org/mailman/listinfo/dsdp-rtsc-dev", "_self", 2);

	$Nav->addNavSeparator("Support", "", "_self", 2);
	$Nav->addCustomNav("Newsgroup", "http://www.eclipse.org/forums/index.php?t=thread&frm_id=8", "_self", 2);
	$Nav->addCustomNav("RTSC-Pedia", "http://rtsc.eclipseprojects.io/docs", "_self", 2);

	$Nav->addNavSeparator("Users", "", "_self", 2);
	$Nav->addCustomNav("View Bugs", "https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&classification=Technology&product=RTSC&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&cmdtype=doit", "_self", 2);
	$Nav->addCustomNav("Submit a New Bug", "https://bugs.eclipse.org/bugs/enter_bug.cgi?product=RTSC&version=unspecified&component=Core&rep_platform=All&op_sys=All", "_self", 2);
	$Nav->addCustomNav("Request a Feature", "https://bugs.eclipse.org/bugs/enter_bug.cgi?bug_severity=enhancement&component=Core&product=RTSC", "_self", 2);

	$Nav->addNavSeparator("Team", "", "_self", 2);
	$Nav->addCustomNav("GIT Repository", "https://git.eclipse.org/c/rtsc/org.eclipse.rtsc.xdccore.git/",	"_self", 2);
	#$Nav->addCustomNav("Automated IP Log", "http://www.eclipse.org/projects/ip_log.php?projectid=technology.rtsc",	"_self", 2);
	#$Nav->addCustomNav("Downloads", "http://download.eclipse.org/rtsc/downloads/index.php", "_self", 2);
unset ($bugcoms);
?>
