X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fplugins%2Ffacteur%2Ffacteur_fonctions.php;fp=www%2Fplugins%2Ffacteur%2Ffacteur_fonctions.php;h=9c09ca43ecd27bb1da6a0ec532dc0e6d4b05c987;hb=3b34d0137e672387909494967123983d45db1ffd;hp=3abf19a94181e3f963716f485fe78f23c774aa56;hpb=e302f5262d689fd50b5d8ed424ab1cb71f837751;p=lhc%2Fweb%2Fwww.git
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(",(td|th)>,Uims","
",$html);
+ $html = preg_replace(",(table)>,Uims","@@@hr@@@",$html);
+ $html = preg_replace(",?(html|body|table|td|th|tbody|thead|center|article|section|span)[^>]*>,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*
\s*
),ims","",$html); + + // succession @@@hr@@@\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(",?(img)[^>]*>,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)); +} ?>