<?

	include("config.php");
	include("funzioni_url.php");
	include("funzioni_varie.php");

	$recordsperpage=5;

	mysql_connect($db['host'], $db['user'], $db['pass']) or die(mysql_error());
	mysql_select_db($db['database']) or die(mysql_error());

	// Ritorna 1 se l'elemento alla $posizione all'interno
	// dell'array $dati e' l'ultimo per quel $livello ..
	// per decidere che simbolo mettere prima dell'autore
	function ultimo_del_livello($dati, $livello, $posizione) {
		$i = $posizione+1;
		while ($i < count($dati)) {

			// C'e' un elemento a pari livello, non e' l'ultimo
			if ($dati[$i]['livello'] == $livello)
				return 0;

			// C'e' un elemento un livello prima, fine del sottoalbero
			// e quindi e' l'ultimo
			if ($dati[$i]['livello'] < $livello)
				return 1;

			$i++;
		} // while

		// Se ho scorso tutto l'albero .. era l'ultimo!
		return 1;
	} // ultimo_del_livello()

	$time_start = getmicrotime();

	if (!isset($_GET['ml']) || !isset($_GET['id']))
		die("Questa pagina non puo' essere visualizzata senza gli opportuni parametri..<br> Torna indietro");

	// Sanity check
	switch($_GET['ml']) {
		case 'gufi_aiuto':
		case 'gufi_annunci':
		case 'gufi_esperti':
		case 'gufi_freesbie':
		case 'gufi_irc':
		case 'gufi_test':
		case 'gufi_traduzioni':
		case 'gufi_varie':
		  break;
		default:
		  exit(1);
		  break;
	}

	$ml = $_GET['ml'];
	$id = $_GET['id'];


	// Trovo il thread corrispondente a questo id
	$q = "SELECT `idthread` from `".$ml."`
			WHERE `id`=$id";
	$res = mysql_query($q) or die (err($q));
	$foo = mysql_fetch_array($res);
	$idthread = $foo['idthread'];

	// Subject del thread e numero di mail
	$q = "SELECT `subject`, count(*) from `".$ml."`
			WHERE `idthread`=$idthread
			GROUP BY `idthread`";
	$res = mysql_query($q) or die (err($q));
	$foo = mysql_fetch_row($res);
	$subject = $foo[0];
	$totalemails = $foo[1];

	// Piglio dal mysql il thread completo
	$q = "SELECT `ordinethread`,`idthread`,`from`,`subject`,`body`,
			`livellothread`,`id`,UNIX_TIMESTAMP(`date`) AS `date`,`idthread`
			FROM `".$ml."`
			WHERE `idthread`=$idthread
			ORDER BY `ordinethread`";
	$res = mysql_query($q) or die (err($q));

	// Salvo in un array le cose che mi servono per visualizzare il
	// thread. In piu' mi salvo tutte le cose utili per visualizzare
	// la mail in futuro
	$n = 0;
	while ($d = mysql_fetch_array($res)) {

		$dati[$n]['from'] = pulisci_from($d['from']);
		$dati[$n]['livello'] = $d['livellothread'];
		$dati[$n]['id'] = $d['id'];

		if ($n == 0) {
			$primo_from = $dati[0]['from'];
			$primo_data = htmlentities(date('d/m Y, h:i:s', $d['date']));
		}

		if ($d['id'] == $id) {
			$numero_mail_visualizzata = $n;
			$dati[$n]['subject'] = $d['subject'];
			$dati[$n]['date'] = $d['date'];
			$dati[$n]['idthread'] = $d['idthread'];
			// $dati[$n]['body'] = $d['body'];

			$wrap = (!isset($_GET['wrap']))? 1 : $_GET['wrap'];
			if ($wrap) {
				$wrap_testo = "Non wrappare le linee di questa mail a meno di 80 caratteri";
				$d['body'] = wordwrap($d['body']);
			} else {
				$wrap_testo = "Wrappa le linee di questa mail a meno di 80 caratteri";
			}

			// Rendiamo il body della mail un po' piu' bellino
			// a colpi di regexp
			$temp = explode("\n", nl2br(htmlentities(trim($d['body']))));
			for ($i=0; $i<count($temp); $i++) {
				$temp[$i] = str_replace("<br />","<br>", $temp[$i]);
				$temp[$i] = str_replace(" ", "&nbsp;", $temp[$i]);
				$temp[$i] = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]/",
                     "<a target=_blank class=maillink href=\"\\0\">\\0</a>", $temp[$i]);
				// $temp[$i] = str_replace(" ", "&nbsp;", $temp[$i]);
				$temp[$i] = eregi_replace("@[A-Z0-9._-]+\.[A-Z]{2,4}", "@...", $temp[$i]);

				$temp[$i] = ereg_replace("^\&gt;.*", "<span class=mailquoted>\\0</span>", $temp[$i]);
				$dati[$n]['body'] .= $temp[$i]."\n";
			} // for i=0

		} // if d[id]

		$n++;
	} // while


	// Scrivo il thread vero e proprio, con tanto di luci e suoni
	$s = "\n<div class=titolothread> &laquo; <span class=bianco>$totalemails</span> mail nel thread &raquo; </div>";

	for ($j=0; $j<$totalemails; $j++) {

		if ($dati[$j]['id'] == $id)
			$s .= "\n<div class=elementothreadsel><span class=albero>";
		else
			$s .= "\n<div class=elementothread><span class=albero>";


		if (ultimo_del_livello($dati, $dati[$j]['livello'], $j) == 1) {
			$stringa = "&nbsp;`-";
		} else
			$stringa = "&nbsp;|-";

		for ($i=0; $i<$dati[$j]['livello']; $i++)
			if (ultimo_del_livello($dati, $i, $j))
				$s .= "&nbsp;&nbsp;";
			else
				$s .= "&nbsp;|";

		if ($dati[$j]['id'] == $id) // e' la mail che sto visualizzando
			$s .= $stringa . "&times;</span>&nbsp;".$dati[$j]['from']."</div>";
		else // E' un elemento generico del thread
			$s .= $stringa . "&times;</span>&nbsp;<a class=albero
			 href=\"".$_SERVER['PHP_SELF']."?".query_cambia("id",$dati[$j]['id'])."\">".$dati[$j]['from']."</a></div>";

	} // for j

	// Ecco qua il thread completo.. pronto alla visualizzazione
	$thread_completo = $s;


	// Corpo della mail
	$mail_completa = "
		<table class=mail cellspacing=0>
			<tr><td class=mailheader>Data:</td><td class=mailheader>
				".htmlentities(date('d/m Y, h:i:s', $dati[$numero_mail_visualizzata]['date']))."
				</td></tr>
			<tr><td class=mailheader>Da:</td><td class=mailheader>
				".$dati[$numero_mail_visualizzata]['from']."
				</td></tr>
			<tr><td class=mailheader>Oggetto:</td><td class=mailheader>
				".htmlentities($dati[$numero_mail_visualizzata]['subject'])."
				</td></tr>
			<tr><td colspan=2 class=mailbody>".
				$dati[$numero_mail_visualizzata]['body']
				."</td></tr>
			<tr><td colspan=2 class=risultatititolo><a class=risultatinavlink href=\"".$_SERVER['PHP_SELF']."?"
				.query_cambia("wrap", ($wrap==1)? 0 : 1)."\">$wrap_testo</a>
			</td></tr>

		</table>
		";


	// Casellina della ricerca, se si stava cercando qualcosa
	if (strlen(trim($_GET['cerca']))) {

		if (isset($_GET['cercaml'])) {
			$cercaml = $_GET['cercaml'];
			// Sanity check
			switch($_GET['cercaml']) {
				case 'gufi_aiuto':
				case 'gufi_annunci':
				case 'gufi_esperti':
				case 'gufi_freesbie':
				case 'gufi_irc':
				case 'gufi_test':
				case 'gufi_traduzioni':
				case 'gufi_varie':
		  		  break;
				default:
		  		  exit(1);
		  		  break;
			}
		}
		else
			$cercaml = $ml;

		// DEBUG:
		// Si potrebbe ottimizzare controllanda se siamo alla pagina 0 o no..
		// Se si e' alla pagina 0 non serve la prima query.. ce la risparmiamo

		// Una prima query per sapere quanto e' il valore massimo del
		// rating.. Non se ne puo' fare a meno? E' lenta =((
		$query = "SELECT MATCH(`from`,`subject`,`body`) AGAINST ('".mysql_escape_string($_GET['cerca'])."') AS `rating`
					FROM `".mysql_escape_string($cercaml)."` WHERE
					MATCH(`from`,`subject`,`body`) AGAINST ('".mysql_escape_string($_GET['cerca'])."')
					AND `idthread` != ".$dati[$numero_mail_visualizzata]['idthread']."
					GROUP BY(`idthread`) ORDER BY `rating` desc LIMIT 1";
		$res = mysql_query($query);
		$temp = mysql_fetch_array($res);
		$rating_max = $temp['rating'];

		// Una seconda per prendere i dati veri e propri
		$query = "SELECT `id`,`from`,`subject`,UNIX_TIMESTAMP(`date`) as `date`,
					MATCH(`from`,`subject`,`body`) AGAINST ('".mysql_escape_string($_GET['cerca'])."') AS `rating`
					FROM `".mysql_escape_string($cercaml)."` WHERE
					MATCH(`from`,`subject`,`body`) AGAINST ('".mysql_escape_string($_GET['cerca'])."')
					AND `idthread` != ".$dati[$numero_mail_visualizzata]['idthread']."
					GROUP BY(`idthread`) ORDER BY `rating` desc
					LIMIT ".(isset($_GET['paginarisultati'])?$_GET['paginarisultati']*$recordsperpage:0)."
					,".($recordsperpage+1)."";
		$res = mysql_query($query);
		$tot = mysql_num_rows($res);

		//$ricerca_completa = "\n<div class=titolothread> Altri thread cercando &laquo;
		//	<span class=bianco>".$_GET['cerca']."</span> &raquo; </div>";

		$ricerca_completa = "
			<table class=risultati cellpadding=0 cellspacing=1>
				<tr><td colspan=2 class=risultatititolo> Thread cercando &laquo;
					<span class=bianco>".$_GET['cerca']."</span> &raquo;
				</td></tr>";

		// $ricerca_completa .= "<tr><td class=risultatititolo colspan=2>".$query."</td></tr>";

		for ($i=0; ($d = mysql_fetch_assoc($res)) && ($i < $recordsperpage); $i++) {
			$d['from'] = pulisci_from($d['from']);
			$d['rating'] = rating($d['rating'], $rating_max);

			$ricerca_completa .=
				"<tr>
					<td rowspan=2 width=1 class=\"risultato".($d['id']==$_GET['id']?2:$i%2)."\">
						".$d['rating']."
					</td>
					<td class=\"risultato".($d['id']==$_GET['id']?2:$i%2)."\">
						".$d['from']."
					</td>
				</tr>
				<tr>
					<td class=\"risultato".($d['id']==$_GET['id']?2:$i%2)."\">
						<a class=albero href=\"".$_SERVER['PHP_SELF']."?"
						.query_cambia("id",$d['id'],query_cambia("ml",$cercaml))."\">
						".htmlentities($d['subject'])."</a>
					</td>
				</tr>";

		} // for i

		$ricerca_completa .= "<tr><td colspan=2 class=risultatititolo align=center>";

		$pr = (isset($_GET['paginarisultati'])?1:0);

		// Se non sono alla prima pagina mettiamo il link alla pagina
		// precedente
		if ($pr>0 AND $_GET['paginarisultati']>0) {
			$ricerca_completa .= "<a class=risultatinavlink href=\"".$_SERVER['PHP_SELF']."?"
			.query_cambia("paginarisultati",$_GET['paginarisultati']-1)."\">&laquo;&laquo;</a> &middot; ";
		} // if

		$ricerca_completa .= " Pagina ".($_GET['paginarisultati']+1)." ";

		// Se ci sono ancora risultati oltre questi
		if ($tot > $recordsperpage) {
			$ricerca_completa .= " &middot; <a class=risultatinavlink href=\"".$_SERVER['PHP_SELF']."?"
			.query_cambia("paginarisultati",$_GET['paginarisultati']+1)."\">&raquo;&raquo;</a>";
		} // if

		$ricerca_completa .= "
				</td></tr>
				<tr><td colspan=2 class=risultatititolo><a class=risultatinavlink href=\"".$_SERVER['PHP_SELF']."?"
					.query_elimina("cerca cercaml paginarisultati")."\">Chiudi questi risultati</a>
				</td></tr>
			</table>";


	} // if isset _GET[ml] &&


	$controllo_completa = "
			<table class=risultati cellpadding=0 cellspacing=1>
				<tr><td class=risultatititolo> Nuova ricerca:";

	$ml_temp = "gufi_annunci gufi_aiuto gufi_esperti gufi_freesbie gufi_irc gufi_test gufi_traduzioni gufi_varie";
	$ml_temp_array = explode(" ",$ml_temp);

	$controllo_completa .= "
				</td></tr>
				<tr><td class=risultatititolo>
					<form method=\"GET\" action=\"".$_SERVER['PHP_SELF']."\">
						<input type=\"text\" name=\"cerca\" value=\"".$_GET['cerca']."\">
						<select name=\"cercaml\">
				";
	for ($i=0; $i<count($ml_temp_array); $i++)
		$controllo_completa .= "<option value=\"".$ml_temp_array[$i]."\"".
										($ml==$ml_temp_array[$i]?" selected":"").">".$ml_temp_array[$i]."</option>\n";
	$controllo_completa .= "
						</select>
						<input type=\"submit\" name=\"ricerca\" value=\"Cerca\">
						<input type=hidden name=ml value=\"".$ml."\">
						<input type=hidden name=id value=\"".$id."\">
						</form>
				</td></tr>
			</table>";

