<?php
// $Id: scripts.php,v 1.1 2011/10/03 16:44:03 drusso Exp $

function PWD_debug($PWD, $suf, $str)
{
	global $debug_echoPWD;
	$debug_echoPWD = 1;

	if ($debug_echoPWD && is_dir($PWD) && is_readable($PWD) && ($suf != "logs" || is_writable($PWD)))
	{
		print $str;
		$debug_echoPWD = 0;
	}
}

function PWD_check($PWD, $suf)
{
	return (!is_dir($PWD) || !is_readable($PWD) || ($suf == "logs" && !is_writable($PWD)));
}

function getPWD($suf = "", $doDynCheck = true)
{
	global $PR, $App;
	$debug_echoPWD = 1; // set 0 to hide (for security purposes!)

	if ($doDynCheck)
	{
		//dynamic assignments
   		$PWD = $App->getDownloadBasePath() . "/$PR/" . $suf;
   		PWD_debug($PWD, $suf, "<!-- Found[1gDBP] $PWD -->");

		//second dynamic assignment
		if (PWD_check($PWD, $suf))
		{
			$PWD = $_SERVER["DOCUMENT_ROOT"] . "/$PR/" . $suf;
			PWD_debug($PWD, $suf, "<!-- Found[1DR+PR] $PWD -->");
		}
	}

	//static assignments
	if (PWD_check($PWD, $suf))
	{
		$servers = array(
			"/build\.eclipse\.org/" => "/opt/public/dsdp/build/$PR/$suf",
			"/dsdp(?:\.eclipse\.org)?/" => "/home/www-data/build/$PR/$suf",
			"/download1\.eclipse\.org/" => "/home/local/data/httpd/download.eclipse.org/$PR/$suf",
		);

		foreach (array_keys($servers) as $z)
		{
			if (preg_match($z, $_SERVER["HTTP_HOST"]))
			{
				$PWD = $servers[$z];
				PWD_debug($PWD, $suf, "<!-- Found[3stat] -->");
			}
		}
	}

	//try a default guess: /home/www, two options
	if (PWD_check($PWD, $suf))
	{
		$data = array(
			4 => array(
				"checkdir" => "/home/data/httpd/download.eclipse.org/",
				"tries" => array(
					"/home/data/httpd/download.eclipse.org/$PR/$suf",
					"/home/data/httpd/download.eclipse.org/tools/$PR/$suf",
					"/home/data/httpd/download.eclipse.org/technology/$PR/$suf",

					"/home/www/tools/$PR/$suf",
					"/home/www/technology/$PR/$suf",
					"/home/www/eclipse/$PR/$suf",
				)
			),
			5 => array(
				"checkdir" => "/home/local/data/httpd/download.eclipse.org/",
				"tries" => array(
				    $App->getDownloadBasePath() . "/$PR/" . $suf,

					"/home/local/data/httpd/download.eclipse.org/$PR/$suf",
					"/home/local/data/httpd/download.eclipse.org/tools/$PR/$suf",
					"/home/local/data/httpd/download.eclipse.org/technology/$PR/$suf",

					"/home/www/tools/$PR/$suf",
					"/home/www/technology/$PR/$suf",
					"/home/www/eclipse/$PR/$suf",
				)
			),
			6 => array(
				"checkdir" => "/var/www/",
				"tries" => array(
					"/var/www/$PR/$suf",
					"/var/www/html/$PR/$suf",

					"/var/www/tools/$PR/$suf",
					"/var/www/technology/$PR/$suf",
					"/var/www/eclipse/$PR/$suf",

					"/var/www/html/tools/$PR/$suf",
					"/var/www/html/technology/$PR/$suf",
					"/var/www/html/eclipse/$PR/$suf",
				)
			)
		);

		foreach (array_keys($data) as $y)
		{
			$PWD = $data[$y]["checkdir"];
			if (is_dir($PWD) && is_readable($PWD))
			{
				foreach (array_keys($data[$y]["tries"]) as $z)
				{
					$PWD = $data[$y]["tries"][$z];
					if (!PWD_check($PWD, $suf))
					{
						PWD_debug($PWD, $suf, "<!-- Found: defaults[${y}][$z] -->");
						break 2;
					}
				}
			}
		}
	}

	if ($PWD == "" || PWD_check($PWD, $suf))
	{
		print "<!-- PWD not found! -->";
	}

	debug("'$suf' ended up with '$PWD' (is_readable: " . is_readable($PWD) . ", is_dir: " . is_dir($PWD) . ")");

	return $PWD;
}

