WP File Manager
Current Path:
/
home
/
argothem
/
www
/
organecyberpresse
/
plugins
/
auto
/
newsletters
/
v3.0.1
/
inc
/
Name
Action
..
newsletters.php
Edit
when.php
Edit
Editing: newsletters.php
<?php /** * Plugin Newsletters * (c) 2012 Cedric Morin * Licence GNU/GPL */ if (!defined('_ECRIRE_INC_VERSION')) return; /** * Extraire les infos de ce fond * Les parametres sont passes dans le squelette de newsletter sous la forme : * par <!-- param=valeur --> * * Parametres utilises : titre * * @param $fond * @return array */ function newsletters_fond_extraire_infos($fond){ $infos = array(); if ($f = trouver_fond($fond,"newsletters")){ lire_fichier($f,$contenu); preg_match_all('/(<!-- ([a-z0-9_]\w+)(\*)?=)(.*?)-->/sim',$contenu,$matches,PREG_SET_ORDER); if ($matches){ foreach ($matches as $m){ newsletters_fond_post_params($infos,$m); } } } return $infos; } /** * callback pour interpreter les parametres objets d'une newsletter * (tire du plugin cfg) * * Parametres : * - $regs[2] = 'parametre' * - $regs[3] = '*' ou '' * - $regs[4] = 'valeur' * * Lorsque des parametres sont passes dans le formulaire * par <!-- param=valeur --><br> * stocker $this->param['parametre']=valeur * * Si <!-- param*=valeur --><br> * Stocker $this->param['parametre'][]=valeur * * @param array $param * @param array $regs */ function newsletters_fond_post_params(&$param,$regs) { // $regs[3] peut valoir '*' pour signaler un tableau $regs[4] = trim($regs[4]); if (empty($regs[3])) { $param[$regs[2]] = $regs[4]; } elseif (is_array($param[$regs[2]])) { $param[$regs[2]][] = $regs[4]; } } /** * generer une version texte a partir d'une version HTML * * @param string $html * @return string */ function newsletters_html2text($html){ // nettoyer les balises de mise en page html $html = preg_replace(",</(td|th)>,Uims","<br/>",$html); $html = preg_replace(",</(table)>,Uims","@@@hr@@@",$html); $html = preg_replace(",</?(!doctype|html|body|table|td|th|tbody|thead|center|article|section|span)[^>]*>,Uims","\n\n",$html); $html = preg_replace(",<!--.*-->,Uims","\n",$html); $html = preg_replace(",<(/?)(div|tr|caption)([^>]*>),Uims","<\\1p>",$html); $html = preg_replace(",(<p>\s*)+,ims","<p>",$html); $html = preg_replace(",<br/?>\s*</p>,ims","</p>",$html); $html = preg_replace(",</p>\s*<br/?>,ims","</p>",$html); $html = preg_replace(",(</p>\s*(@@@hr@@@)?\s*)+,ims","</p>\\2",$html); $html = preg_replace(",(<p>\s*</p>),ims","",$html); // succession @@@hr@@@<hr> et <hr>@@@hr@@@ $html = preg_replace(",@@@hr@@@\s*(<[^>]*>\s*)?<hr[^>]*>,ims","@@@hr@@@\n",$html); $html = preg_replace(",<hr[^>]*>\s*(<[^>]*>\s*)?@@@hr@@@,ims","\n@@@hr@@@",$html); $html = preg_replace(",<textarea[^>]*spip_cadre[^>]*>(.*)</textarea>,Uims","<code>\n\\1\n</code>",$html); // vider le contenu de qqunes : $html = preg_replace(",<head[^>]*>.*</head>,Uims","\n",$html); // Liens : // Nettoyage des liens des notes de bas de page $html = preg_replace("@<a href=\"#n(b|h)[0-9]+-[0-9]+\" name=\"n(b|h)[0-9]+-[0-9]+\" class=\"spip_note\">([0-9]+)</a>@", "\\3", $html); // Supprimer tous les liens internes $html = preg_replace("/\<a href=['\"]#(.*?)['\"][^>]*>(.*?)<\/a>/ims","\\2", $html); // Remplace tous les liens preg_match_all("/\<a href=['\"](.*?)['\"][^>]*>(.*?)<\/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(',<img\s[^>]*alt="-"[^>]*>,Uims','-',$html); // les autres $html = preg_replace(',<img\s[^>]*alt=[\'"]([^\'"]*)[\'"][^>]*>,Uims',"\\1",$html); // on vire celles sans alt $html = preg_replace(",</?(img)[^>]*>,Uims","\n",$html); // espaces $html = str_replace(" "," ",$html); $html = preg_replace(",<p>\s+,ims","<p>",$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("<br />\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); // 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)); } /** * Transformer date+rule en string ics * * @param string $date * @param string $rule * @return string */ function newsletter_date_rule_to_ics($date,$rule){ $ics = "BEGIN:VCALENDAR\nVERSION:2.0\nBEGIN:VEVENT\n"; $ics .= "DTSTART:".gmdate("Ymd\THis\Z",strtotime($date))."\n"; $ics .= "RRULE:".$rule; $ics .= "\nEND:VEVENT\nEND:VCALENDAR\n"; return $ics; } /** * Transformer la string ics en date+rule * @param string $ics * @return array */ function newsletter_ics_to_date_rule($ics){ $date = null; $rule = ""; $ics = explode("\n",$ics); foreach($ics as $ic){ if (strncmp($ic,"DTSTART:",8)==0){ $date = date('Y-m-d H:i:s',strtotime(substr($ic,8))); } if (strncmp($ic,"RRULE:",6)==0){ $rule = substr($ic,6); } } return array($date,$rule); }