PageRenderTime 59ms CodeModel.GetById 25ms RepoModel.GetById 0ms app.codeStats 0ms

/spip/ecrire/inc/filtres_mime.php

https://github.com/eyeswebcrea/espace-couture-sittler.fr
PHP | 148 lines | 125 code | 7 blank | 16 comment | 3 complexity | 2cd7ce636cd02aa0a155ea2a3061ea23 MD5 | raw file
Possible License(s): LGPL-2.1, GPL-3.0
  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2011 *
  6. * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
  7. * *
  8. * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
  9. * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
  10. \***************************************************************************/
  11. if (!defined('_ECRIRE_INC_VERSION')) return;
  12. include_spip('inc/filtres');
  13. // Fichier des filtres d'incrustation d'un document selon son type MIME
  14. // Les 7 familles de base ne font rien sauf celle des textes
  15. function filtre_image_dist($t) {return '';}
  16. function filtre_audio_dist($t) {return '';}
  17. function filtre_video_dist($t) {return '';}
  18. function filtre_application_dist($t) {return '';}
  19. function filtre_message_dist($t) {return '';}
  20. function filtre_multipart_dist($t) {return '';}
  21. // http://doc.spip.org/@filtre_text_txt_dist
  22. function filtre_text_dist($t) {
  23. return '<pre>' . echapper_tags($t) . '</pre>';
  24. }
  25. // http://doc.spip.org/@filtre_text_csv_dist
  26. function filtre_text_csv_dist($t)
  27. {
  28. $virg = substr_count($t, ',');
  29. $pvirg = substr_count($t, ';');
  30. $tab = substr_count($t, "\t");
  31. if ($virg > $pvirg)
  32. { $sep = ','; $hs = '&#44;';}
  33. else { $sep = ';'; $hs = '&#59;'; $virg = $pvirg;}
  34. if ($tab > $virg) {$sep = "\t"; $hs = "\t";}
  35. $t = preg_replace('/\r?\n/', "\n",
  36. preg_replace('/[\r\n]+/', "\n", $t));
  37. // un separateur suivi de 3 guillemets attention !
  38. // attention au ; suceptible d'etre confondu avec un separateur
  39. // on substitue un # et on remplacera a la fin
  40. $t = preg_replace("/([\n$sep])\"\"\"/",'\\1"&#34#',$t);
  41. $t = str_replace('""','&#34#',$t);
  42. preg_match_all('/"[^"]*"/', $t, $r);
  43. foreach($r[0] as $cell)
  44. $t = str_replace($cell,
  45. str_replace($sep, $hs,
  46. str_replace("\n", "<br />",
  47. substr($cell,1,-1))),
  48. $t);
  49. list($entete, $corps) = explode("\n",$t,2);
  50. $caption = '';
  51. // sauter la ligne de tete formee seulement de separateurs
  52. if (substr_count($entete, $sep) == strlen($entete)) {
  53. list($entete, $corps) = explode("\n",$corps,2);
  54. }
  55. // si une seule colonne, en faire le titre
  56. if (preg_match("/^([^$sep]+)$sep+\$/", $entete, $l)) {
  57. $caption = "\n||" . $l[1] . "|";
  58. list($entete, $corps) = explode("\n",$corps,2);
  59. }
  60. // si premiere colonne vide, le raccourci doit quand meme produire <th...
  61. if ($entete[0] == $sep) $entete = ' ' . $entete;
  62. $lignes = explode("\n", $corps);
  63. // retrait des lignes vides finales
  64. while(count($lignes) > 0
  65. AND preg_match("/^$sep*$/", $lignes[count($lignes)-1]))
  66. unset($lignes[count($lignes)-1]);
  67. // calcul du nombre de colonne a chaque ligne
  68. $nbcols = array();
  69. $max = $mil = substr_count($entete, $sep);
  70. foreach($lignes as $k=>$v) {
  71. if ($max <> ($nbcols[$k]= substr_count($v, $sep))) {
  72. if ($max > $nbcols[$k])
  73. $mil = $nbcols[$k];
  74. else { $mil = $max; $max = $nbcols[$k];}
  75. }
  76. }
  77. // Si pas le meme nombre, cadrer au nombre max
  78. if ($mil <> $max)
  79. foreach($nbcols as $k=>$v) {
  80. if ($v < $max) $lignes[$k].= str_repeat($sep, $max-$v);
  81. }
  82. // et retirer les colonnes integralement vides
  83. while(true) {
  84. $nbcols = ($entete[strlen($entete)-1]===$sep);
  85. foreach($lignes as $v) $nbcols &= ($v[strlen($v)-1]===$sep);
  86. if (!$nbcols) break;
  87. $entete = substr($entete,0,-1);
  88. foreach($lignes as $k=>$v) $lignes[$k] = substr($v,0,-1);
  89. }
  90. $corps = join("\n", $lignes) . "\n";
  91. $corps = $caption .
  92. "\n|{{" .
  93. str_replace($sep,'}}|{{',$entete) .
  94. "}}|" .
  95. "\n|" .
  96. str_replace($sep,'|',str_replace("\n", "|\n|",$corps));
  97. $corps = str_replace('&#34#','&#34;',$corps);
  98. include_spip('inc/texte');
  99. return propre($corps);
  100. }
  101. // Incrustation de HTML, si on est capable de le securiser
  102. // sinon, afficher le source
  103. // http://doc.spip.org/@filtre_text_html_dist
  104. function filtre_text_html_dist($t)
  105. {
  106. if (!preg_match(',^(.*?)<body[^>]*>(.*)</body>,is', $t, $r))
  107. return appliquer_filtre($t,'text/plain');
  108. list(,$h,$t) = $r;
  109. $style = '';
  110. // recuperer les styles internes
  111. if (preg_match_all(',<style>(.*?)</style>,is', $h, $r, PREG_PATTERN_ORDER))
  112. $style = join("\n",$r[1]);
  113. // ... et externes
  114. include_spip('inc/distant');
  115. if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER))
  116. foreach($r[0] as $l) {
  117. preg_match("/href='([^']*)'/", str_replace('"',"'",$l), $m);
  118. $style .= "\n/* $l */\n"
  119. . str_replace('<','',recuperer_page($m[1]));
  120. }
  121. // Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ?
  122. $t = safehtml(preg_replace(',<script.*?</script>,is','',$t));
  123. return (!$style ? '' : "\n<style>$style</style>") . $t;
  124. }
  125. // http://doc.spip.org/@filtre_audio_x_pn_realaudio
  126. function filtre_audio_x_pn_realaudio($id)
  127. {
  128. return "
  129. <param name='controls' value='PositionSlider' />
  130. <param name='controls' value='ImageWindow' />
  131. <param name='controls' value='PlayButton' />
  132. <param name='console' value='Console$id' />
  133. <param name='nojava' value='true' />";
  134. }
  135. ?>