function loadDirSimple($dir, $ext, $type) // 1D array, not 2D
{
	$stuff = array();

	if (is_dir($dir) && is_readable($dir))
	{
		$handle = opendir($dir);
		while (($file = readdir($handle)) !== false)
		{
			if (preg_match("/$ext$/", $file) && !preg_match("/^\.{1,2}$/", $file))
			{
				if (($type == "d" && is_dir("$dir/$file")) || ($type == "f" && is_file("$dir/$file")))
				{
					$stuff[] = $file;
				}
			}
		}
		closedir($handle);
	}
	else
	{
		global $hadLoadDirSimpleError;
		if (!$hadLoadDirSimpleError)
		{
			$issue = (!is_dir($dir) ? "NOT FOUND" : (!is_readable($dir) ? "NOT READABLE" : "PROBLEM"));
			print "<p>Directory ($dir) <b>$issue</b> on mirror: <b>" . $_SERVER["HTTP_HOST"] . "</b>!</p>";
			print "<p>Please report this error to <a href=\"mailto:webmaster@eclipse.org?Subject=Directory ($dir) $issue in scripts.php::loadDirSimple() on mirror " . $_SERVER["HTTP_HOST"] . "\">webmaster@eclipse.org</a>, or make directory readable.</p>";
			$hadLoadDirSimpleError = 1;
		}
	}

	return $stuff;
}

function wArr($arr)
{
	print "<pre>\n";
	print_r($arr);
	print "</pre>\n";
}

function w($s, $br = "") // shortcut for echo() with second parameter: "add break+newline"
{
	if (stristr($br, "n"))
	{
		$br = "\n";
	}
	else if ($br)
	{
		$br = "<br/>\n";
	}

	print $s . $br;
}

function getNews($lim, $key, $xml = "", $linkOnly=false, $dateFmtPre="", $dateFmtSuf="") // allow overriding in case the file's not in /$PR/
{
	global $PR;

	$xml = ($xml ? $xml : file_get_contents($_SERVER["DOCUMENT_ROOT"] . "/$PR/" . "news/news.xml"));
	$news_regex = "%
		<news\ date=\"([^\"]+)\"\ showOn=\"([^\"]+)\">.*\\n
		(.+)\\n
		</news>.*\\n
		%mx";

	if (!$xml)
	{
		print "<p><b><i>Error</i></b> Couldn't find any news!</p>\n";
	}

	$regs = null;
	preg_match_all($news_regex, $xml, $regs);
	$i_real = 0;
	foreach (array_keys($regs[0]) as $i)
	{
		if ($i_real >= $lim && $lim > 0)
		{
			return;
		}

		$showOn = explode(",", $regs[2][$i]);
		if ($key == "all" || in_array($key, $showOn))
		{
			$i_real++;
			print "<p>\n";
			if (strtotime($regs[1][$i]) > strtotime("-3 weeks"))
			{
				if (preg_match("/update/i",$regs[3][$i]))
				{
					print '<img src="/dsdp/images/updated.gif" alt="Updated!"/> ';
				}
				else
				{
					print '<img src="/dsdp/images/new.gif" alt="New!"/> ';
				}

			}
			if (!$dateFmtPre && !$dateFmtSuf)
			{
				$app = (date("Y", strtotime($regs[1][$i])) < date("Y") ? ", Y" : "");
				print date("M" . '\&\n\b\s\p\;jS' . $app, strtotime($regs[1][$i])) . ' - ' . "\n";
			} else if ($dateFmtPre)
			{
				print date($dateFmtPre,strtotime($regs[1][$i]));
			}
			if ($linkOnly)
			{
				$link = preg_replace("#.+(<a .+</a>).+#","$1",$regs[3][$i]);
			}
			else
			{
				$link = $regs[3][$i];
			}
			print $link;
			if ($dateFmtSuf)
			{
				print date($dateFmtSuf,strtotime($regs[1][$i]));
			}
			print "</p>\n";
		}
	}
}

