blob: 32754b8df2ac067cdd1c92593ff86bd10255e1d1 [file] [log] [blame]
<?php
// todo: unsure if can handle filenames that are URLs?
// handy constant to compute file size in megabytes
function fileSizeInMegs($filename) {
$onemeg=1024*1024;
$zipfilesize=filesize($filename);
$zipfilesize=round($zipfilesize/$onemeg, 0);
return $zipfilesize;
}
function fileSizeForDisplay($filename) {
$onekilo=1024;
$onemeg=$onekilo * $onekilo;
$criteria = 10 * $onemeg;
$scaleChar = "M";
if (file_exists($filename)) {
$zipfilesize=filesize($filename);
if ($zipfilesize > $criteria) {
$zipfilesize=round($zipfilesize/$onemeg, 0);
$scaleChar = "M";
}
else {
$zipfilesize=round($zipfilesize/$onekilo, 0);
$scaleChar = "K";
}
}
else {
$zipfilesize = 0;
}
$result = "(" . $zipfilesize . $scaleChar . ")";
return $result;
}
function displayFileLine($downloadprefix, $filename, $zipfilesize, $fileShortDescription) {
echo "<td align=\"right\" valign=\"top\" width=\"15%\">";
echo "<a href=\"$downloadprefix$filename\">" . $fileShortDescription . "</a>";
echo "</td><td align=\"right\" valign=\"top\" width=\"3%\">";
echo $zipfilesize;
echo "</td>";
echo "<td align=\"right\" valign=\"top\" width=\"9%\">";
echo "[<a href=\"checksum/$filename.md5\">md5</a>] [<a href=\"checksum/$filename.sha1\">sha1</a>]";
echo "</td>";
}
function displayRepoFileLine($downloadprefix, $filename, $zipfilesize, $fileShortDescription) {
echo "<td align=\"right\" valign=\"top\" width=\"30%\">";
echo "<a href=\"$downloadprefix$filename\">" . $fileShortDescription . "</a>";
echo "</td><td align=\"right\" valign=\"top\" width=\"3%\">";
echo $zipfilesize;
echo "</td>";
}
function displayp2repoarchives($zipfilename, $downloadprefix, $fileShortDescription, $label, $description) {
$filename=$zipfilename.".zip";
if (file_exists($filename)) {
echo "<tr>";
echo "<td align=\"left\" valign=\"top\" width=\"10%\"><b>".$label."</b></td>";
echo "<td align=\"left\" valign=\"top\">";
echo "<p>".$description."</p>";
echo "</td>";
$zipfilesize=fileSizeForDisplay($filename);
displayRepoFileLine($downloadprefix, $filename, $zipfilesize, $fileShortDescription);
echo "</tr>";
}
}
function resourceExist($url, $mirrorPrefixuri, $prereqfilename, $eclipseFSpathPrefix)
{
$result = false;
$allowURLopen = ini_get('allow_url_fopen');
if ($allowURLopen && stream_last_modified($url)) {
$result = true;
}
else {
// TODO: for now, we'll do a raw check on the whole file name, since enable_url_open
// is off. better would be to check if we are on build.eclipse.org or download.eclipse.org?
$wholePath = trim($eclipseFSpathPrefix) . "/" . trim($mirrorPrefixuri) . "/" . trim($prereqfilename);
if (file_exists($wholePath)) {
$result = true;
}
}
return $result;
}
function stream_last_modified($url)
{
if (function_exists('version_compare') && version_compare(phpversion(), '4.3.0') > 0)
{
if (!($fp = @fopen($url, 'r')))
return NULL;
$meta = stream_get_meta_data($fp);
for ($j = 0; isset($meta['wrapper_data'][$j]); $j++)
{
if (strstr(strtolower($meta['wrapper_data'][$j]), 'last-modified'))
{
$modtime = substr($meta['wrapper_data'][$j], 15);
break;
}
}
fclose($fp);
}
else
{
$parts = parse_url($url);
$host = $parts['host'];
$path = $parts['path'];
if (!($fp = @fsockopen($host, 80)))
return NULL;
$req = "HEAD $path HTTP/1.0\r\nUser-Agent: PHP/".phpversion()."\r\nHost: $host:80\r\nAccept: */*\r\n\r\n";
fputs($fp, $req);
while (!feof($fp))
{
$str = fgets($fp, 4096);
if (strstr(strtolower($str), 'last-modified'))
{
$modtime = substr($str, 15);
break;
}
}
fclose($fp);
}
return isset($modtime) ? strtotime($modtime) : time();
}
function isMirrored($uriToCheck) {
global $debugScript;
global $debugFunctions;
$localuri = $uriToCheck;
$debugMirrorList = false;
if ($debugScript) {
echo "uriToCheck: " . $localuri . "<br />";
}
$xmlcount = 0;
/* This method true and accurate method of parsing mirror results
* may be expensive, and would
* likely cause artificially high counts of "downloads".
* Could maybe use if somehow only checked once ever 5 minutes or something.
// turn off warnings, as sometimes HTML is returned, which causes lots of warnings
$holdLevel = error_reporting(E_ERROR);
$mirrorsxml=simplexml_load_file(rawurlencode($localuri) . urlencode("&format=xml"));
error_reporting($holdLevel);
if ($mirrorsxml) {
if ($debugFunctions) {
echo "root node: " . $mirrorsxml->getName() . "<br />";
}
if (strcmp($mirrorsxml->getName(), "mirrors") == 0) {
foreach ($mirrorsxml->children() as $mirror) {
if (strcmp($mirror->getName(),"mirror") == 0) {
$xmlcount=$xmlcount+1;
}
if ($debugMirrorList) {
print_r($mirror);
echo "<br />";
}
}
}
if ($debugFunctions) {
echo "Mirror count: " . $xmlcount . "<br />";
}
}
*/
/*
* Use simple heuristic based on pattern
* in the URI ... if it contains "/downloads/" then assume it's mirrored
*/
if (strpos($uriToCheck, "webtools/downloads/") > 0) {
$xmlcount = 1;
}
return ($xmlcount > 0);
}
// TODO: replace with Phoenix variables
function getPlatform () {
global $debugScript;
global $debugFunctions;
// getBrowser is expensive, so cache the data
static $browser;
$platform = "unknown";
if(ini_get("browscap")) {
if(!isset($browser)){
$browser = get_browser(null, true);
}
if ($browser) {
$rawPlatform = $browser['platform'];
if ($debugFunctions) {
echo "browser platfrom: " . $rawPlatform . "<br />" ;
}
if ($debugFunctions) {
$browserKeys = array_keys($browser);
foreach ($browserKeys as $key) {
echo $key . ": " . $browser[$key] . "<br />";
}
}
}
if (strpos($rawPlatform, "Win") === 0) {
$platform="windows";
} else if (strpos($rawPlatform, "Linux") === 0) {
$platform="linux";
} else if (strpos($rawPlatform, "Mac") === 0) {
$platform="mac";
}
}
return $platform;
}
function getPrereqReferenceOrName($eclipseMirrorScript, $mirrorPrefixuri, $prerequrl, $prereqfilename, $eclipseFSpathPrefix) {
// todo: we really only need "if exists" so could make a bit more efficient
// I tried "file_exists" but is didn't seem to work on my test server
// For these pre-reqs, we assume if they exist, they are mirrored. This is true
// 99% of the time.
if (resourceExist($prerequrl, $mirrorPrefixuri, $prereqfilename, $eclipseFSpathPrefix)) {
$reflink="<a href=\"" . $eclipseMirrorScript . $mirrorPrefixuri . "/" . $prereqfilename . "\">" . $prereqfilename . "</a>";
} else {
$reflink=$prereqfilename;
}
return $reflink;
}
?>