function pdf_first_clean($texte){ // Cette focntion est appelé après la fonction propre // $texte = ereg_replace("<p class[^>]*>", "<P>", $texte); //Translation des codes iso // PB avec l'utilisation de <code> $trans = get_html_translation_table(HTML_ENTITIES); $texte = preg_replace(',<!-- .* -->,msU', '', $texte); // supprimer les remarques HTML (du Couteau Suisse ?) $trans = array_flip($trans); $trans["<br />\n"] = "<BR>"; // Pour éviter que le \n ne se tranforme en espace dans les <DIV class=spip_code> (TT, tag SPIP : code) $trans['°'] = "°"; $trans["œ"] = "oe"; $trans["‎"] = ""; $trans["–"] = "-"; $trans["‘"] = "'"; $trans["’"] = "'"; $trans["“"] = "\""; $trans["”"] = "\""; $trans["…"] = "..."; $trans["€"] = "Euros"; $trans["û"] = "û"; $trans['->'] = '-»'; $trans['<-'] = '«-'; $trans[' '] = ' '; // certains titles font paniquer l'analyse $texte = preg_replace(',title=".*",msU', 'title=""', $texte); $texte = unicode2charset(charset2unicode($texte), 'iso-8859-1'); // repasser tout dans un charset acceptable par export PDF $texte = strtr($texte, $trans); return $texte; }
function plugins_afficher_liste_dist($url_page,$liste_plugins, $liste_plugins_actifs, $dir_plugins=_DIR_PLUGINS,$afficher_un = 'afficher_plugin'){ $get_infos = charger_fonction('get_infos','plugins'); $ligne_plug = charger_fonction($afficher_un,'plugins'); $liste_plugins = array_flip($liste_plugins); foreach(array_keys($liste_plugins) as $chemin) { if ($info = $get_infos($chemin, false, $dir_plugins)) $liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($info['nom'])))))); } asort($liste_plugins); $exposed = urldecode(_request('plugin')); $block_par_lettre = false;//count($liste_plugins)>10; $fast_liste_plugins_actifs = array_flip($liste_plugins_actifs); $res = ''; $block = ''; $initiale = ''; $block_actif = false; foreach($liste_plugins as $plug => $nom){ if (($i=substr($nom,0,1))!==$initiale){ $res .= $block_par_lettre ? affiche_block_initiale($initiale,$block,$block_actif): $block; $initiale = $i; $block = ''; $block_actif = false; } // le rep suivant $actif = @isset($fast_liste_plugins_actifs[$plug]); $block_actif = $block_actif | $actif; $expose = ($exposed AND ($exposed==$plug OR $exposed==$dir_plugins . $plug OR $exposed==substr($dir_plugins,strlen(_DIR_RACINE)) . $plug)); $block .= $ligne_plug($url_page, $plug, $actif, $expose, "item", $dir_plugins)."\n"; } $res .= $block_par_lettre ? affiche_block_initiale($initiale,$block,$block_actif): $block; $class = basename($dir_plugins); return $res ? "<ul class='liste-items plugins $class'>$res</ul>" : ""; }
/** * Exporter une ligne complete au format CSV, avec delimiteur fourni * @param array $ligne * @param string $delim * @return string */ function exporter_csv_ligne($ligne, $delim = ',', $importer_charset = null) { $output = join($delim, array_map('exporter_csv_champ', $ligne))."\r\n"; if ($importer_charset){ $output = unicode2charset(html2unicode(charset2unicode($output)), $importer_charset); } return $output; }
function typographie_fr_dist($letexte) { static $trans; // Nettoyer 160 = nbsp ; 187 = raquo ; 171 = laquo ; 176 = deg ; // 147 = ldquo; 148 = rdquo; ' = zouli apostrophe if (!$trans) { $trans = array("'" => "’", " " => "~", "»" => "»", "«" => "«", "”" => "”", "“" => "“", "°" => "°"); $chars = array(160 => '~', 187 => '»', 171 => '«', 148 => '”', 147 => '“', 176 => '°'); $chars_trans = array_keys($chars); $chars = array_values($chars); $chars_trans = implode(' ', array_map('chr', $chars_trans)); $chars_trans = unicode2charset(charset2unicode($chars_trans, 'iso-8859-1', 'forcer')); $chars_trans = explode(" ", $chars_trans); foreach ($chars as $k => $r) { $trans[$chars_trans[$k]] = $r; } } $letexte = strtr($letexte, $trans); $cherche1 = array('/((?:^|[^\\#0-9a-zA-Z\\&])[\\#0-9a-zA-Z]*)\\;/S', '/»| --?,|(?::| %)(?:\\W|$)/S', '/([^[<(!?.])([!?][!?\\.]*)/iS', '/«|(?:M(?:M?\\.|mes?|r\\.?)|[MnN]°) /S'); $remplace1 = array('\\1~;', '~\\0', '\\1~\\2', '\\0~'); $letexte = preg_replace($cherche1, $remplace1, $letexte); $letexte = preg_replace("/ *~+ */S", "~", $letexte); $cherche2 = array('/([^-\\n]|^)--([^-]|$)/S', ',(http|https|ftp|mailto)~((://[^"\'\\s\\[\\]\\}\\)<>]+)~([?]))?,S', '/~/'); $remplace2 = array('\\1—\\2', '\\1\\3\\4', ' '); $letexte = preg_replace($cherche2, $remplace2, $letexte); return $letexte; }
function typo_exposants_fr($texte){ static $typo = NULL; static $egrave; static $eaigu1; static $eaigu2; static $accents; if (is_null($typo)) { // en principe, pas besoin de : caractere_utf_8(232) $egrave = unicode2charset('è').'|è|è'; $eaigu1 = unicode2charset('é').'|é|é'; $eaigu2 = unicode2charset('É').'|É|É'; $accents = unicode2charset('àáâäåæèéêëìíîïòóôöùúûü'); $typo = array( array( '/(?<=\bM)e?(lles?)\b/', // Mlle(s), Mme(s) et erreurs Melle(s) '/(?<=\bM)(gr|mes?)\b/', // Mme(s) et Mgr '/(?<=\b[DP])(r)(?=[\s\.-])/', // Dr, Pr suivis d'un espace d'un point ou d'un tiret '/\bm²\b/', '/(?<=\bm)([23])\b/', // m2, m3, m² '/(?<=\b[Mm])([nd]s?)\b/', // millions, milliards '/(?<=\bV)(ve)\b/', '/(?<=\bC)(ies?)\b/', // Vve et Cie(s) "/(?<=\bS)(t(?:$eaigu1)s?)(?=\W)/", "/(?<=\W)(?:E|$eaigu2)ts\b/", // Societes(s), Etablissements '/(?<=\b[1I])i?(ers?)\b/', // 1er(s), Erreurs 1ier(s), 1ier(s) "/(?<=\b[1I])i?(?:e|$egrave)(res?)\b/", // Erreurs 1(i)ere(s) + accents '/(?<=\b1)(r?es?)\b/', // 1e(s), 1re(s) '/(?<=\b2)(nde?s?)\b/', // 2nd(e)(s) "/(\b[0-9IVX]+)i?(?:e|$egrave)?me(s?)\b/", // Erreurs (i)(e)me(s) + accents '/\b([0-9IVX]+)(es?)\b/', // 2e(s), IIIe(s)... (les 1(e?r?s?) ont deja ete remplaces) "/(?<![;$accents])\b(\d+|r|v)o(?=(?: |[\s,;:!\/\?\.-]))/", // recto, verso, primo, secondo, etc. '/(?<=\bM)(e)(?= [A-Z])/', // Maitre (suivi d'un espace et d'une majuscule) ), array( _TYPO_sup, _TYPO_sup, // Mlle(s), Mme(s), Mgr _TYPO_sup, // Dr, Pr, 'm<sup class="typo_exposants">2</sup>', _TYPO_sup, // m2, m3, m² _TYPO_sup, _TYPO_sup, _TYPO_sup, // Vve, Mn(s), Md(s), Bd(s), Cie(s) _TYPO_sup, 'É<sup class="typo_exposants">ts</sup>', // Sté(s), Ets _TYPO_sup, _TYPO_sup, _TYPO_sup, // 1er et Cie _TYPO_sup, // 2nd(e)(s) '$1<sup class="typo_exposants">e$2</sup>', // Erreurs me, eme, ème, ième + pluriels _TYPO_sup2, // 2e(s), IIIe(s)... '$1<sup class="typo_exposants">o</sup>', // ro, vo, 1o, 2o, etc. _TYPO_sup, // Me )); if(defined('_CS_EXPO_BOFBOF')) { $typo[0] = array_merge($typo[0], array( '/(?<=\bS)(te?s?)(?=[\s\.-])/', // St(e)(s) suivis d'un espace d'un point ou d'un tiret '/(?<=\bB)(x|se|ses)(?=[\s\.-])/', // Bx, Bse(s) suivis d'un espace d'un point ou d'un tiret '/(?<=\b[Bb])(ds?)\b/', '/(?<=\b[Ff])(gs?)\b/', // boulevard(s) et faubourgs(s) )); $typo[1] = array_merge($typo[1], array( _TYPO_sup, _TYPO_sup, // St(e)(s), Bx, Bse(s) _TYPO_sup, _TYPO_sup, // Bd(s) et Fg(s) )); } } return preg_replace($typo[0], $typo[1], $texte); }
function glossaire_accents_callback($matches) { $u = unicode2charset($matches[0]); // charset $u2 = init_mb_string()?mb_strtoupper($u):strtoupper($u); // charset majuscule $u3 = htmlentities($u2, ENT_QUOTES, $GLOBALS['meta']['charset']); // html majuscule $u4 = html2unicode($u3); // unicode majuscule $a = array_unique(array($u, $u2, htmlentities($u, ENT_QUOTES, $GLOBALS['meta']['charset']), $u3, $matches[0], $u4)); // $a = array_unique(array($u, htmlentities($u, ENT_QUOTES, $GLOBALS['meta']['charset']), $matches[0])); return '(?:'.join('|', $a).')'; }
function mediabox_insert_head_css($flux) { $config = mediabox_config(); if ($config['active'] == 'oui' and $f = find_in_path((test_espace_prive() ? "prive/" : "") . "colorbox/" . $config['skin'] . '/colorbox.css')) { $flux .= '<link rel="stylesheet" href="' . direction_css($f) . '" type="text/css" media="all" />'; /** * Initialiser la config de la mediabox */ $flux = '<script type="text/javascript">/* <![CDATA[ */ var box_settings = {tt_img:' . ($config['traiter_toutes_images'] == 'oui' ? 'true' : 'false') . ',sel_g:"' . $config['selecteur_galerie'] . '",sel_c:"' . $config['selecteur_commun'] . '",trans:"' . $config['transition'] . '",speed:"' . $config['speed'] . '",ssSpeed:"' . $config['slideshow_speed'] . '",maxW:"' . $config['maxWidth'] . '",maxH:"' . $config['maxHeight'] . '",minW:"' . $config['minWidth'] . '",minH:"' . $config['minHeight'] . '",opa:"' . $config['opacite'] . '",str_ssStart:"' . unicode2charset(html2unicode(_T('mediabox:boxstr_slideshowStart'))) . '",str_ssStop:"' . unicode2charset(html2unicode(_T('mediabox:boxstr_slideshowStop'))) . '",str_cur:"' . _T('mediabox:boxstr_current', array('current' => '{current}', 'total' => '{total}')) . '",str_prev:"' . _T('mediabox:boxstr_previous') . '",str_next:"' . _T('mediabox:boxstr_next') . '",str_close:"' . _T('mediabox:boxstr_close') . '",splash_url:"' . $config['splash_url'] . '"}; /* ]]> */</script>' . "\n" . $flux; } return $flux; }
/** * Afficher une liste de plugins dans l'interface * http://doc.spip.org/@affiche_liste_plugins * * @param string $url_page * @param array $liste_plugins * @param array $liste_plugins_checked * @param array $liste_plugins_actifs * @param string $dir_plugins * @param string $afficher_un * @return string */ function plugins_afficher_liste_dist($url_page, $liste_plugins, $liste_plugins_checked, $liste_plugins_actifs, $dir_plugins = _DIR_PLUGINS, $afficher_un = 'afficher_plugin') { $get_infos = charger_fonction('get_infos', 'plugins'); $ligne_plug = charger_fonction($afficher_un, 'plugins'); $all_infos = $get_infos($liste_plugins, false, $dir_plugins); $all_infos = pipeline('filtrer_liste_plugins', array('args' => array('liste_plugins' => $liste_plugins, 'liste_plugins_checked' => $liste_plugins_checked, 'liste_plugins_actifs' => $liste_plugins_actifs, 'dir_plugins' => $dir_plugins), 'data' => $all_infos)); $liste_plugins = array_flip($liste_plugins); foreach ($liste_plugins as $chemin => $v) { // des plugins ont pu etre enleves de la liste par le pipeline. On en tient compte. if (isset($all_infos[$chemin])) { $liste_plugins[$chemin] = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($all_infos[$chemin]['nom'])))))); } else { unset($liste_plugins[$chemin]); } } asort($liste_plugins); $exposed = urldecode(_request('plugin')); $block_par_lettre = false; //count($liste_plugins)>10; $fast_liste_plugins_actifs = array(); $fast_liste_plugins_checked = array(); if (is_array($liste_plugins_actifs)) { $fast_liste_plugins_actifs = array_flip($liste_plugins_actifs); } if (is_array($liste_plugins_checked)) { $fast_liste_plugins_checked = array_flip($liste_plugins_checked); } $res = ''; $block = ''; $initiale = ''; $block_actif = false; foreach ($liste_plugins as $plug => $nom) { if (($i = substr($nom, 0, 1)) !== $initiale) { $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block; $initiale = $i; $block = ''; $block_actif = false; } // le rep suivant $actif = isset($fast_liste_plugins_actifs[$plug]); $checked = isset($fast_liste_plugins_checked[$plug]); $block_actif = $block_actif | $actif; $expose = ($exposed and ($exposed == $plug or $exposed == $dir_plugins . $plug or $exposed == substr($dir_plugins, strlen(_DIR_RACINE)) . $plug)); $block .= $ligne_plug($url_page, $plug, $checked, $actif, $expose, "item", $dir_plugins) . "\n"; } $res .= $block_par_lettre ? affiche_block_initiale($initiale, $block, $block_actif) : $block; $class = basename($dir_plugins); return $res ? "<ul class='liste-items plugins {$class}'>{$res}</ul>" : ""; }
function onelettrebis($chaine) { $chaine=sansle($chaine); $chaine=filtrer_entites($chaine); // si il y a des fois des accents en dur qui trainent $chaine = unicode2charset(utf_8_to_unicode($chaine), 'iso-8859-1'); // on code en html ISO $a = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"; $b = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"; $chaine=strtr($chaine, $a, $b); // on retire les accents $chaine=strtoupper($chaine); // on passe en majuscules /// si débute par le fameux Œ ou œ $pattern = "^(Œ|œ)"; if (eregi($pattern,$chaine,$regs)) $chaine='O';//$chaine= $regs[0]; //on va renvoyer la lettre O else $chaine = $chaine{0}; return $chaine ; }
function mediabox_insert_head_css($flux) { $config = mediabox_config(); if ($config['active'] == 'oui' and $f = find_in_path((test_espace_prive() ? "prive/" : "") . "colorbox/" . $config['skin'] . '/colorbox.css')) { $flux .= '<link rel="stylesheet" href="' . direction_css($f) . '" type="text/css" media="all" />'; /** * Initialiser la config de la mediabox */ $configmediabox = '<script type="text/javascript">/* <![CDATA[ */ var box_settings = {tt_img:' . ($config['traiter_toutes_images'] == 'oui' ? 'true' : 'false') . ',sel_g:"' . $config['selecteur_galerie'] . '",sel_c:"' . $config['selecteur_commun'] . '",trans:"' . $config['transition'] . '",speed:"' . $config['speed'] . '",ssSpeed:"' . $config['slideshow_speed'] . '",maxW:"' . $config['maxWidth'] . '",maxH:"' . $config['maxHeight'] . '",minW:"' . $config['minWidth'] . '",minH:"' . $config['minHeight'] . '",opa:"' . $config['opacite'] . '",str_ssStart:"' . unicode2charset(html2unicode(_T('mediabox:boxstr_slideshowStart'))) . '",str_ssStop:"' . unicode2charset(html2unicode(_T('mediabox:boxstr_slideshowStop'))) . '",str_cur:"' . _T('mediabox:boxstr_current', array('current' => '{current}', 'total' => '{total}')) . '",str_prev:"' . _T('mediabox:boxstr_previous') . '",str_next:"' . _T('mediabox:boxstr_next') . '",str_close:"' . _T('mediabox:boxstr_close') . '",splash_url:"' . $config['splash_url'] . '"};' . "\n"; // Si c'est une image, on la chargera avec une redimentionnement automatique // Sinon, chargement dans une iframe $extension = pathinfo($config['splash_url'], PATHINFO_EXTENSION); if (match($extension, 'gif|png|jpg|jpeg')) { $configmediabox .= 'var box_settings_iframe = false;' . "\n"; } else { $configmediabox .= 'var box_settings_splash_width = "' . $config['splash_width'] . '"; var box_settings_splash_height = "' . $config['splash_height'] . '";' . "\n"; $configmediabox .= 'var box_settings_iframe = true;' . "\n"; } $flux = $configmediabox . '/* ]]> */</script>' . "\n" . $flux; } return $flux; }
/** * Afficher de facon textuelle les dates de debut et fin en fonction des cas * - Le lundi 20 fevrier a 18h * - Le 20 fevrier de 18h a 20h * - Du 20 au 23 fevrier * - du 20 fevrier au 30 mars * - du 20 fevrier 2007 au 30 mars 2008 * $horaire='oui' permet d'afficher l'horaire, toute autre valeur n'indique que le jour * $forme peut contenir abbr (afficher le nom des jours en abbrege) et ou hcal (generer une date au format hcal) * * @param string $date_debut * @param string $date_fin * @param string $horaire * @param string $forme * @return string */ function agenda_affdate_debut_fin($date_debut, $date_fin, $horaire = 'oui', $forme = '') { $abbr = ''; if (strpos($forme, 'abbr') !== false) { $abbr = 'abbr'; } $affdate = "affdate_jourcourt"; if (strpos($forme, 'annee') !== false) { $affdate = 'affdate'; } $dtstart = $dtend = $dtabbr = ""; if (strpos($forme, 'hcal') !== false) { $dtstart = "<abbr class='dtstart' title='" . date_iso($date_debut) . "'>"; $dtend = "<abbr class='dtend' title='" . date_iso($date_fin) . "'>"; $dtabbr = "</abbr>"; } $date_debut = strtotime($date_debut); $date_fin = strtotime($date_fin); $d = date("Y-m-d", $date_debut); $f = date("Y-m-d", $date_fin); $h = $horaire == 'oui'; $hd = date("H:i", $date_debut); $hf = date("H:i", $date_fin); $au = " " . strtolower(_T('agenda:evenement_date_au')); $du = _T('agenda:evenement_date_du') . " "; $s = ""; if ($d == $f) { // meme jour $s = ucfirst(nom_jour($d, $abbr)) . " " . $affdate($d); if ($h) { $s .= " {$hd}"; } $s = "{$dtstart}{$s}{$dtabbr}"; if ($h and $hd != $hf) { $s .= "-{$dtend}{$hf}{$dtabbr}"; } } else { if (date("Y-m", $date_debut) == date("Y-m", $date_fin)) { // meme annee et mois, jours differents if ($h) { $s = $du . $dtstart . affdate_jourcourt($d) . " {$hd}" . $dtabbr; $s .= $au . $dtend . $affdate($f); if ($hd != $hf) { $s .= " {$hf}"; } $s .= $dtabbr; } else { $s = $du . $dtstart . jour($d) . $dtabbr; $s .= $au . $dtend . $affdate($f) . $dtabbr; } } else { if (date("Y", $date_debut) == date("Y", $date_fin)) { // meme annee, mois et jours differents $s = $du . $dtstart . affdate_jourcourt($d); if ($h) { $s .= " {$hd}"; } $s .= $dtabbr . $au . $dtend . $affdate($f); if ($h) { $s .= " {$hf}"; } $s .= $dtabbr; } else { // tout different $s = $du . $dtstart . affdate($d); if ($h) { $s .= " " . date("(H:i)", $date_debut); } $s .= $dtabbr . $au . $dtend . affdate($f); if ($h) { $s .= " " . date("(H:i)", $date_fin); } $s .= $dtabbr; } } } return unicode2charset(charset2unicode($s, 'AUTO')); }
function traiter_raccourci_glossaire($texte) { if (!preg_match_all(_RACCOURCI_GLOSSAIRE, $texte, $matches, PREG_SET_ORDER)) return $texte; include_spip('inc/charsets'); $lien = charger_fonction('lien', 'inc'); foreach ($matches as $regs) { // Eviter les cas particulier genre "[?!?]" // et isoler le lexeme a gloser de ses accessoires // (#:url du glossaire, | bulle d'aide, {} hreflang) // Transformation en pseudo-raccourci pour passer dans inc_lien if (preg_match(_RACCOURCI_GLOSES, $regs[1], $r)) { preg_match('/^(.*?)(\d*)$/', $r[4], $m); $_n = intval($m[2]); $gloss = $m[1] ? ('#' . $m[1]) : ''; $t = $r[1] . $r[2] . $r[5]; list($t, $bulle, $hlang) = traiter_raccourci_lien_atts($t); if ($bulle===false) $bulle = $m[1]; $t = unicode2charset(charset2unicode($t), 'utf-8'); $ref = $lien("glose$_n$gloss", $t, 'spip_glossaire', $bulle, $hlang); $texte = str_replace($regs[0], $ref, $texte); } } return $texte; }
/** * Cree la sortie json pour le javascript des parametres de la barre * et la retourne * * @return string : declaration json de la barre */ function creer_json(){ $barre = $this; $type = $barre->nameSpace; $fonctions = $barre->functions; $barre->enlever_elements_non_affiches($this->markupSet); $barre->enlever_parametres_inutiles(); $json = Barre_outils::json_export($barre); // on lance la transformation des &chose; en veritables caracteres // sinon markitup restitue « au lieu de « directement // lorsqu'on clique sur l'icone include_spip('inc/charsets'); $json = unicode2charset(html2unicode($json)); return "\n\nbarre_outils_$type = ".$json . "\n\n $fonctions"; }
function couper($texte, $taille = 50, $suite = ' (...)') { if (!($length = strlen($texte)) or $taille <= 0) { return ''; } $offset = 400 + 2 * $taille; while ($offset < $length and strlen(preg_replace(",<[^>]+>,Uims", "", substr($texte, 0, $offset))) < $taille) { $offset = 2 * $offset; } if ($offset < $length && ($p_tag_ouvrant = strpos($texte, '<', $offset)) !== NULL) { $p_tag_fermant = strpos($texte, '>', $offset); if ($p_tag_fermant && $p_tag_fermant < $p_tag_ouvrant) { $offset = $p_tag_fermant + 1; } // prolonger la coupe jusqu'au tag fermant suivant eventuel } $texte = substr($texte, 0, $offset); /* eviter de travailler sur 10ko pour extraire 150 caracteres */ // on utilise les \r pour passer entre les gouttes $texte = str_replace("\r\n", "\n", $texte); $texte = str_replace("\r", "\n", $texte); // sauts de ligne et paragraphes $texte = preg_replace("/\n\n+/", "\r", $texte); $texte = preg_replace("/<(p|br)( [^>]*)?" . ">/", "\r", $texte); // supprimer les traits, lignes etc $texte = preg_replace("/(^|\r|\n)(-[-#\\*]*|_ )/", "\r", $texte); // supprimer les tags $texte = supprimer_tags($texte); $texte = trim(str_replace("\n", " ", $texte)); $texte .= "\n"; // marquer la fin // travailler en accents charset $texte = unicode2charset(html2unicode($texte, true)); if (!function_exists('nettoyer_raccourcis_typo')) { include_spip('inc/lien'); } $texte = nettoyer_raccourcis_typo($texte); // corriger la longueur de coupe // en fonction de la presence de caracteres utf if ($GLOBALS['meta']['charset'] == 'utf-8') { $long = charset2unicode($texte); $long = spip_substr($long, 0, max($taille, 1)); $nbcharutf = preg_match_all('/(&#[0-9]{3,5};)/S', $long, $matches); $taille += $nbcharutf; } // couper au mot precedent $long = spip_substr($texte, 0, max($taille - 4, 1)); $u = $GLOBALS['meta']['pcre_u']; $court = preg_replace("/([^\\s][\\s]+)[^\\s]*\n?\$/" . $u, "\\1", $long); $points = $suite; // trop court ? ne pas faire de (...) if (spip_strlen($court) < max(0.75 * $taille, 2)) { $points = ''; $long = spip_substr($texte, 0, $taille); $texte = preg_replace("/([^\\s][\\s]+)[^\\s]*\n?\$/" . $u, "\\1", $long); // encore trop court ? couper au caractere if (spip_strlen($texte) < 0.75 * $taille) { $texte = $long; } } else { $texte = $court; } if (strpos($texte, "\n")) { // la fin est encore la : c'est qu'on n'a pas de texte de suite $points = ''; } // remettre les paragraphes $texte = preg_replace("/\r+/", "\n\n", $texte); // supprimer l'eventuelle entite finale mal coupee $texte = preg_replace('/&#?[a-z0-9]*$/S', '', $texte); return quote_amp(trim($texte)) . $points; }
function typo_fr($letexte) { global $flag_strtr2; static $trans; // Nettoyer 160 = nbsp ; 187 = raquo ; 171 = laquo ; 176 = deg ; 147 = ldquo; 148 = rdquo if (!$trans) { $trans = array(" " => "~", "»" => "»", "«" => "«", "”" => "”", "“" => "“", "°" => "°"); $chars = array(160 => '~', 187 => '»', 171 => '«', 148 => '”', 147 => '“', 176 => '°'); $charset = read_meta('charset'); include_lcm('inc_charsets'); while (list($c, $r) = each($chars)) { $c = unicode2charset(charset2unicode(chr($c), 'iso-8859-1', 'forcer')); $trans[$c] = $r; } } if ($flag_strtr2) { $letexte = strtr($letexte, $trans); } else { reset($trans); while (list($c, $r) = each($trans)) { $letexte = str_replace($c, $r, $letexte); } } $cherche1 = array('/((^|[^\\#0-9a-zA-Z\\&])[\\#0-9a-zA-Z]*)\\;/', '/»| --?,|:([^0-9]|$)/', '/([^<!?])([!?])/', '/«|(M(M?\\.|mes?|r\\.?)|[MnN]°) /'); $remplace1 = array('\\1~;', '~\\0', '\\1~\\2', '\\0~'); $letexte = ereg_remplace($cherche1, $remplace1, $letexte); $letexte = preg_replace("/ *~+ */", "~", $letexte); $cherche2 = array('/([^-\\n]|^)--([^-]|$)/', '/(http|https|ftp|mailto)~:/', '/~/'); $remplace2 = array('\\1—\\2', '\\1:', ' '); $letexte = ereg_remplace($cherche2, $remplace2, $letexte); return $letexte; }
function spiplistes_envoyer_mail ($to, $subject, $message, $from = false, $headers = '', $format = 'texte') { static $opt_simuler_envoi; // si desabo, plus de format ! donc forcer a texte $format = ($format == 'html') ? $format : 'texte'; $charset = $GLOBALS['meta']['spiplistes_charset_envoi']; if(!$opt_simuler_envoi) { $opt_simuler_envoi = spiplistes_pref_lire('opt_simuler_envoi'); } if (!$from) { $from = spiplistes_email_from_default(); } if(strpos($from, '<') === false) { $fromname = spiplistes_nom_site_texte(); if ($charset != $GLOBALS['meta']['charset']){ include_spip('inc/charsets'); $fromname = unicode2charset(charset2unicode($fromname),$charset); } } // @TODO: voir email_reply_to ? $reply_to = 'no-reply'.preg_replace("|.*(@[a-z.]+)|i", "$1", email_valide($from)); if($opt_simuler_envoi == 'oui') { spiplistes_log("!!! MAIL SIMULATION MODE !!!"); $result = true; } else { include_once(_DIR_PLUGIN_SPIPLISTES.'inc/spiplistes_mail.inc.php'); $email_a_envoyer = array(); $return_path = spiplistes_return_path($from); if(is_array($message)) { if($format=='html' && isset($message[$format])) { $email_a_envoyer['html'] = new phpMail($to, $subject, $message['html'], $message['texte'], $charset); $email_a_envoyer['html']->From = $from ; if($fromname) $email_a_envoyer['html']->FromName = $fromname ; $email_a_envoyer['html']->AddCustomHeader("Errors-To: ".$return_path); $email_a_envoyer['html']->AddCustomHeader("Reply-To: ".$from); $email_a_envoyer['html']->AddCustomHeader("Return-Path: ".$return_path); $email_a_envoyer['html']->SMTPKeepAlive = true; $email_a_envoyer['html']->Body = $message['html']->Body; $email_a_envoyer['html']->AltBody = $message['html']->AltBody; } $message = $message['texte']->Body; } //$message = spiplistes_html_entity_decode ($message, $charset); $message = spiplistes_translate_2_charset ($message, $charset, true); //$email_a_envoyer['texte'] = new phpMail($to, $subject, '', html_entity_decode($message), $charset); $email_a_envoyer['texte'] = new phpMail($to, $subject, '', $message, $charset); $email_a_envoyer['texte']->From = $from ; if($fromname) $email_a_envoyer['html']->FromName = $fromname ; $email_a_envoyer['texte']->AddCustomHeader('Errors-To: '.$return_path); $email_a_envoyer['texte']->AddCustomHeader('Reply-To: '.$reply_to); $email_a_envoyer['texte']->AddCustomHeader('Return-Path: '.$return_path); $email_a_envoyer['texte']->SMTPKeepAlive = true; $result = $email_a_envoyer[$format]->send(); $msg = "email from $from to $to"; spiplistes_log(!$result ? "error: $msg not sent" : "$msg sent"); } return($result); }
function install_etape_3b_dist() { $login = _request('login'); $email = _request('email'); $nom = _request('nom'); $pass = _request('pass'); $pass_verif = _request('pass_verif'); $server_db = defined('_INSTALL_SERVER_DB') ? _INSTALL_SERVER_DB : _request('server_db'); if (!defined('_PASS_LONGUEUR_MINI')) { define('_PASS_LONGUEUR_MINI', 6); } if (!defined('_LOGIN_TROP_COURT')) { define('_LOGIN_TROP_COURT', 4); } if ($login) { $echec = $pass != $pass_verif ? _T('info_passes_identiques') : (strlen($pass) < _PASS_LONGUEUR_MINI ? _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI)) : (strlen($login) < _LOGIN_TROP_COURT ? _T('info_login_trop_court') : '')); include_spip('inc/filtres'); if (!$echec and $email and !email_valide($email)) { $echec = _T('form_email_non_valide'); } if ($echec) { echo minipres('AUTO', info_progression_etape(3, 'etape_', 'install/', true) . "<div class='error'><h3>{$echec}</h3>\n" . "<p>" . _T('avis_connexion_echec_2') . "</p>" . "</div>"); exit; } } if (@file_exists(_FILE_CHMOD_TMP)) { include _FILE_CHMOD_TMP; } else { redirige_url_ecrire('install'); } if (!@file_exists(_FILE_CONNECT_TMP)) { redirige_url_ecrire('install'); } # maintenant on connait le vrai charset du site s'il est deja configure # sinon par defaut lire_meta reglera _DEFAULT_CHARSET # (les donnees arrivent de toute facon postees en _DEFAULT_CHARSET) lire_metas(); if ($login) { include_spip('inc/charsets'); $nom = importer_charset($nom, _DEFAULT_CHARSET); $login = importer_charset($login, _DEFAULT_CHARSET); $email = importer_charset($email, _DEFAULT_CHARSET); # pour le passwd, bizarrement il faut le convertir comme s'il avait # ete tape en iso-8859-1 ; car c'est en fait ce que voit md5.js $pass = unicode2charset(utf_8_to_unicode($pass), 'iso-8859-1'); include_spip('auth/sha256.inc'); include_spip('inc/acces'); $htpass = generer_htpass($pass); $alea_actuel = creer_uniqid(); $alea_futur = creer_uniqid(); $shapass = _nano_sha256($alea_actuel . $pass); // prelablement, creer le champ webmestre si il n'existe pas (install neuve // sur une vieille base $t = sql_showtable("spip_auteurs", true); if (!isset($t['field']['webmestre'])) { @sql_alter("TABLE spip_auteurs ADD webmestre varchar(3) DEFAULT 'non' NOT NULL"); } $id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "login="******"nom" => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'htpass' => $htpass, 'statut' => '0minirezo'), "id_auteur={$id_auteur}"); } else { $id_auteur = sql_insertq('spip_auteurs', array('nom' => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'htpass' => $htpass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'statut' => '0minirezo')); } // le passer webmestre separrement du reste, au cas ou l'alter n'aurait pas fonctionne @sql_updateq('spip_auteurs', array('webmestre' => 'oui'), "id_auteur={$id_auteur}"); // inserer email comme email webmaster principal // (sauf s'il est vide: cas de la re-installation) if ($email) { ecrire_meta('email_webmaster', $email); } // Connecter directement celui qui vient de (re)donner son login // mais sans cookie d'admin ni connexion longue include_spip('inc/auth'); if (!($auteur = auth_identifier_login($login, $pass)) or !auth_loger($auteur, true)) { spip_log("login automatique impossible {$auth_spip} {$session}" . count($row)); } } // installer les metas $config = charger_fonction('config', 'inc'); $config(); // activer les plugins // leur installation ne peut pas se faire sur le meme hit, il faudra donc // poursuivre au hit suivant include_spip('inc/plugin'); actualise_plugins_actifs(); include_spip('inc/distant'); redirige_par_entete(parametre_url(self(), 'etape', '4', '&')); }
function spiplistes_preparer_message ($objet, $patron, $contexte) { // si pas encore abonne' ou desabonne', pas de format ! donc forcer a texte $format = ($contexte['format'] == 'html') ? $contexte['format'] : ($contexte['format'] = 'texte'); $contexte['patron'] = $patron; $path_patron = _SPIPLISTES_PATRONS_MESSAGES_DIR . $patron; list($message_html, $message_texte) = spiplistes_assembler_patron($path_patron, $contexte); $charset = $GLOBALS['meta']['spiplistes_charset_envoi']; if($charset != $GLOBALS['meta']['charset']) { include_spip('inc/charsets'); if($format == 'html') { $message_html = unicode2charset(charset2unicode($message_html), $charset); } //$message_texte = unicode2charset(charset2unicode($message_texte), $charset); $message_texte = spiplistes_translate_2_charset ($message_texte, $charset); } $email_a_envoyer = array(); $email_a_envoyer['texte'] = new phpMail('', $objet, '', $message_texte, $charset); if($format == 'html') { $email_a_envoyer['html'] = new phpMail('', $objet, $message_html, $message_texte, $charset); $email_a_envoyer['html']->Body = "<html>\n\n<body>\n\n" . $message_html . "\n\n</body></html>"; $email_a_envoyer['html']->AltBody = $message_texte; } $email_a_envoyer['texte']->Body = $message_texte ."\n\n"; $email_a_envoyer[$format]->SetAddress($contexte['email'], $contexte['nom']); return($email_a_envoyer); }
function sax_bug($data) { $r = analyser_doctype($data); if (!$r) { $data = _MESSAGE_DOCTYPE . _DOCTYPE_ECRIRE . preg_replace(_REGEXP_DOCTYPE, '', $data); $r = analyser_doctype($data); } list($doctype, $topelement, $avail, $grammaire, $rotlvl, $len) = $r; include_spip('xml/analyser_dtd'); $dtc = charger_dtd($grammaire, $avail, $rotlvl); // l'entete contient eventuellement < ? xml... ? >, le Doctype, // et des commentaires autour d'eux $entete = ltrim(substr($data,0,$len)); if ($dtc) { $trans = array(); foreach($dtc->entites as $k => $v) { if (!strpos(" amp lt gt quot ", $k)) $trans["&$k;"] = $v; } $data = strtr(substr($data,$len), $trans); } else { $data = html2unicode(substr($data,$len), true); } return array($entete,unicode2charset($data), $dtc); }
/** * Afficher de facon textuelle les dates de debut et fin en fonction des cas * - Le lundi 20 fevrier a 18h * - Le 20 fevrier de 18h a 20h * - Du 20 au 23 fevrier * - du 20 fevrier au 30 mars * - du 20 fevrier 2007 au 30 mars 2008 * $horaire='oui' permet d'afficher l'horaire, toute autre valeur n'indique que le jour * $forme peut contenir abbr (afficher le nom des jours en abbrege) et ou hcal (generer une date au format hcal) * * @param string $date_debut * @param string $date_fin * @param string $horaire * @param string $forme * @return string */ function agenda_affdate_debut_fin($date_debut, $date_fin, $horaire = 'oui', $forme=''){ static $trans_tbl=NULL; if ($trans_tbl==NULL){ $trans_tbl = get_html_translation_table (HTML_ENTITIES); $trans_tbl = array_flip ($trans_tbl); } $abbr = ''; if (strpos($forme,'abbr')!==false) $abbr = 'abbr'; $affdate = "affdate_jourcourt"; if (strpos($forme,'annee')!==false) $affdate = 'affdate'; $dtstart = $dtend = $dtabbr = ""; if (strpos($forme,'hcal')!==false) { $dtstart = "<abbr class='dtstart' title='".date_iso($date_debut)."'>"; $dtend = "<abbr class='dtend' title='".date_iso($date_fin)."'>"; $dtabbr = "</abbr>"; } $date_debut = strtotime($date_debut); $date_fin = strtotime($date_fin); $d = date("Y-m-d", $date_debut); $f = date("Y-m-d", $date_fin); $h = $horaire=='oui'; $hd = date("H:i",$date_debut); $hf = date("H:i",$date_fin); $au = " " . strtolower(_T('agenda:evenement_date_au')); $du = _T('agenda:evenement_date_du') . " "; $s = ""; if ($d==$f) { // meme jour $s = ucfirst(nom_jour($d,$abbr))." ".$affdate($d); if ($h) $s .= " $hd"; $s = "$dtstart$s$dtabbr"; if ($h AND $hd!=$hf) $s .= "-$dtend$hf$dtabbr"; } else if ((date("Y-m",$date_debut))==date("Y-m",$date_fin)) { // meme annee et mois, jours differents if ($h){ $s = $du . $dtstart . affdate_jourcourt($d) . " $hd" . $dtabbr; $s .= $au . $dtend . $affdate($f); if ($hd!=$hf) $s .= " $hf"; $s .= $dtabbr; } else { $s = $du . $dtstart . jour($d) . $dtabbr; $s .= $au . $dtend . $affdate($f) . $dtabbr; } } else if ((date("Y",$date_debut))==date("Y",$date_fin)) { // meme annee, mois et jours differents $s = $du . $dtstart . affdate_jourcourt($d); if ($h) $s .= " $hd"; $s .= $dtabbr . $au . $dtend . $affdate($f); if ($h) $s .= " $hf"; $s .= $dtabbr; } else { // tout different $s = $du . $dtstart . affdate($d); if ($h) $s .= " ".date("(H:i)",$date_debut); $s .= $dtabbr . $au . $dtend. affdate($f); if ($h) $s .= " ".date("(H:i)",$date_fin); $s .= $dtabbr; } return unicode2charset(charset2unicode(strtr($s,$trans_tbl),'')); }
/** * complete caracteres manquants dans HTML -> ISO * @return la chaine transcrite * @param $texte le texte a transcrire * @param $charset le charset souhaite'. Normalement 'iso-8859-1' (voir page de config) * @param $is_html flag. Pour ne pas transcrire completement la version html * @see http://fr.wikipedia.org/wiki/ISO_8859-1 * @see http://www.w3.org/TR/html401/sgml/entities.html */ function spiplistes_translate_2_charset ($texte, $charset='AUTO', $is_html = false) { $texte = charset2unicode($texte); $texte = unicode2charset($texte, $charset); if ($is_html) { $texte = spiplistes_html_entity_decode ($texte, $charset); } if($charset != 'utf-8') { $texte = spiplistes_iso2ascii ($texte, $is_html); } return($texte); }
function filtrer_ical($texte) { include_lcm('inc_charsets'); $texte = html2unicode($texte); $texte = unicode2charset(charset2unicode($texte, read_meta('charset'), 1), 'utf-8'); $texte = preg_replace("/\n/", " ", $texte); $texte = preg_replace("/,/", "\\,", $texte); return $texte; }
/** * Traitement de l'export des donnees auteurs. * * @param string $criteres de selection des auteurs * * @return array $retour nbre auteurs exportes et message de confirmation d'action. */ function exec_adhauteurs_export() { // Preparation affichage des choix type d'export $criteres_tot = _request('criteres'); $criteres = explode('|', $criteres_tot, 7); // Preparation de l'export des criteres (mise en forme dans le fichier out) // -- saison -- if (intval($criteres[2])) { $lib_criteres = sql_getfetsel('titre', 'spip_adhsaisons', array('id_saison=' . intval($criteres[2]))); $export_crit[0] = array('Saison', $lib_criteres); } else { $export_crit[0] = array('Saison', 'active'); } // -- technique -- if (intval($criteres[3])) { $adhwhere = array("type = 'niveau_Technique'"); $adhwhere = array_merge($adhwhere, array("id_mot = " . intval($criteres[3]))); $lib_criteres = sql_getfetsel('titre', 'spip_mots', $adhwhere); $export_crit[1] = array('Techbase', $lib_criteres); } else { $export_crit[1] = array('Techbase', '<<Tous>>'); } // -- encadrement -- if (intval($criteres[4])) { $adhwhere = array("type='Niveau_Encadrement'"); $adhwhere = array_merge($adhwhere, array("id_mot = " . intval($criteres[4]))); $lib_criteres = sql_getfetsel('titre', 'spip_mots', $adhwhere); $export_crit[2] = array('Encadrant', $lib_criteres); } else { $export_crit[2] = array('Encadrant', '<<Tous>>'); } // -- niveau -- if (intval($criteres[5])) { $lib_criteres = sql_getfetsel('titre', 'spip_adhnivs', array('id_niveau =' . intval($criteres[5]))); $export_crit[3] = array('Niveau', $criteres[6], $lib_criteres); } else { $export_crit[3] = array('Niveau', '<<Tous>>'); } $export_crit[4] = array('Champ', $criteres[0], $criteres[1]); /*$debug1= "DEBUG adhclub JR : exec/adhauteurs_export - exec_adhauteurs_export - Pt05 - "; adhclub_log("$debug1.", true); adhclub_log("criteres tot= $criteres_tot.", true); adhclub_log("criteres 0= $criteres[0].", true); adhclub_log("criteres 1= $criteres[1].", true); adhclub_log("criteres 2= $criteres[2].", true); adhclub_log("criteres 3= $criteres[3].", true); adhclub_log("criteres 4= $criteres[4].", true); adhclub_log("criteres 5= $criteres[5].", true); adhclub_log("criteres 6= $criteres[6].", true); adhclub_log("criteres 7= $criteres[7].", true); adhclub_log("FIN $debug1.", true); */ $retour = _request('retour'); $delim = _request('delim'); if ($delim == 'TAB') { $delim = "\t"; } if (!$retour) { $retour = generer_url_ecrire('adh_adherents'); } $titre = _T("adhclub:exporter_user_nb", array('nb_auteurs' => $nb_auteurs)); if (!$delim) { $icone = _DIR_PLUGIN_ADHCLUB . "img_pack/adh_export-24.png"; // // Affichage de la page // $commencer_page = charger_fonction('commencer_page', 'inc'); pipeline('exec_init', array('args' => $_GET, 'data' => '')); echo $commencer_page($titre, "adhclub"); echo debut_gauche('', true); $raccourcis = recuperer_fond("prive/inclure/adh_menu_tous", $contexte); echo bloc_des_raccourcis($raccourcis); echo pipeline('affiche_gauche', array('args' => array('exec' => 'adhauteurs_export', 'sql_adh_auteurs' => $sql_adh_auteurs), 'data' => '')); echo creer_colonne_droite("", true); echo pipeline('affiche_droite', array('args' => array('exec' => 'adhauteurs_export', 'sql_adh_auteurs' => $sql_adh_auteurs), 'data' => '')); echo debut_droite("", true); $milieu = ''; $milieu .= "<div class='entete-formulaire'>"; // Icones retour if ($retour) { $milieu .= icone_verticale(_T('icone_retour'), $retour, $icone, "rien.gif", $GLOBALS['spip_lang_left']); } $milieu .= gros_titre($titre, '', false); $milieu .= "</div>"; $milieu .= "<div class='formulaire_spip'>"; $action = generer_url_ecrire("adhauteurs_export", "criteres={$criteres_tot}&retour={$retour}"); $milieu .= "\n<form action='{$action}' method='post' class='formulaire_editer'><div>" . form_hidden($action); $milieu .= "<ul><li><label for='delim'>" . _T("adhclub:export_format") . "</label>"; $milieu .= "<select name='delim' id='delim'>\n"; $milieu .= "<option value=','>" . _T("adhclub:export_classique") . "</option>\n"; $milieu .= "<option value=';'>" . _T("adhclub:export_excel") . "</option>\n"; $milieu .= "<option value='TAB'>" . _T("adhclub:export_tabulation") . "</option>\n"; $milieu .= "</select></li></ul>"; $milieu .= "<p class='boutons'><input type='submit' class='submit' name='ok' value='" . _T('bouton_download') . "' /></p>\n"; $milieu .= "</div></form>"; $milieu .= "</div>"; echo pipeline('affiche_milieu', array('args' => array('exec' => 'adhauteurs_export', 'criteres' => $criteres_tot, 'retour' => $retour), 'data' => $milieu)); echo fin_gauche(), fin_page(); exit; } // Debut de l'export des donnees // Recuperation de la requete des adherents suivant filtrage (array de la forme SELECT..) $sql_adh_auteurs = adh_recherche($criteres[0], $criteres[1], 'spip_auteurs', $criteres[2], $criteres[3], $criteres[4], $criteres[5], $criteres[6], true); if ($sql_adh_auteurs) { // JR 20/03/2013 - Definir les colonnes a extraire pour $adh_select $adhselect_l = array("au.id_auteur", "au.nom_famille", "au.prenom", "au.sexe", "au.naissance", "au.fonction as licence", "au.mobile", "au.telephone", "au.email", "au.certiflimite as date_certif", "au.certifaspirine as allergie_aspirine", "au.certifqualif as certif_restreint"); $adhfrom_l = array("spip_auteurs au"); $adhwhere_l = array("au.id_auteur IN(" . $sql_adh_auteurs . ")"); // -- Si la saison est explicite, // on recherche les données Cotisations et Assurances associees a chaque auteur if (intval($criteres[2])) { $adhselect_l = array_merge($adhselect_l, array("co_l.id_coti", "co_l.titre as cotisation", "co_l.mnt_cotis", "as_l.id_assur", "as_l.titre as assurance", "as_l.mnt_assur")); $adhfrom_l = array_merge($adhfrom_l, array("spip_adhcotis co_l", "spip_adhcotis_liens ca_l", "spip_adhassurs as_l", "spip_adhassurs_liens aa_l")); $adhwhere_l = array_merge($adhwhere_l, array("au.id_auteur=ca_l.id_objet", "ca_l.objet='auteur'", "ca_l.id_coti=co_l.id_coti", "co_l.id_saison=" . intval($criteres[2]), "co_l.complement='non'", "au.id_auteur=aa_l.id_objet", "aa_l.objet='auteur'", "aa_l.id_assur=as_l.id_assur", "as_l.id_saison=" . intval($criteres[2]))); } /*$debug1= "DEBUG adhclub JR : exec/adhauteurs_export - Pt25 - "; adhclub_log("$debug1.", true); $debug2 = sql_get_select($adhselect_l, $adhfrom_l, sql_in('au.id_auteur', $sql_adh_auteurs)); adhclub_log("debug2=$debug2.", true); adhclub_log("adhwhere_l=$adhwhere_l.", true); $debug3 = sql_get_select($adhselect_l, $adhfrom_l, $adhwhere_l); adhclub_log("debug3=$debug3.", true); adhclub_log("FIN $debug1.", true); */ if ($export_auteurs = sql_allfetsel($adhselect_l, $adhfrom_l, $adhwhere_l)) { foreach ($export_auteurs as $ligne) { $list_entete = array(); $list_valeur = array(); foreach ($ligne as $k => $v) { /*$debug1= "DEBUG adhclub JR : exec/adhauteurs_export - Pt35 - "; adhclub_log("$debug1.", true); adhclub_log("k= $k , v= $v.", true); adhclub_log("FIN $debug1.", true);*/ $list_entete = array_merge($list_entete, array($k)); $list_valeur = array_merge($list_valeur, array($v)); } // Ecriture de l'entete des colonnes. if ($nb_auteurs == 0) { // JR-2013/08/01-Mise en forme des criteres en tete du fichier exporte. // JR-25/03/2015-Utilisation des F(spip_bonux) existantes. $output = exporter_csv_ligne(array('CRITERES'), $delim); $output .= exporter_csv_ligne(array('-_-_-_-', '-_-_-_-_-_-_-_-_-_-_-_-'), $delim); $output .= exporter_csv_ligne($export_crit[0], $delim); $output .= exporter_csv_ligne($export_crit[1], $delim); $output .= exporter_csv_ligne($export_crit[2], $delim); $output .= exporter_csv_ligne($export_crit[3], $delim); $output .= exporter_csv_ligne($export_crit[4], $delim); $output .= exporter_csv_ligne(array('-_-_-_-', '-_-_-_-_-_-_-_-_-_-_-_-'), $delim); // JR-20130801-Entetes de colonnes. $output .= exporter_csv_ligne($list_entete, $delim); } // Ecriture des lignes de donnees. $output .= exporter_csv_ligne($list_valeur, $delim); ++$nb_auteurs; } $charset = $GLOBALS['meta']['charset']; $file_csv = "export_auteurs_" . date('Ymd_His'); // @todo-JR-25/03/2015-Utilisation des F(spip_bonux) existantes. Attention remplissage criteres. //$filename = inc_exporter_csv($file_csv, ' ', $delim); $filename = preg_replace(',[^-_\\w]+,', '_', translitteration(textebrut(typo($file_csv)))); // Excel ? if ($delim == ',') { $extension = 'csv'; } else { // Extension 'csv' si delim = ';' (et pas forcément 'xls' !) if ($delim == ';') { $extension = 'csv'; } else { $extension = 'xls'; } } # Excel n'accepte pas l'utf-8 ni les entites html... on fait quoi? include_spip('inc/charsets'); $output = unicode2charset(charset2unicode($output), 'iso-8859-1'); $charset = 'iso-8859-1'; } Header("Content-Type: text/comma-separated-values; charset={$charset}"); Header("Content-Disposition: attachment; filename={$filename}.{$extension}"); //Header("Content-Type: text/plain; charset=$charset"); Header("Content-Length: " . strlen($output)); echo $output; exit; //*/ } else { include_spip('inc/minipres'); echo minipres(); } }
function afficher_liste_plugins_distants($liste){ $res = ""; if (!$liste) return ""; $menu = array(); $compte = 0; $afficher_plugin_distant = charger_fonction('afficher_plugin_distant','plugins'); $url_page = self(); foreach ($liste as $url => $info) { $titre = $info[0]; $titre = strtoupper(trim(typo(translitteration(unicode2charset(html2unicode($titre)))))); $menu[$titre] = $afficher_plugin_distant($url_page, $url, $info, _request('plugin')==$url); } ksort($menu); $res .= "<h3>"._T('plugins_compte',array('count' => count($menu)))."</h3>" . '<p>'._T('plugin_info_automatique_select',array('rep'=>joli_repertoire(_DIR_PLUGINS_AUTO))).'</p>' . "<ul class='liste-items plugins distants'>".join("\n",$menu)."</ul>"; return $res; }
/** * Importer un texte depuis un charset externe vers le charset du site * * Les caractères non resolus sont transformés en `{`; * * @param string $texte * Texte unicode à importer * @param string $charset * Charset d'origine du texte * Par défaut (AUTO), le charset d'origine est celui du site. * @return string * Texte transformé dans le charset site **/ function importer_charset($texte, $charset = 'AUTO') { static $trans = array(); // on traite le cas le plus frequent iso-8859-1 vers utf directement pour aller plus vite ! if ($charset == 'iso-8859-1' && $GLOBALS['meta']['charset'] == 'utf-8') { $texte = corriger_caracteres_windows($texte, 'iso-8859-1', $GLOBALS['meta']['charset']); if (init_mb_string()) { if ($order = mb_detect_order() and mb_detect_order($charset)) { $s = mb_convert_encoding($texte, 'utf-8', $charset); } mb_detect_order($order); # remettre comme precedemment return $s; } // Sinon, peut-etre connaissons-nous ce charset ? if (!isset($trans[$charset])) { if ($cset = load_charset($charset) and is_array($GLOBALS['CHARSET'][$cset])) { foreach ($GLOBALS['CHARSET'][$cset] as $key => $val) { $trans[$charset][chr($key)] = unicode2charset('&#' . $val . ';'); } } } if (count($trans[$charset])) { return str_replace(array_keys($trans[$charset]), array_values($trans[$charset]), $texte); } return $texte; } return unicode2charset(charset2unicode($texte, $charset)); }
/** * Transforme un texte écrit en entités HTML, dans le charset du site * * @param string $texte * Texte avec des entités HTML * @return string $texte * Texte dans le charset du site **/ function entite2charset($texte) { if (!strlen($texte)) { return ''; } include_spip('inc/charsets'); return unicode2charset(html_entity_decode(preg_replace('/&([lg]t;)/S', '&\\1', $texte), ENT_NOQUOTES, $GLOBALS['meta']['charset'])); }
function filtrer_ical($texte) { #include_spip('inc/charsets'); $texte = html2unicode($texte); $texte = unicode2charset(charset2unicode($texte, $GLOBALS['meta']['charset'], 1), 'utf-8'); $texte = preg_replace("/\n/", " ", $texte); $texte = preg_replace("/,/", "\\,", $texte); return $texte; }
function cs_les_tests() { global $icone, $metas_vars, $metas_outils; $icone = find_in_path('img/couteau-24.gif'); test_outil($_SERVER, 'Echo de : $_SERVER[]'); test_outil($_ENV, 'Echo de : $_ENV[]'); global $HTTP_ENV_VARS; test_outil($HTTP_ENV_VARS, 'Echo de : $HTTP_ENV_VARS'); $a = array('DOCUMENT_ROOT'=>getenv('DOCUMENT_ROOT'), 'REQUEST_URI'=>getenv('REQUEST_URI'), 'SCRIPT_NAME'=>getenv('SCRIPT_NAME'), 'PHP_SELF'=>getenv('PHP_SELF'), ); test_outil($a, 'Echo de : getenv()'); // lecture des variables stockees en meta test_outil($metas_outils, 'Outils actifs : $metas_outils[]'); test_outil($metas_vars, 'Contenu des variables : $metas_vars[]'); // test de url_absolue() $relative_path = find_in_path('img/smileys'); $realpath = str_replace("\\", "/", realpath($relative_path)); $root = preg_replace(',/$,', '', $_SERVER['DOCUMENT_ROOT']); $test_result=substr($realpath, strlen($root)); $dir = dirname(!empty($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : (!empty($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : (!empty($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : str_replace('\\','/',__FILE__) ))); $a = array('DOCUMENT_ROOT'=>$_SERVER['DOCUMENT_ROOT'], 'REQUEST_URI'=>$_SERVER['REQUEST_URI'], 'SCRIPT_NAME'=>$_SERVER['SCRIPT_NAME'], 'PHP_SELF'=>$_SERVER['PHP_SELF'], '__FILE__'=>__FILE__, '$root'=>$root, "find_in_path('img/smileys')"=>find_in_path('img/smileys'), "str_replace('\\', '/', realpath('$relative_path'))"=>$realpath, "substr('$realpath', strlen('$root'))"=>cs_red($test_result), "return?"=>(strlen($root) && strpos($realpath, $root)===0)?'oui':'non', "url_absolue('$relative_path')"=>url_absolue($relative_path), '$dir'=>$dir, "cs_canonicalize('$dir'.'/'.'$relative_path')"=>cs_red(cs_canonicalize($dir.'/'.$relative_path)), ); test_outil($a, 'Test sur : url_absolue()'); // test de cs_canonicalize() $dir = $dir.'/'.$relative_path; $address = str_replace("//", "/", $dir); $address1 = $address2 = explode('/', $address); $keys = array_keys($address2, '..'); foreach($keys as $keypos => $key) array_splice($address2, $key - ($keypos * 2 + 1), 2); $address3 = preg_replace(',([^.])\./,', '\1', implode('/', $address2)); $a = array('$dir'=>$dir, '$address'=>$address, "explode('/', '$address')"=>$address1, 'array_keys($dessus, "..")'=>$keys, 'array_spliced()'=>$address2, '$resultat'=>cs_red($address3), ); test_outil($a, 'Test sur : cs_canonicalize()'); // charger mes_fonctions, utile pour les filtres ou certains outils include_spip('public/parametrer'); // test de typo_exposants() include_spip('inc/charsets'); $textes = array( "Pr Paul, Dr Jules, Prs Pierre & Paul, Drs Pierre & Paul. Surveiller : Pré-St-Gervais ou Dré", "Ste Lucie, St-Lucien, St.Patrick, St Patrick, st-jules (laisser?), Sts Pierre & Paul, STe Lucie (laisser?)", "Bse Lucie, Bx-Lucien, Bx.Patrick, Bx Patrick, bx-jules (laisser?), Bses Jeanne & Julie", "Ier, Iers, Iier, Iiers, Ire (laisser?), Ires (laisser?), Ière, 1ière, 1ères, 1ières", unicode2charset("Accents : Ière, 1ière, 1ères, 1ières - ro, vo, rro, 1o, 2o, 22o, Mgr J.XXIII"), unicode2charset("Ie IIème IIIe IVe Ve VIe VIIe VIIIe IXe Xe XIe XVe XXe"), unicode2charset("Erreurs de typo : 2me, 3ème, 4ième, 5mes, 6èmes, 7ièmes"), unicode2charset("Cas problématique du L (50) : XLe XLème XLième Lème LIe"), "1er 1ers, 1eres, 2e 2es, IIIe IIIes, 2nd 22nd 21nd 2ndes. Vve Martin Cie Tartuffe, 3 Bd Voltaire.", "3 ou 4 m², 3 ou 4 m2 et 2 m3. 50 Mds ou 50 Mns ! Sté, Stés, Stés, Ste, Ets, Éts, Éts, Éts, Éts ...", "Mlle, Mlles, Mme, Mmes et erreurs Melle, Melles", "Me, Me martin, Me Martin, Mes M.&T., MMes M.&T.", 'avant <a href="www.mon-1er-lien.com" title="Mon 1er titre">Mon 1er lien</a> et <img src="image.jpg" alt="logo 6e" title="Cliquez!">', 'avant [Mon 1er lien->www.mon-1er-lien.com] apres le "test"!', 'on est passé du 7e au 15e rang, pas du 17e au 5e, des 7es aux 3emes !', 'on est passé du 7eme au 15ème rang, pas du 17ieme au 5ème', ); test_outil(cs_test_fun($textes, 'typo_exposants'), 'Test sur : typo_exposants() - Charset du site : '.$GLOBALS['meta']['charset']); // test de typo_guillemets() $textes = array( 'avant <i class="style">le</i> "test"!', 'avant <code class="code">toto</code>. apres le "test"!', 'avant '.echappe_html('<script>toto</script>', 'TEST', true).'apres le "test"!', 'avant '.echappe_html('<code class="code">toto</code>', 'TEST', true).'apres le "test"!', 'avant <a href="www.monlien.com" title="Mon titre" target="_blank">Mon lien</a> apres le "test"!', 'avant [Mon lien->www.monlien.com] apres le "test"!', ); test_outil(cs_test_fun($textes, 'typo_guillemets'), 'Test sur : typo_guillemets()'); // test des smileys $textes = array( "Doubles : :-(( :-)) :)) :'-)) :’-))", "Simples : :-> :-> :-( :-D :-) |-) :'-) :’-) :'-D :’-D :'-( :’-( :-( :o) B-) ;-) :-p :-P' :-| :-/ :-o :-O", "les courts (reconnus s'il y a un espace avant) : :) :( ;) :| |) :/ :(", ); test_outil(cs_test_fun($textes, 'cs_smileys_pre_typo'), 'Test sur : cs_smileys_pre_typo()'); // test des filets $textes = array( "__degrade.png__\n__ornement.png__", "\n__6__\n__5__\n__4__\n__3__\n__2__\n__1__\n__0__\n", ); if(function_exists('filets_sep')) test_outil(cs_test_fun($textes, create_function('$t','return propre(filets_sep($t));')), 'Test sur : filets_sep()'); // test des liens orphelins $GLOBALS["liens_orphelins_etendu"]=true; $textes = array( "http://google.fr et <html>http://google.fr</html> et <code>http://google.fr</code> et <cite>http://google.fr</cite>", "Voici : http://google.fr. Voici :http://www.google.fr. Voici http://www.google.fr", "voici : https://mabanque.fr ou encore ftp://mabanque.fr!", "www.google.fr ou bien : www.google.fr", "http://*****:*****@www.commentcamarche.net:80/glossair/glossair.php3 et http://serveur:port/repertoire/fichier.html", "ftp://serveur/repertoire/fichier.qqchose, ou encore ftp.stockage.fr/tropdelaballe...", "file:///disque|/repertoire/fichier.qqchose et : file:///c|/tmp/fichier.txt", "mailto:nom@organisation.domaine et : mailto:Fabien.Gandon@sophia.inria.fr", "telnet://bbs.monsite.com/ et telnet://Nom:Password@serveur.ici:port", "telnet://*****:*****@gopa.insa.fr:23", "gopher://serveur.ici:port/repertoire/fichier#marqueur et gopher://gopher.monsite.com/", "newsrc://*****:*****@world.com, mailto:moi-moi@world.com, mailto:nom@provider.com?subject=renseignement", "moi+moi@kekpar.tm.fr, mailto:moi-moi@kekpar.tm.fr, mailto:nom@provider.com.tm.fr?subject=renseignement", 'une image ? <img src="http://mailer.e-flux.com/mail_images/toto.jpg" alt="" />', '[<img src="http://mailer.e-flux.com/mail_images/toto.jpg" alt="" />->http://www.americas-society.org/] ', ); // test_outil(cs_test_fun($textes, 'typo'), 'Test sur : echappements'); test_outil(cs_test_fun($textes, 'liens_orphelins'), 'Test sur : liens_orphelins()'); $textes = array( "mailto:nom@organisation.domaine et : mailto:Fabien.Gandon@sophia.inria.fr (on supprime ces liens)", "moi+moi@world.com, mailto:moi-moi@world.com, mailto:nom@provider.com?subject=renseignement", "pat@moi.com [->pat@moi.com] [pat->pat@moi.com]", "pat@moi.com.tm.fr [->pat@moi.com.tm.fr] [pat->pat@moi.com.tm.fr]", "<a href='mailto:moi@toto.com'>Moi</a> et : <a href='mailto:moi@toto.com'>moi@toto.com</a>", "<a href='mailto:moi@kekpar.tm.fr'>Moi</a> et : <a href='mailto:moi@kekpar.tm.fr'>moi@kekpar.tm.fr</a>", '[Navigation->/@mot.html] <a class="spip_out" href="/@mot.html">Navigation</a>', ); test_outil(cs_test_fun($textes, 'mailcrypt'), 'Test sur : mailcrypt()'); /* define('_COULEURS_FONDS', 1); define('_COULEURS_SET', 1); define('_COULEURS_PERSO', "bas =#99CC11, haut= brown, test= bleu"); couleurs_installe(); print_r(couleurs_pre_typo("to[bas]to[/bas]to[haut]to[/haut]toto[test]to[/couleur]to\nto[bg bas]to[/bg]to[bg haut]to[/bg]toto[bg test]to[/bg test]to\n")); print_r(couleurs_pre_typo("to[red]to[/red]to[bleu]to[/bleu]toto[rouge]to[/couleur]to\nto[bg red]to[/bg]to[bg bleu]to[/bg]toto[bg rouge]to[/bg rouge]to\n")); */ }
function sax_bug($data, $dtc, $charset = null) { if (is_null($charset)) { $charset = $GLOBALS['meta']['charset']; } if ($dtc) { $trans = array(); foreach ($dtc->entites as $k => $v) { if (!strpos(" amp lt gt quot ", $k)) { $trans["&{$k};"] = $v; } } $data = strtr($data, $trans); } else { $data = html2unicode($data, true); } return unicode2charset($data, $charset); }
function importer_charset($texte, $charset = 'AUTO') { // on traite le cas le plus frequent iso-8859-1 vers utf directement pour aller plus vite ! if (($charset == 'iso-8859-1') && ($GLOBALS['meta']['charset']=='utf-8') && function_exists('utf8_encode')){ $texte = corriger_caracteres_windows($texte, 'iso-8859-1','unicode'); $texte = utf8_encode($texte); return $texte; } return unicode2charset(charset2unicode($texte, $charset)); }