function build_news($cvsprojs, $cvscoms, $proj, $limit = 4)
{
	global $projects, $PR;

	$types = array(
		"I" => "integration",
		"M" => "maintenance",
		"N" => "nightly",
		"R" => "release",
		"S" => "stable"
	);

	$limit = ($limit >= 0 ? "LIMIT $limit" : "");

	$projectsf = array_flip($cvsprojs);
	foreach ($cvscoms as $z)
	{
		$projectsf = array_merge($projectsf, array_flip($z));
	}
	$q = array();

	foreach (array_keys($cvsprojs) as $z)
	{
		$q[$z] = "(CONVERT('$cvsprojs[$z]' USING utf8), CONVERT('' USING utf8))";
	}

	foreach (array_keys($cvscoms) as $z)
	{
		foreach (array_keys($cvscoms[$z]) as $y)
		{
			$q[$y] = "(CONVERT('$z' USING utf8), CONVERT('{$cvscoms[$z][$y]}' USING utf8))";
		}
	}

	if ($proj && isset($q[$proj]))
	{
		$where = $q[$proj];
	}
	else
	{
		$where = join(",", $q);
	}

	$result = wmysql_query("SELECT IF(`component` != '', `component`, `project`), `vanityname`, `branch`, CONCAT(DATE_FORMAT(`buildtime`, '%b %D '), IF(YEAR(`buildtime`) = YEAR(NOW()), '', YEAR(`buildtime`))), `type`, `buildtime` >= NOW() - INTERVAL 3 WEEK, CONCAT(`type`, DATE_FORMAT(buildtime, '%Y%m%d%H%i')) FROM `releases` WHERE (`project`, `component`) IN($where) AND `vanityname` != '0.0.0' ORDER BY `buildtime` DESC $limit");

	if ($result)
	{
		while ($row = mysql_fetch_row($result))
		{
			$img = ($row[5] ? "<img src=\"/dsdp/images/new.gif\" alt=\"New!\"/>" : "");
			$notes = "<a href=\"/$PR/news/relnotes.php?project=" . $projectsf[$row[0]] . "&amp;version=$row[1]\">";
			$link = "<a href=\"/$PR/downloads/?showAll=1&amp;project=" . $projectsf[$row[0]] . "&amp;hlbuild=$row[6]#$row[6]\">";
			$branch = ($row[2] == "HEAD" ? "" : "<i>$row[2]</i> ");
			$type = (preg_match("/maintenance$/", $row[2]) ? "" : $types[$row[4]] . " ");
			if ($row[4] == "R")
			{
				print "<p>$img $row[3] - $notes" . strtoupper($projectsf[$row[0]]) . " $row[1]</a> has been released! Get it ${link}here</a>.</p>";
			}
			else
			{
				print "<p>$img $row[3] - " . strtoupper($projectsf[$row[0]]) . " $branch${type}build $notes$row[1]</a> is available for ${link}download</a>.</p>";
			}
		}
	}
	else
	{
		print "<p>Sorry, can't access database.</p>";
	}
}

/* TODO: remove this when we upgrade php to >= 4.3.0 everywhere */
if (!function_exists("file_get_contents"))
{
	function file_get_contents($file)
	{
		return (is_file($file) ? join("", file($file)) : "");
	}
}

function getProjectArray($projects, $extraprojects, $nodownloads, $PR) //only the projects we have the files for
{
	$pwd = getPWD();

	$projs = loadDirSimple($pwd, ".*", "d"); // locally available
	foreach ($nodownloads as $z)
	{
		/* php <4.2.0 returns NULL on array_search() failure, but php >=4.2.0 returns FALSE on array_search() failure, so don't check that */
		if (is_numeric($s = array_search($z, $projs)))
		{
			unset($projs[$s]);
		}
	}

	return array_intersect(array_merge($projects, $extraprojects), $projs);
}

