1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
| /**
* formateMsg
* Formate un message ou un commentaire à afficher sur le mur
* - Détecte les URL et les active
* - Raccourcit les liens affichés à 30 caractères
* - Réduit le texte affiché à ses 200 premiers caractères une fois les liens réduits
* @param string message : Le message à traiter
* @param string typemsg : LE type de message à traiter
* @return array : Le message formaté
*/
function formateMessage($message, $typemsg)
{
global $trad_read_more;
global $id_msg;
global $la_langue;
// Longueur maxi du texte à afficher pour le message
$limite = 200;
// Faut-il ajouter le lien 'Lire la suite' ?
$suite = FALSE;
// Les URL détectées commencent par 'www', 'http://' ou 'https://'
$pattern = '`(https?://|www)([a-zA-Z0-9\/.\-_+?&=#]+)`';
/* Nombre d'url trouvées dans le texte.
* Le sous-tableau $matches[0] contient les urls trouvées
* Le sous-tableau $matches[1] contient les racines d'url trouvées par rapport au pattern
*/
$nb_url = preg_match_all($pattern, $message, $matches);
if($nb_url > 0)
{
// Calcul du texte à afficher s'il contient des URL
$restetexte = $message;
$debuttexte = '';
$message_final = '';
foreach($matches[0] as $clef => $valeur)
{
// Pour chaque URL trouvée dans le message
// Si l'URL du texte commence par www, on ajoute http à l'adresse href
$adresse = ($matches[1][$clef] == 'www') ? 'http://' . $valeur : $valeur;
// Raccourcissement du lien
if($matches[1][$clef] == 'www')
{
// Si le lien commence par 'www', on supprime 'www.'
$lien = substr($valeur, 4);
}
elseif($matches[1][$clef] == 'https://')
{
if(substr($valeur, 8, 3) == 'www')
{
$lien = substr($valeur, 12); // on commence après "https://www."
}
else
{
$lien = substr($valeur, 8); // on commence après "https://"
}
}
elseif($matches[1][$clef] == 'http://')
{
if(substr($valeur, 7, 3) == 'www')
{
$lien = substr($valeur, 11); // on commence après "http://www."
}
else
{
$lien = substr($valeur, 7); // on commence après "http://"
}
}
// Raccourcissement du lien à ses 30 premiers caractères
$lien = substr($lien, 0, 30);
// Composition du message à afficher
$morceaux = array();
$morceaux = explode($valeur, $restetexte);
if(strlen($debuttexte.$morceaux[0]) > $limite
|| strlen($debuttexte.$morceaux[0].$lien) > $limite
)
{
// Si la longueur de l'ensemble
// (début du texte composé jusqu'ici
// + le texte précédent la prochaine URL)
// ou du même ensemble + la prochaine URL
// est trop long, on coupe à la limite sans la prochaine URL et on sort de la boucle
$textecompose = substr($debuttexte.$morceaux[0], 0, $limite);
$message_final = $debuttexte_avec_url.substr($morceaux[0], 0, ($limite - strlen($debuttexte)));
$suite = TRUE;
break;
}
else
{
// Sinon, on continue de composer le texte
$debuttexte .= $morceaux[0].$lien;
$restetexte = $morceaux[1];
$textecompose = $debuttexte.$restetexte;
$debuttexte_avec_url .= $morceaux[0].'<a href="'.$adresse.'" class="urldansmsg" target="_blank" >'.$lien.'</a>';
$message_final = $debuttexte_avec_url.$restetexte;
}
} // Fin foreach($matches[0] as $clef => $valeur)
} // Fin if($nb_url > 0)
else
{
// Texte à afficher s'il ne contient pas d'URL
$message_final = substr($message, 0, $limite);
if(strlen($message) > $limite)
{
$suite = TRUE;
}
} // Fin du else de if($nb_url > 0)
if($suite)
{
$message_final .= '... ';
$message_final .= '<a href="javascript:readMore('.$id_msg.", '$la_langue', '$typemsg')".'"';
$message_final .= 'class="souligneSurvol"';
$message_final .= '>';
$message_final .= $trad_read_more;
$message_final .= '</a>';
}
return $message_final;
} |
Partager