<?php
if (!isset($_GET["addonName"])){
	header("HTTP/1.0 404 Not Found");
	die("Invalid add-on name");
}
require_once("common.php");
if (!isset($_GET["channel"]))
	$_GET["channel"] = "stable";
$addonName = correctAddonName($_GET["addonName"]);
$channel = $_GET["channel"];
$lastVersions = array();
try {
	$lastVersions = getLatestVersions($addonName, $_GET["addonVersion"], $_GET["NVDAVersion"]);
}
catch (Exception $e){
	$data["msg"] = "Unable to retrieve latest versions";
	die(json_encode($out));
}

if (!array_key_exists($channel, $lastVersions) || $lastVersions[$channel] == ""){
	die("Unknown channel (".$_GET["channel"].", ".$addonName.")");
	header("HTTP/1.0 404 Not Found");
} else $a = $lastVersions[$channel];
$fn = $addonName.'/'.$addonName."-".$a.".nvda-addon";
if (!file_exists($fn)){
	header("HTTP/1.0 404 Not Found");
	die("File not found");
}
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".urlencode($addonName."-".preg_replace("#([\r\n\t]+)#U",'',$a).".nvda-addon"));
header("Content-Description: NVDA Addon File");
header("Content-Length: ".filesize($fn));
if(preg_match("/msie|(microsoft internet explorer)/i", $_SERVER["HTTP_USER_AGENT"]))
{
	header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
	header("Pragma: public");
}
else header("Pragma: no-cache");
readfile($fn);
if(stristr($_SERVER['HTTP_USER_AGENT'], "Python-urllib")) $autoUpdate = 1;
else $autoUpdate = 0;
try{
	$pdo = new PDO("sqlite:/home/www_data/stats_".$addonName.".sqlite");
	$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
	$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(Exception $e) {
	die();
}
$pdo->query("CREATE TABLE IF NOT EXISTS dl ( 
	id INTEGER PRIMARY KEY AUTOINCREMENT,
	channel VARCHAR(7),
	brailleDisplay VARCHAR(21),
	AddonVersionOld VARCHAR(14),
	AddonVersionNew VARCHAR(14),
	NVDAVersion VARCHAR(50),
	NVDAVersionDesc VARCHAR(50),
	IPAddr VARCHAR(50),
	lang VARCHAR(4),
	langDesc VARCHAR(4),
	date DATETIME,
	autoUpdate INTEGER
);");

if (isset($_GET["language"])) $language = $_GET["language"]; else $language = '?';
$lg = explode("_", $language, 2);
$language = $lg[0];
if (sizeof ($lg)==2) $languageDesc = $lg[1];
else $languageDesc = '?';
if (isset($_GET["NVDAVersion"]) && $_GET["NVDAVersion"]){
	$d = explode("-", $_GET["NVDAVersion"], 2);
	$NVDAVersion = $d[0]; 
	if (sizeof ($d)==2) $NVDAVersionDesc = $d[1];
	else $NVDAVersionDesc = '';
}
else {
	$NVDAVersion     = "browser";
	$NVDAVersionDesc = $_SERVER["HTTP_USER_AGENT"];
}
if (isset($_GET["addonVersion"]) && $_GET["addonVersion"]) $versionAddon = $_GET["addonVersion"]; else $versionAddon = '?';
if (isset($_GET["brailledisplay"])) $brailledisplay = $_GET["brailledisplay"]; else $brailledisplay = '?';
if (isset($_GET["channel"])) $channel = $_GET["channel"]; else $channel = '?';
if(isset($_SERVER["REMOTE_ADDR"])) $ip = $_SERVER['REMOTE_ADDR']; else $ip = '?';
if(!in_array($_SERVER['REMOTE_ADDR'], $ipBlackListed)
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "wget")
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "Yahoo!")
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "Googlebot") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "bnf.fr_bot") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "CCBot") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "DotBot") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "Bot-") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "bot-") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "bot)") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "Bot)") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "bot/") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "Bot/") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "bingbot") 
	&& !stristr($_SERVER['HTTP_USER_AGENT'], "FeedBurner")){
	$stmt = $pdo->prepare("INSERT INTO dl (date, lang, langDesc, NVDAVersion, NVDAVersionDesc, AddonVersionOld, AddonVersionNew, IPAddr, brailleDisplay, channel, autoUpdate) VALUES
			(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
	$result = $stmt->execute(array(date("Y-m-d H:i:s"), $language, $languageDesc, $NVDAVersion, $NVDAVersionDesc, $versionAddon, $a, $ip, $brailledisplay, $channel, $autoUpdate));
	if ($language != "?")
	$arg3 = "#".getNBDL($a, $addonName).": $language, $a (from $versionAddon), NVDA $NVDAVersion, $brailledisplay";
	//@exec("/bin/pushNotif PHP \"".$addonName." DL\" ".escapeshellarg($arg3));
}