function doSelectProject($projectArray, $proj, $nomenclature, $style = "homeitem3col", $showAll = "", $showMax = "", $sortBy = "")
{
	global $incubating;
	$vars = array("showAll", "showMax", "sortBy", "hlbuild");
	$tmp = preg_replace("#^/#", "", $proj);

	$hlbuild = (isset($_GET["hlbuild"]) && preg_match("/^[IMNRS]\d{12}$/", $_GET["hlbuild"]) ? $_GET["hlbuild"] : "");

	$out = "<div class=\"" . ($style == "sideitem" ? "sideitem" : "homeitem3col") . "\">\n";
	$tag = ($style == "sideitem" ? "h6" : "h3");
	$out .= "<$tag>";
	if ($style != "sideitem" && isset($incubating) && in_array($tmp, $incubating))
	{
		$out .= '<a href="http://www.eclipse.org/projects/what-is-incubation.php"><img style="float:right"
		src="http://www.eclipse.org/dsdp/images/egg-icon.png" alt="Validation (Incubation) Phase"
		border="0" /></a>';
	}
	$out .= "$nomenclature selection</$tag>\n";
	$out .= "<form action=\"" . $_SERVER["SCRIPT_NAME"] . "\" method=\"get\" id=\"subproject_form\">\n";
	$out .= "<p>\n";
	$out .= "<label for=\"project\">$nomenclature: </label>\n";

	$out .= "<select id=\"project\" name=\"project\" onchange=\"javascript:document.getElementById('subproject_form').submit()\">\n";
	foreach ($projectArray as $k => $v)
	{
		$out .= "<option value=\"$v\">$k</option>\n";
	}
	$out .= "</select>\n";
	foreach ($vars as $z)
	{
		if ($$z !== "")
		{
			$out .= "<input type=\"hidden\" name=\"$z\" value=\"" . $$z . "\"/>\n";
		}
	}
	$out = preg_replace("#<option (value=\"$tmp\")>#", "<option selected=\"selected\" $1>", $out);
	$out .= "<input type=\"submit\" value=\"Go!\"/>\n";
	$out .= "</p>\n";
	$out .= "</form>\n";
	$out .= "</div>\n";

	return $out;
}

function project_name($proj)
{
	global $projects, $PR;

	$tmp = array_flip($projects);
	$proj = preg_replace("#^/#", "", $proj);
	return isset($tmp[$proj]) ? $tmp[$proj] : (isset($tmp[$PR]) ? $tmp[$PR] : "");
}

function debug($str, $level = 0)
{
	global $debug;

	if ($debug > $level)
	{
		print "<div class=\"debug\">$str</div>\n";
	}
}

function debug_r($str, $header = "", $footer = "", $level = 0, $isPreformatted = false)
{
	global $debug;

	if ($debug > $level)
	{
		if ($header) {
		    print "<div class=\"debug\">"; print $header; print "</div>\n";
		}
		print "<div class=\"debug\">";
		print $isPreformatted ? "<pre><small>" : "";
		print_r($str);
		print $isPreformatted ? "</small></pre>" : "";
		print "</div>\n";
		if ($footer)
		{
		    print "<div class=\"debug\">"; print $footer; print "</div>\n";
		}
	}
}

function isAuthorized()
{
	global $isEMFserver, $isBuildServer;

	if ($isBuildServer) {
		return true;
	}
	// must be on a build server and must not be on www.eclipse.org
	if ($isEMFserver && $_SERVER["DOCUMENT_ROOT"] != "/home/data/httpd/www.eclipse.org/html")
	{
		return true;
	}
	$server_name = domainSuffix($_SERVER["SERVER_NAME"]);
	$host_ip = $_SERVER["SERVER_NAME"] ? gethostbyname($server_name) : null;
	$host_name = $_SERVER["SERVER_ADDR"] ? domainSuffix(gethostbyaddr($_SERVER["SERVER_ADDR"])) : null;
	if ($host_ip && $host_name && $host_ip == $_SERVER["SERVER_ADDR"] && $host_name == $_SERVER["SERVER_NAME"])
	{
		return true;
	}
	return false;
}

function domainSuffix($domain)
{
	return preg_replace("/.*([^\.]+\.[^\.]+)$/", "$1", $domain);
}

function internalUseOnly()
{
	global $theme;
	if (!isAuthorized())
	{
		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(); include_once($App->getProjectCommon());
		ob_start(); ?>

		<div id="midcolumn">

		<div class="homeitem3col">
		<h3>For Internal Use Only</h3>
		<p>Sorry, this script must be run from a sanctioned build server. Contact Martin Oberhuber (martin.oberhuber[at]windriver.com) for details.</p>
		</div>
		</div>
		<?php
		$html = ob_get_contents();
		ob_end_clean();

		$pageTitle = "For Internal Use Only";
		$pageKeywords = "";
		$pageAuthor = "Nick Boldt";

		$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
		exit;
	}
}

