<?php
###################################
# bibliotheque pour l'envoie de mails
###################################

# compose le mail au format du mailer ViralGames dans un fichier
# et le place dans un répertoire
$MAX_UNIQID_TRY = 10;


//Parcours les spooler et retourne le moins utilisé pour mieux répartir les mails
function getBestSpooler()
{
	global $SPOOLERS;
	
	$MinOccupation = -1;
	$SelectedSpool = "";
	
	foreach($SPOOLERS AS $spool => $sent)
	{
		$occupation = nbFilesInDir($spool);
		if($occupation < $MinOccupation || $MinOccupation == -1)
		{
			$MinOccupation = $occupation;
			$SelectedSpool = $spool;
		}		
	}	
	return $SelectedSpool;
}



# lit le contenu d'un repertoire
# le met dans un tableau en retour
function getDirArray($sPath) 
{ 
	//Load Directory Into Array 
	$handle=opendir($sPath); 
	while ($file = readdir($handle))
		# on ne veut pas de . et ..
		# on ne prend que les files (par les répertoires par exemple)
		if ($file!="." and $file!=".." and is_file(chop($sPath.$file)))
			$retVal[count($retVal)] = $file;

	closedir($handle); 
	return $retVal; 
}

function nbFilesInDir($sPath)
{
	$handle=opendir($sPath); 
	$r=0;
	while ($file = readdir($handle))
		if (!($file == "." or $file == ".." or is_dir($file)))
			$r++;
	closedir($handle);
	return $r;
}

function generateFileName($aDir)
{
	global $MAX_UNIQID_TRY,$ROOT_EMAIL;
	
	# on génère un nom de fichier de la facon suivante :
	# la premiere problèmatique est d'avoir un nom unique pour cela on utilise uniqid
	$fileName = uniqid("");
	
	# il faut ensuite verifier qu'il n'est pas déjà utilisé
	# on se permet 10 essais après c'est qu'il y a vraiment un pb
	$nameFound=false;
	for($r=0;$r<$MAX_UNIQID_TRY;$r++)
	{
		if (file_exists($aDir.$fileName))
			$fileName = uniqid("");
		else
		{
			$nameFound=true;
			break;
		}
	}
	
	if ($nameFound){
		touch($aDir.$fileName);
	}else
	{
		# pb il faut prevenir quelqu'un !!!
		# le mail ne partira pas !
		mail($ROOT_EMAIL,"Pb generation d'un uniqid","Pb generation d'un uniqid");
	}
	
	return $fileName;
}

# la fonction de mail créer un fichier à partir du message à envoyer
function viral_mail($aDir,$email,$subject,$message,$header,$message_text="",$attachement_content="",$attachement_name="")
{
	global $ROOT_DIR;
	
	//on regarde si c'est un spool l'ancienne ou un spool VIRALGAMES_MailSystem
	//S'il est à l'ancienne "/var/www/htdocs/exploitation/MailSystem/ on le passe sur les nouveaux spools
	if(!preg_match( "/VIRALGAMES_MailSystem/" ,$aDir) )
	{		
		//on patch sur les anciens spool qui etaient dans /var/www/exploitation/ à la racine du serveur web
		$tabPool = explode("/",$aDir);	
		
		//on remplace par l'exploitation de VIRALGAMES_MailSystem
		$aDir = $ROOT_DIR."VIRALGAMES_MailSystem/Adm/exploitation/".$tabPool[count($tabPool)-2]."/";
	}
	// debug("Spool : ".$aDir);
	
	# génération d'un nom de fichier + réservation du nom
	$fileName = generateFileName($aDir);
	
	# on compose le fichier
	$fd = fopen($aDir.$fileName,"w");
	
	# les emails destinataires
	fwrite($fd,"__MAILS_ADRESSES__\n".$email."\n__MAILS_ADRESSES__\n");

	# header
	fwrite($fd,"__HEADER__\n".$header."\n__HEADER__\n");

	# subject
	fwrite($fd,"__SUBJECT__\n".$subject."\n__SUBJECT__\n");

	# message
	fwrite($fd,"__MESSAGE__\n".$message."\n__MESSAGE__\n");
	
	# message alternatif en texte brut
	fwrite($fd,"__MESSAGE_TEXT__\n".$message_text."\n__MESSAGE_TEXT__\n");
	
	# piece jointe encodé 64bit
	fwrite($fd,"__ATTACHMENT__\n".$attachement_content."\n__ATTACHMENT__\n");
	fwrite($fd,"__ATTACHMENT_NAME__\n".$attachement_name."\n__ATTACHMENT_NAME__\n");
	
	fclose($fd);
}
?>