?>

<html>
<head>
<title><? echo "Archivio Mailing lists dei GUFI: $subject"; ?></title>
<link href="gufiml.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFFF" text="#000000">

<table cellspacing=1 align=center class=tabellona>
	<tr>
		<td colspan=2 class=evidenziato>
			<span class=titolo><? echo $subject; ?></span>
		</td>
	</tr>
	<tr>
		<td colspan=2 class=evidenziato>
			<span class=sottotitolo><? echo $primo_from." : ".$primo_data. "<br>".$ml; ?></span>
		</td>
	</tr>

	<tr><td>&nbsp;</td></tr>

	<tr>
		<td valign=top height=1>
		<? echo $thread_completo; ?><br>
		</td>
		<td valign=top rowspan=4>
		<? echo $mail_completa; ?>
		</td>
	</tr>
	<tr>
		<td valign=top height=1>
			<? echo $ricerca_completa; ?><br>
		</td>
	</tr>

	<tr>
		<td valign=top height=1>
			<? echo $controllo_completa; ?>
		</td>
	</tr>

	<!-- Spazio vuoto nella colonna di sinistra -->
	<tr><td>&nbsp;</td></tr>

	<!-- Spazio vuoto comune alle due colonne, finita la mail -->
	<tr><td colspan=2>&nbsp;</td></tr>
	<tr><td colspan=2 class=evidenziato align=center><a class=evidenziato href=index.php>&laquo;&laquo; Torna alla ricerca</a></td></tr>
	<tr><td colspan=2 class=evidenziato align=center>
<?
	$time_end = getmicrotime();
	$time = sprintf('%.3f', ($time_end - $time_start)*1000);
	echo 'Loaded in ' . $time . ' msec';

?>
	</td></tr>
</table>

</body></html>