function pick_project(&$proj, &$cvsproj, $cvsprojs, &$cvscom, $cvscoms, $components)
{
	if (isset($_GET["project"]))
	{
		if (sizeof($cvsprojs) > 0 && preg_match("/^(?:" . join("|", array_keys($cvsprojs)) . ")$/", $_GET["project"]))
		{
			$proj = $_GET["project"];
			$cvsproj = $cvsprojs[$proj];
		}
		else if (sizeof($components) > 0 && preg_match("/^(?:" . join("|", array_keys($components)) . ")$/", $_GET["project"]))
		{
			$proj = $_GET["project"];
			$cvsproj = $components[$proj][0];
			$cvscom = $components[$proj][1];
		}
	}
}

/* rearrange $cvscoms into a more convenient form */
function components($cvscoms)
{
	$components = array();

	if (isset($cvscoms) && is_array($cvscoms))
	{
		foreach (array_keys($cvscoms) as $z)
		{
			foreach (array_keys($cvscoms[$z]) as $y)
			{
				/* $proj = array($cvsproj, $cvscom) */
				$components[$y] = array($z, $cvscoms[$z][$y]);
			}
		}
	}

	return $components;
}

/* convert a wiki category page into a series of <li> items */
function wikiCategoryToListItems($category)
{
	$wiki_contents = "";

	// insert wiki content
	$host = "wiki.eclipse.org";
	$url = "/Category:" . $category;

	$header = "Host: $host\r\n";
	$header .= "User-Agent: PHP Script\r\n";
	$header .= "Connection: close\r\n\r\n";

	$fp = fsockopen($host, 80, $errno, $errstr, 30);
	if (!$fp)
	{
		$out .= "<li><i>$errstr ($errno)</i></li>\n";
	}
	else
	{
		fputs($fp, "GET $url HTTP/1.1\r\n");
		fputs($fp, $header);
		while (!feof($fp))
		{
			$wiki_contents .= fgets($fp, 128);
		}
		fclose($fp);
	}

	$out = "";
	if ($wiki_contents)
	{
		$m = null;
		if (preg_match("#<div id=\"mw-pages\">(.+)</div>[ \t\n]*<div class=\"printfooter\">#s", $wiki_contents, $m))
		{
			$links = null;
			if (preg_match_all("#<a href=\"([^\"]+)\" title=\"([^\"]+)\">([^<]+)</a>#", $m[1], $links, PREG_SET_ORDER))
			{
				foreach ($links as $z)
				{
					$out .= "<li><a href=\"http://wiki.eclipse.org/$z[1]\" title=\"$z[2]\">$z[3]</a></li>\n";
				}
			}
		}
	}
	return $out;
}

function getProjectFromPath($PR)
{
	$m = null;
	return preg_match("#/".$PR."/([^/]+)/build/.+#", $_SERVER["PHP_SELF"], $m) ? $m[1] : "";
}

function cvsminus($rev)
{
	if (preg_match("/^1\.1$/", $rev)) // "1.10" == "1.1" returns true, curiously enough
	{
		return $rev;
	}
	else
	{
		if (preg_match("/\.1$/", $rev))
		{
			return preg_replace("/^(\d+\.\d+)\..+$/", "$1", $rev);
		}
		else
		{
			return preg_replace("/^(.+\.)(\d+)$/e", "\"$1\" . ($2 - 1);", $rev);
		}
	}
}

function changesetForm($bugid = "")
{
	?>
	<form action="http://www.eclipse.org/dsdp/tm/news/changeset.php" method="get" target="_blank">
	<p>
		<label for="bugid">Bug ID: </label><input size="7" type="text" name="bugid" id="bugid" value="<?php print $bugid; ?>"/>
		<input type="submit" value="Go!"/>
	</p>
	<p><a href="javascript:void(0)" onclick="javascript:this.style.display = 'none'; document.getElementById('changesetinfo').style.display = 'block';">How does this work?</a></p>
	<div id="changesetinfo" style="display: none">
		<p>
			Use this form to generate a bash shell script which can be run against the projects and plugins in your workspace to produce a patch file
			showing all changes for a given bug.
		</p>
		<p>
			The requested bug must be indexed in the <a href="http://www.eclipse.org/dsdp/searchcvs.php?q=190525">Search CVS</a> database.
			Download the generated script for more information. If the script is empty, then the bug was not found.
		</p>
	</div>
	</form>
<?php
}
?>
