<html>
	<header>
		<title>Evénements à venir</title>
	</header>
	<body style="font-family: helvetica; line-height: 24px; font-size: 16px;">
<?php
	require 'settings.php';

	if ($password && (!isset($_SERVER['PHP_AUTH_PW']) || $_SERVER['PHP_AUTH_PW'] != $password)) {
		header('WWW-Authenticate: Basic realm="bbn"');
		header('HTTP/1.0 401 Unauthorized');
		die('<p>Access denied.</p></body></html>');
	}
	
	/*function ics2json($input)
	{
		$id = 0;
		$root = array();
		$curr = root;
		input.split("\r\n").forEach(l =>
		{
			var key = l.split(":")[0].split(";")[0];
			var val = l.split(":")[1];
			if (key == "BEGIN")
			{
				if (curr[val])
				{
					val += "_" + (id++);
				}
				curr[val] = {
					parent: curr
				};
				curr = curr[val];
			}
			else if (key == "END")
			{
				var parent = curr.parent;
				delete curr.parent;
				curr = parent;
			}
			else
			{
				curr[key] = key.startsWith("DT") ? dt(val) : val;
			}

		});

		root.VCALENDAR.VEVENTS = [];
		Object.keys(root.VCALENDAR)
		.filter(k => (k == "VEVENT" || k.startsWith("VEVENT_")))
		.forEach(k =>
		{
			root.VCALENDAR.VEVENTS.push(root.VCALENDAR[k]);
			delete root.VCALENDAR[k];
		});

		return root.VCALENDAR;
	}*/

	// Get ics file
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_USERPWD, $user . ':' . $password);
	curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
	$result = curl_exec($curl);

	if (!$result)
	{
		die('<p>Error while getting ics file from caldav server.</p></body></html>');
	}
	curl_close($curl);

	// port "showresult" js function:
	$recent = 7;
	if (isset($_GET['recent']))
	{
		$recent = $_GET['recent'];
	}
	$recentonly = isset($_GET['recentonly']);

	echo '<h1>Evénements à venir</h1>';

?>
	</body>
</html>

<!-- old -->
		<div id="content">Récupération du calendrier...</div>
		<script type="text/javascript">


function dt(s)
{
	var formatted = s.substr(0,4) + "-" + s.substr(4,2) + "-" + s.substr(6,2);
	if (s.length > 8)
	{
		formatted += "T" + s.substr(9,2) + ":" + s.substr(11,2) + ":" + s.substr(13,2);
	}
	return new Date(formatted);
}

function formatdate(d)
{
	return d.toLocaleString('fr-FR', { timeZone: 'Europe/Paris', dateStyle: "full", timeStyle: "short" });
}

function showresult()
{
	if (xhr.status == 200)
	{
		var params = new URLSearchParams(window.location.search);
		var recent = parseInt(params.get("recent"));
		if (isNaN(recent))
		{
			recent = 7;
		}

		var recentonly = params.get("recentonly");

		var html = "<h1>Evénements à venir</h1>";
		html += `<h3>${formatdate(new Date)}</h3>`;
		html += `<div>En gras: modifié les ${recent} derniers jours</div>`;

		var weblink = params.get("weblink");
		if (weblink)
		{
			html += `<div><a target="_blank" href="${weblink}">Lien vers calendrier web</a></div>`;
		}

		var o = ics2json(xhr.responseText);

		var lastmodified = new Date();
		lastmodified.setDate(lastmodified.getDate() - recent);
		var group = {};

		o.VEVENTS
		.filter(e => e.DTSTART >= (new Date) && (!recentonly || e.DTSTAMP >= lastmodified))
		.sort( (a,b) => a.DTSTART - b.DTSTART)
		.forEach(e => {
			var formatteddate = formatdate(e.DTSTART);
			var splitdate = formatteddate.split(" ");
			var year = splitdate[3];
			var month = splitdate[2];

			if (!group[year])
			{
				html += `<h2>${year}</h2>`;
				group[year] = {};
			}

			if (!group[year][month])
			{
				html += `<h3>${month}</h3>`;
				group[year][month] = true;
			}

			var line = `<li title="modifié le ${formatdate(e.DTSTAMP)}"> ${formatteddate}: ${e.SUMMARY}`;
			if (e.DTSTAMP >= lastmodified)
			{
				line = `<b>${line}</b>`;
			}
			html += line;
		});

		content.innerHTML = html;
	}
}

var password = localStorage.getItem("icspassword");
if (!password)
{
	password = prompt("password:");
	localStorage.setItem("icspassword", password);
}

var xhr = new XMLHttpRequest();
xhr.onload = showresult;
xhr.open("POST", "ics.php");
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send("password=" + password);

		</script>