<?PHP
/****************************************************************************************
SMI (Services Maintenance Interventions) est une gestion libre de maintenance et de SAV

Version 0.9.6
Copyright (C) 2006  Sylvain FATOME

This program is free software; you can redistribute it and/or modify it under the terms
of the GNU General Public License as published by the Free Software Foundation; 
either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program
(in the directory docs); 
if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 
Boston, MA  02110-1301, USA.

Contact : galawa@free.fr
****************************************************************************************/


/**********************/
/* Gestion des textes */
/**********************/

// Tronque le texte sur 'x' caractères
function tronquetxt($texte,$longueur)
{
	$txt = substr($texte,0,$longueur-4);

	$txt .="...";
	
	return $txt;
}

// Remplace les retour des textarea par des sauts de lignes
function formatetxt($texte)
{
	$saut = chr(13).chr(10);
	$txt = ereg_replace($saut,"\n",$texte);
	
	return $txt;
}

// Remplace les retour des textarea par des sauts de lignes html
function formatetxtbr($texte)
{
	$saut = chr(13).chr(10);
	$txt = ereg_replace($saut,"<br>",$texte);
	
	return $txt;
}

// Césure le texte sur 'x' caractères de largeur
function cesuretxt($texte,$largeur)
{
	$txt = "";

	if (strlen($texte) <= $largeur) // Si <= largeur, pas besoin de tronquer
		$txt = $texte;
	else
	{
		$blocs = explode("<br>", $texte); // Séparation des blocs sur le saut de ligne
	
		foreach ($blocs as $num => $phrase)
		{
			if (strlen($phrase) <= $largeur) // Si <= largeur, pas besoin de tronquer
				$txt .= $phrase."<br>";
			else
			{
				$i = 1; // Nb de lignes
				$pointeur = 0; // Pointeur dans la ss-chaîne de caractères
				
				do
				{
					$sstxt = substr($phrase,$pointeur,$largeur-2);
					$pointeur = $i*($largeur-2); // Avance le pointeur
					// Si le pointeur n'est pas au bout et que la ss-chaine n'est pas terminée
					// par du blanc, on crée une césure (pour le blanc, simple retour à la ligne)
					if (($pointeur < (strlen($phrase)-1)) OR (strlen(rtrim($sstxt)) <> strlen($sstxt)))
					{
						if (strlen(rtrim($sstxt)) <> strlen($sstxt))
							$sstxt .="<br>";
						else
						{
							if ($pointeur < (strlen($phrase)-1))
								$sstxt .="-<br>";
						}
					}
					else
					{
						$sstxt .="<br>";
					}
					$txt .= $sstxt;
					$i++; // Nb de lignes +1
				}
				while ($pointeur<strlen($phrase)-1);
			}
		}
	}
	
	return $txt;
}

// Césure un texte en lignes d'un tableau
function cesuretxt_tab($texte,$largeur)
{
	$recup_lignes = explode(chr(13).chr(10),$texte); // On récupère les lignes du bloc texte
	
	if ((strlen($texte) <=$largeur) AND (count($recup_lignes)==1))
		$ligne_cesure[0] = $texte;
	else
	{
		$carac_speciaux = array(":","!","?",".",";",",","/","%");
	
		$index_ligne_cesure = 0;
		$ligne_cesure[0] = "";
		
		// Traitement des chaque ligne du bloc
		foreach ($recup_lignes as $index_ligne=>$ligne)
		{
			unset($recup_mots);
			$recup_mots = explode(" ",$ligne); // On récupère les mots de la ligne
	
			$j=0;
			unset($tab_mots);
			
			// Traitement de chaque mot de la ligne traitée
			foreach ($recup_mots as $index_mot=>$mot)
			{
				if (trim($mot) <> "") // On ne traite que les mots, pas les blancs (élimination des espaces multiples)
				{
					// Le mot fait un caractère de long, il faut faire quelques contrôles
					if (strlen($mot) == 1)
					{
						// On contrôle si c'est un caractère spécial.
						if (in_array($mot, $carac_speciaux))
						{
							if ($j <> 0) // Oui et ce n'est pas le 1er mot = on "colle" au mot précédent dans le tableau des mots de la ligne traitée
							{
								$tab_mots[$j-1] .= " ".htmlspecialchars($mot);
							}
						}
						else // Non, on ajoute le mot au tableau des mots de la ligne traitée
						{
							$tab_mots[$j] = htmlspecialchars($mot);
							$j++;
						}
					}
					else // Non, on ajoute le mot au tableau des mots de la ligne traitée
					{
						$tab_mots[$j] = htmlspecialchars($mot);
						$j++;
					}
				}	
			}
	
			// Traitement du tableau des mots récupéré sur la ligne en cours de traitement
			foreach ($tab_mots as $index_mot=>$mot)
			{
				$nouv_txt_ligne = trim($ligne_cesure[$index_ligne_cesure]." ".$mot);
				
				// On vérifie que l'on a pas dépassé la largeur maximale
				// Non, on peut ajouter le mot à la ligne de l'affichage césuré
				if (strlen($nouv_txt_ligne) <= $largeur)
				{
					$ligne_cesure[$index_ligne_cesure] = $nouv_txt_ligne;
				}
				else // Oui, on met un saut de ligne et on ajoute une ligne à l'affichage césuré
	
				{
					$index_ligne_cesure++;
					$ligne_cesure[$index_ligne_cesure] = $mot;
				}
			}
			// On a fini de traiter la ligne, on passe à la ligne suivante
			$index_ligne_cesure++;
		}
	}
	return $ligne_cesure;	
}

