X-Git-Url: http://git.cyclocoop.org/?p=lhc%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fplugins%2Ffacteur%2Ffacteur_fonctions.php;fp=www%2Fplugins%2Ffacteur%2Ffacteur_fonctions.php;h=9c09ca43ecd27bb1da6a0ec532dc0e6d4b05c987;hp=3abf19a94181e3f963716f485fe78f23c774aa56;hb=3b34d0137e672387909494967123983d45db1ffd;hpb=e302f5262d689fd50b5d8ed424ab1cb71f837751 diff --git a/www/plugins/facteur/facteur_fonctions.php b/www/plugins/facteur/facteur_fonctions.php index 3abf19a9..9c09ca43 100755 --- a/www/plugins/facteur/facteur_fonctions.php +++ b/www/plugins/facteur/facteur_fonctions.php @@ -286,4 +286,102 @@ function facteur_nl2br_si_pas_autobr($texte){ return (_AUTOBR?$texte:nl2br($texte)); } +/** + * Transformer un mail HTML en mail Texte proprement : + * - les tableaux de mise en page sont utilisés pour structurer le mail texte + * - le reste du HTML est markdownifie car c'est un format texte lisible et conventionnel + * + * @param string $html + * @return string + */ +function facteur_mail_html2text($html){ + // nettoyer les balises de mise en page html + $html = preg_replace(",,Uims","
",$html); + $html = preg_replace(",,Uims","@@@hr@@@",$html); + $html = preg_replace(",]*>,Uims","\n\n",$html); + + // commentaires html et conditionnels + $html = preg_replace(",,Uims","\n",$html); + $html = preg_replace(",,Uims","\n",$html); + + $html = preg_replace(",<(/?)(div|tr|caption)([^>]*>),Uims","<\\1p>",$html); + $html = preg_replace(",(

\s*)+,ims","

",$html); + $html = preg_replace(",
\s*

,ims","

",$html); + $html = preg_replace(",

\s*
,ims","

",$html); + $html = preg_replace(",(

\s*(@@@hr@@@)?\s*)+,ims","

\\2",$html); + $html = preg_replace(",(

\s*

),ims","",$html); + + // succession @@@hr@@@
et
@@@hr@@@ + $html = preg_replace(",@@@hr@@@\s*(<[^>]*>\s*)?]*>,ims","@@@hr@@@\n",$html); + $html = preg_replace(",]*>\s*(<[^>]*>\s*)?@@@hr@@@,ims","\n@@@hr@@@",$html); + + $html = preg_replace(",]*spip_cadre[^>]*>(.*),Uims","\n\\1\n",$html); + + // vider le contenu de qqunes : + $html = preg_replace(",]*>.*,Uims","\n",$html); + + // Liens : + // Nettoyage des liens des notes de bas de page + $html = preg_replace("@([0-9]+)@", "\\3", $html); + // Supprimer tous les liens internes + $html = preg_replace("/\]*>(.*?)<\/a>/ims","\\2", $html); + // Remplace tous les liens + preg_match_all("/\]*>(.*?)<\/a>/ims", $html,$matches,PREG_SET_ORDER); + $prelinks = $postlinks = array(); + foreach ($matches as $k => $match){ + $link = "@@@link$k@@@"; + $url = str_replace("&","&",$match[1]); + if ($match[2]==$match[1] OR $match[2]==$url){ + // si le texte est l'url : + $prelinks[$match[0]] = "$link"; + } + else { + // texte + url + $prelinks[$match[0]] = $match[2] . " ($link)"; + } + $postlinks[$link] = $url; + } + $html = str_replace(array_keys($prelinks), array_values($prelinks),$html); + + // les images par leur alt ? + // au moins les puces + $html = preg_replace(',]*alt="-"[^>]*>,Uims','-',$html); + // les autres + $html = preg_replace(',]*alt=[\'"]([^\'"]*)[\'"][^>]*>,Uims',"\\1",$html); + // on vire celles sans alt + $html = preg_replace(",]*>,Uims","\n",$html); + + // espaces + $html = str_replace(" "," ",$html); + $html = preg_replace(",

\s+,ims","

",$html); + + #return $html; + include_spip("lib/markdownify/markdownify"); + $parser = new Markdownify('inline',false,false); + $texte = $parser->parseString($html); + + $texte = str_replace(array_keys($postlinks), array_values($postlinks),$texte); + + + // trim et sauts de ligne en trop ou pas assez + $texte = trim($texte); + $texte = str_replace("
\n","\n",$texte); + $texte = preg_replace(",(@@@hr@@@\s*)+\Z,ims","",$texte); + $texte = preg_replace(",(@@@hr@@@\s*\n)+,ims","\n\n\n".str_pad("-",75,"-")."\n\n\n",$texte); + $texte = preg_replace(",(\n#+\s),ims","\n\n\\1",$texte); + $texte = preg_replace(",(\n\s*)(\n\s*)+(\n)+,ims","\n\n\n",$texte); + + + //

et

restants + $texte = str_replace(array("

","

"),array("",""),$texte); + + // entites restantes ? (dans du code...) + include_spip('inc/charsets'); + $texte = unicode2charset($texte); + $texte = str_replace(array(''', '"'),array("'",'"'), $texte); + + + // Faire des lignes de 75 caracteres maximum + return trim(wordwrap($texte)); +} ?>