<?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("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/newsportal/thread.php?group=eclipse.dsdp.rtsc", "_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->addNavSeparator("Team", "", "_self", 2);
	$Nav->addCustomNav("SVN Repository", "/svnroot/dsdp/org.eclipse.rtsc",	"_self", 2);
	#$Nav->addCustomNav("Downloads", "http://download.eclipse.org/dsdp/tm/downloads/index.php", "_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);
?>
