<?php

//
// Simple Index - sindex.php
//
// Project home: http://jomppa.net/projects/simple-index/
//      Version: 0.1
//         Date: 2011-02-20
//       Author: Joni Rantala 2011
//               joni@jonirantala.fi
//               http://jomppa.net/
//

main();

function main() {
	$args = &$_GET;
	if (empty($_GET["s"])) {
		$uri = $_SERVER["REQUEST_URI"];
		if (($pos = strpos($uri, "?")) !== false) {
			parse_str(substr($uri, $pos + 1), $a);
			$args = &$a;
		}
	}

	$path      = !empty($_GET["p"]) ? "./{$_GET["p"]}" : "./";
	$sort      = !empty($args["s"]) && in_array($args["s"], array("n", "s", "m")) ? $args["s"] : "n";
	$direction = $args["d"] == "d" ? SORT_DESC : SORT_ASC;

	header("Content-Type: text/html; charset=utf-8");
	printHeader();
	printFileListing(
		$path,
		"*",
		array(
			basename(__FILE__)
		),
		$sort,
		$direction
	);
	printFooter();
}

function printHeader() {
?>
<!DOCTYPE html>
<html>
<head>
<title>Index of <?php echo currentPath(); ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Teleprom.TV Downloads">
<style type="text/css">
body         { margin: 5px; padding: 0; background: #fff; }
a            { color: #0088ff; }
a:visited    { color: #8800aa; }
a img        { border: none; }
body, td, th { font-family: "Courier New", Courier, monospace; font-size: 12pt; text-align: left; vertical-align: top; color: #333333; }
h1           { font-size: 16pt; text-align: center; }
h1 a         { color: #000000 !important; text-decoration: none; }
p            { text-align: center; font-size: 9pt; }
p a          { color: #666666 !important; }
table        { margin: 0 auto; border-collapse: collapse; border: 1px solid #E0E0FF; min-width: 400px;}
th, td       { padding: 5px 10px; }
th           { background: #6F6FB7; color: #ffffff; }
th a         { color: #ffffff !important; text-decoration: none; }
th img       { position: relative; top: -3px; left: 2px; }
td           { border-bottom: 1px dotted #cccccc; background: #ffffff; }
tr.odd td    { background: #ffffff; }
small        { font-size: 9pt; }
.error		 { color: Red; }
</style>
</head>
<body>
<?php
}

function printFooter() {
?>
</body>
</html>
<?php
}

function currentPath() {
	return rtrim(dirname($_SERVER["SCRIPT_NAME"]) . "/" . ltrim($_GET["p"], "/"), "/");
}

function parentDirectory() {
	$path = currentPath();
	$path = substr($path, 0, strrpos($path, "/"));

	return $path == "" ? "/" : $path;
}

function formatSize($size) {
    $units = array("B", "K", "M", "G", "T");
    for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;
    return round($size, 2) . " " . $units[$i];
}

function printFileListing($path = "./", $pattern = "*", $excluded = array(), $sort = "n", $direction = SORT_ASC) {
	$files = glob("$path$pattern");
	
	$sizes      = array();
	$timestamps = array();
	
	if (!is_array($files)) $files = array();
	
	foreach ($files as $index => $file) {
		foreach ($excluded as $regexPattern) {
			if (preg_match("@$regexPattern@", $file)) {
				unset($files[$index]);
				continue 2;
			}
		}
	
		$sizes[]      = filesize($file);
		$timestamps[] = filemtime($file);
	}
	
	switch ($sort) {
	// size
	case "s":
		array_multisort($sizes, $direction, $files, $timestamps);
		break;
	// modified
	case "m":
		array_multisort($timestamps, $direction, $files, $sizes);
		break;
	// name
	case "n":
	default:
		array_multisort($files, $direction, $sizes, $timestamps);
		break;
	}
			
	$iconFile = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkJGQUI1REY1OEVDMjExRTU4QzJDODlGNzlFRUREQzRDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkJGQUI1REY2OEVDMjExRTU4QzJDODlGNzlFRUREQzRDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkZBQjVERjM4RUMyMTFFNThDMkM4OUY3OUVFRERDNEMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkZBQjVERjQ4RUMyMTFFNThDMkM4OUY3OUVFRERDNEMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4xiXXUAAABnElEQVR42oyTv0vDQBTH37s0bVrQDlpBURAcK3QS3Bz8B0QEFzu42cHFyUVQHARxEqSiYJeCkzi5uQmim+gigojSLlqsKa3QpM3zXTlDGtPWL3xyhLv3+w6JCEwbIHlmzhRrdKoLGIa/qtoWre1Mx47XU5G2jZD82A70MXlEvOLfHNP0nNGZrNAge/vRxNyTdWSEEObHdYgIAJQZPJo0mTqv3DcJJgTCS0AGl8yszQfAhkw0iodvi3EYNACEOiBXi9EgWNFWKhoC6pjt13GZA7mGUqRW7ODggSlIEKFaa9CBadOo24N/KMPEWhERkt8NuPmyaITjFUQPQxlgTGVYU8gs6uzI8ZbQSWHmmln1TQXbxugRqc0NJskMMbLWfVXCrqdfgQ4cNYkVxn+hFpi9Xg6kcYOZYhIMNwoumDtmTl0w0c3Br4oKOb4tVcJnpy5750++fRlxM6BPro33Iukq/V6y1VlyMxiI4Gtch/dSHbbZ44nvMXklHIJ0PAzlhIHProOwBhUmzQ8rz4ktdQvPb68UFpg2BJTl/48AAwAqA3oXmhwarQAAAABJRU5ErkJggg==";
	//"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFAAAA5PX6yez1/////////SHUhAAAAAV0Uk5T/////wD7tg5TAAAAQUlEQVR42mJgQQMMIAwFCAEmJkZGRgZmBnQBsAhEAKieEaoJoQKkCLcAxBZGyrQwoWuBiDCg+QXuMAzfogCAAAMAPGcCZJ/5Pw0AAAAASUVORK5CYII=";
	$iconDir  = "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjE3MDQwNTZCOEVDNjExRTU5OTExODY3MDY5ODk1QTE3IiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjE3MDQwNTZDOEVDNjExRTU5OTExODY3MDY5ODk1QTE3Ij4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6MTcwNDA1Njk4RUM2MTFFNTk5MTE4NjcwNjk4OTVBMTciIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6MTcwNDA1NkE4RUM2MTFFNTk5MTE4NjcwNjk4OTVBMTciLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7NUlXqAAAA/0lEQVR42mL8//8/AyWAhWHHPn2GPYcLGVhZhZHEnwJxM5SGgB8/GRi8XRgYXGzRDJi/ciPD/cfyDMxM6IaLAXEonPf1GwODhgoDg6M1TOQviGD87xQK9AMIYfXKbZAaMAskz8/HwMDHC5P7DMQ9jP9dw/8y/PnzBsgBYWRngNhscB4j0Jw/QEv/gS3+B8RCQMzLArXhBRC/BGJmnKEFcgHImxCvgkx5D8TGLFBpZnB44DMAFTDC1DIxUAhGDYCEPDiSkDAxAK6WieHvP1iUkJKr/sNcz8KgpbqV4cRZb2BmUiPR9SBLjzP+v3SNh+HspXAGFhYxEg34AMQrAQIMAO8EQwp41q9zAAAAAElFTkSuQmCC";
	//"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABJQTFRF//IAAAAA8ucA////ysAA////eQEvdgAAAAZ0Uk5T//////8As7+kvwAAADtJREFUeNpiYEUDDKyMyAAswMLExAAFzIyMDCgKGJmBAkgKGOgrwIQsAHYpTAjkUlS/gAQwfIsGAAIMAN7QAc8Ckh4aAAAAAElFTkSuQmCC";
	$iconAsc  = "iVBORw0KGgoAAAANSUhEUgAAAAcAAAAECAMAAAB1GNVPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF////////VXz1bAAAAAJ0Uk5T/wDltzBKAAAAGklEQVR42mJgZGRkgGAGBhABohigJBAABBgAATAADUnnWMkAAAAASUVORK5CYII=";
	$iconDesc = "iVBORw0KGgoAAAANSUhEUgAAAAcAAAAECAMAAAB1GNVPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAZQTFRF////////VXz1bAAAAAJ0Uk5T/wDltzBKAAAAF0lEQVR42mJggAJGKMkIYjCCaDAGCDAAAJAADcpaiWkAAAAASUVORK5CYII=";
	
	$parent = explode("/", currentPath());
	
	echo "<h1><a href=\"" . currentPath() . "\">Обзор директории " . currentPath() . "</a></h1>\n";
	echo "<p><a href=\"" . parentDirectory() . "\">&larr; в предыдущую директорию</a></p>\n";
	if($_GET['search'] == 'no') {
	echo "<p class='error'>К сожалению, запрашиваемый файл или раздел не найден...</p>";
	}
	echo "<table>\n";
	echo "\t<tr>\n\t\t<th></th>\n";
	
	$labels = array(
		"n" => "Название",
		"s" => "Размер",
		"m" => "Дата"
	);
	
	foreach ($labels as $key => $label) {
		$link  = "?s=$key";
		$image = "";
		
		if ($sort == $key) {
			$d      = $direction == SORT_DESC ? "a" : "d";
			$link  .= "&amp;d=$d";
			$icon   = $d == "a" ? $iconDesc : $iconAsc;
			$image  = " <img src=\"data:image/png;base64,$icon\" alt=\"\" />";
		}
		
		echo "\t\t<th><a href=\"$link\">$label$image</a></th>\n";
	}
	
	echo "\t</tr>\n";

	foreach ($files as $index => $file) {
		$name     = basename($file);
		$url      = currentPath() . "/" . rawurlencode($name);
		$isDir    = is_dir($file);
		$type     = $isDir ? "Directory" : "File";
		$icon     = $isDir ? $iconDir    : $iconFile;
		$size     = $isDir ? "-"         : formatSize($sizes[$index]);
		$modified = date("Y-m-d H:i:s", $timestamps[$index]);
		$class    = $class == "even" ? "odd" : "even";
			//hide files
			$hidden_files = array("cgi-bin", "box_update.php", "dunehd", "mini", "update.php", "update_tptv.txt", "e2", "emails", "configupdate.xml", "swupdate.xml", "update.xml", "error_log", "AuroralabLtdUpdate_0.5.0006_20150616.pack", "dune_plugin_tptv.tgz");
			if(!in_array($name, $hidden_files)) {		
			//
		echo "\t<tr class=\"$class\">\n" .
			 "\t\t<td><img src=\"data:image/png;base64,$icon\" title=\"$type\" alt=\"$type\" /></td>\n" .
			 "\t\t<td><a href=\"$url\">$name</a></td>\n" .
			 "\t\t<td><small>$size</small></td>\n" .
			 "\t\t<td><small>$modified</small></td>\n" .
			 "\t</tr>\n";
			}	 
	}

	echo "</table><p>Для скачивания файла кликните правой кнопкой, выберите &laquo;Соxранить объект как...&raquo;, место для соxранения и нажмите &laquo;ОК&raquo;</p>
	<p style='color:red;'>Внимание! Гарантированную работу сервиса компания Teleprom.TV может предоставить только на приставкаx, приобретенныx в нашем Онлайн-магазине.
	<br>Все риски, связанные с установкой приложений, виджетов и с просмотром сервиса на другиx приставкаx, пользователь несет самостоятельно, а претензии по качеству работы или порчи стороннего оборудования не принимаются!</p>\n";
}
