<?php

# <modeling variables>
$PR = "dsdp/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 $_SERVER["DOCUMENT_ROOT"] . "/dsdp/includes/scripts.php";

$regs = null;
$proj = (isset($_GET["project"]) && preg_match("/^(" . join("|", $projects) . ")$/", $_GET["project"], $regs) ? $regs[1] : getProjectFromPath($PR));
$projct= preg_replace("#^/#", "", $proj);

$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->addNavSeparator("Target Management", 	"/dsdp/tm/index.php");
	#$Nav->addCustomNav("About", 		"/dsdp/tm/about.php", 	 "_self", 2);
	#$Nav->addCustomNav("Downloads", 	"/dsdp/tm/downloads.php", "_self", 2);
	#$Nav->addCustomNav("Getting Started", "/dsdp/tm/tutorial/index.php",  "_self", 2);
	#$Nav->addCustomNav("Development", 	"/dsdp/tm/development/index.php", "_self", 2);

	$Nav->setLinkList(array());
	$branding = <<<EOBRANDING
<div id="branding">
<h1><a href="http://eclipse.org/dsdp/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=dsdp.rtsc", "_self", 1);
	$Nav->addCustomNav("Wiki", "http://wiki.eclipse.org/DSDP/RTSC", "_self", 2); 
	$Nav->addCustomNav("Newsgroup", "http://www.eclipse.org/newsportal/thread.php?group=eclipse.dsdp.rtsc", "_self", 2);
	$Nav->addCustomNav("Mailing List", "https://dev.eclipse.org/mailman/listinfo/dsdp-rtsc-dev", "_self", 2);
	$Nav->addCustomNav("RTSC-Pedia", "http://rtsc.eclipse.org/docs", "_self", 2);

	$Nav->addNavSeparator("Users", "", "_self", 2);
	$Nav->addCustomNav("View Bugs", "https://bugs.eclipse.org/bugs/buglist.cgi?query_format=advanced&classification=DSDP&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", "_self", 2);
	$Nav->addCustomNav("Request a Feature", "https://bugs.eclipse.org/bugs/enter_bug.cgi?bug_severity=enhancement&bug_status=NEW&component=Core&contenttypemethod=autodetect&contenttypeselection=text%2Fplain&form_name=enter_bug&op_sys=All&priority=P3&product=RTSC&rep_platform=All&version=unspecified", "_self", 2);

	#$Nav->addCustomNav("Team", "/dsdp/rtsc/team.php",	"_self", 2);
	#$Nav->addCustomNav("Getting Started", "/dsdp/tm/tutorial/index.php", "_self", 2);
	#$Nav->addCustomNav("Downloads", "http://download.eclipse.org/dsdp/tm/downloads/index.php", "_self", 2);
	#$Nav->addCustomNav("Report Bugs", "/dsdp/tm/bugs", "_self", 2);

	#$Nav->addNavSeparator("Integrators", "", "_self", 2);
	#$Nav->addCustomNav("API Plan", "/dsdp/tm/development/plan.php", "_self", 2);
	#$Nav->addCustomNav("Documents", "/dsdp/tm/doc/", "_self", 2);
	#$Nav->addCustomNav("Release Notes", "/$PR/news/relnotes.php?project=$proj&amp;version=HEAD", "_self", 2);
	#$Nav->addCustomNav("Legal", "dsdp/tm/development/tm-log.csv", "_self", 2);

	#$Nav->addNavSeparator("Contributors", "/dsdp/tm/development/contributors.php", "_self", 2);
	#$Nav->addCustomNav("Contributing (wiki)", "http://wiki.eclipse.org/TM_and_RSE_FAQ#Working_on_TM_.2F_RSE", "_self", 2);
	#$Nav->addCustomNav("CVS", "/dsdp/tm/development/cvs_setup.php", "_self", 2);
	#$Nav->addCustomNav("Development Tools", "/dsdp/tm/development/", "_self", 2);
	#$Nav->addCustomNav("Search CVS", "/$PR/searchcvs.php?q=file%3A+org.eclipse.tm%25%2F" . "+days%3A+7", "_self", 2);

	#$collist = "%26query_format%3Dadvanced&amp;column_changeddate=on&amp;column_bug_severity=on&amp;column_priority=on&amp;column_rep_platform=on&amp;column_bug_status=on&amp;column_product=on&amp;column_component=on&amp;column_version=on&amp;column_target_milestone=on&amp;column_short_short_desc=on&amp;splitheader=0";
	#$Nav->addCustomNav("Open Bugs", "$bugurl/bugs/colchange.cgi?rememberedquery=product%3D" . $projectName . (isset ($bugcoms[$proj]) ? "%26component=$bugcoms[$proj]" : "") . "%26bug_status%3DNEW%26bug_status%3DASSIGNED%26bug_status%3DREOPENED%26order%3Dbugs.bug_status%2Cbugs.target_milestone%2Cbugs.bug_id" . $collist, "_self", 2);

#$App->AddExtraHtmlHeader("<link rel=\"stylesheet\" type=\"text/css\" href=\"/dsdp/includes/common.css\"/>\n");
unset ($bugcoms);
?>