//Converti une chaîne en majuscules (avec suppression des accents)
function str_majuscules($texte)
{
	$accentue="ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ";
	$nonaccentue="AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn";

	$txt = strtr($texte,$accentue,$nonaccentue); 
	$txt = strtoupper($txt);

	return $txt;
}

// Vérifie présence d'une chaîne dans une séquence de caractères séparés par des '-'
function exist_chaine_in_seq($chaine,$sequence)
{
	$chn_rech = $chaine;
	$exist = FALSE;
	
	if (($sequence <> "") AND ($chaine <> ""))
	{
		$tab_seq = explode("-",$sequence);
	
		foreach($tab_seq as $chn_seq)
		{
			if ($chn_rech == $chn_seq)
				$exist = TRUE;
		}
	}
	return $exist;
}

// Vérifie si un département fait partie d'une zone de chalandise (chaîne caractères + '-')
function dep_in_zc($dep,$zone)
{
	$est_ok = exist_chaine_in_seq($dep,$zone);

	return $est_ok;
}

// Vérifie si un texte existe dans un tableau de textes
function exist_txt_in_tabtxt($texte,$tabtxt)
{
	$txt_rech = $texte;
	$txt_tab = $tabtxt;
	$exist = FALSE;

	foreach ($txt_tab as $txt_found)
	{
		if ($txt_rech == $txt_found)
			$exist =TRUE;
	}

	return $exist;
}

// Vérifie si au moins 2 textes sont identiques à l'intérieur de 2 tableaux de textes
function txt_commun_in_2tabtxt($tabtxt1,$tabtxt2)
{
	$txt_tab1 = $tabtxt1;
	$txt_tab2 = $tabtxt2;
	$exist = FALSE;

	foreach ($txt_tab1 as $txt_found)
	{
		if (exist_txt_in_tabtxt($txtfound,$txt_tab2) == TRUE)
			$exist = TRUE;
	}

	return $exist;
}

// Retourne un tableau contenant les textes différents entre 2 tableaux de textes
function diff_txt_in_tabtxt($tabtxt1,$tabtxt2)
{
	$txt_tab1 = $tabtxt1;
	$txt_tab2 = $tabtxt2;

	$i = 0;

	if (is_array($txt_tab1) == TRUE)
	{
		foreach ($txt_tab1 as $txt_found1)
		{
			$exist = FALSE;
			foreach ($txt_tab2 as $txt_found2)
			{
				if ($txt_found1 == $txt_found2)
					$exist =TRUE;
					
				if ($exist == FALSE)
				{
					$tab_diff[$i] = $txt_found2;
					$i++;
				}
			}
		}
	}

	return $tab_diff;
}

// Convertion d'une chaine pour être correctement stockée sur le serveur
function str_upload($texte)
{
	$nom_upload = str_majuscules($texte);
	$nom_upload = strtolower($nom_upload);
	$nom_upload = strtr($nom_upload," ","_");
	
	return $nom_upload;
}

?>