Dépôt officiel du core SPIP * Copie possible par svn sur svn://trac.rezo.net/spip * Les svn:externals sont présent dans https://git.spip.net/SPIP/[nom du plugin dist] https://www.spip.net
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

211 lines
4.8 KiB

  1. <?php
  2. /***************************************************************************\
  3. * SPIP, Systeme de publication pour l'internet *
  4. * *
  5. * Copyright (c) 2001-2019 *
  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. /**
  12. * Déclaration de filtres permettent l'incrustation d'un document selon son type Mime
  13. *
  14. * Ces filtres peuvent être appelés par le modèle `<embXX>` dans certains cas,
  15. * en utilisant `|appliquer_filtre{#MIME_TYPE}` sur un contenu
  16. *
  17. * @see \appliquer_filtre()
  18. *
  19. * @package SPIP\Core\Filtres\Mime
  20. **/
  21. if (!defined('_ECRIRE_INC_VERSION')) {
  22. return;
  23. }
  24. include_spip('inc/filtres');
  25. // Les 7 familles de base ne font rien sauf celle des textes
  26. /**
  27. * Filtre d'incrustation d'un document image
  28. *
  29. * Ne fait rien.
  30. *
  31. * @filtre
  32. * @param string $t Contenu
  33. * @return string Rien.
  34. **/
  35. function filtre_image_dist($t) {
  36. return '';
  37. }
  38. /**
  39. * Filtre d'incrustation d'un document audio
  40. *
  41. * Ne fait rien.
  42. *
  43. * @filtre
  44. * @param string $t Contenu
  45. * @return string Rien.
  46. **/
  47. function filtre_audio_dist($t) {
  48. return '';
  49. }
  50. /**
  51. * Filtre d'incrustation d'un document video
  52. *
  53. * Ne fait rien.
  54. *
  55. * @filtre
  56. * @param string $t Contenu
  57. * @return string Rien.
  58. **/
  59. function filtre_video_dist($t) {
  60. return '';
  61. }
  62. /**
  63. * Filtre d'incrustation d'un document application
  64. *
  65. * Ne fait rien.
  66. *
  67. * @filtre
  68. * @param string $t Contenu
  69. * @return string Rien.
  70. **/
  71. function filtre_application_dist($t) {
  72. return '';
  73. }
  74. /**
  75. * Filtre d'incrustation d'un document message
  76. *
  77. * Ne fait rien.
  78. *
  79. * @filtre
  80. * @param string $t Contenu
  81. * @return string Rien.
  82. **/
  83. function filtre_message_dist($t) {
  84. return '';
  85. }
  86. /**
  87. * Filtre d'incrustation d'un document multipart
  88. *
  89. * Ne fait rien.
  90. *
  91. * @filtre
  92. * @param string $t Contenu
  93. * @return string Rien.
  94. **/
  95. function filtre_multipart_dist($t) {
  96. return '';
  97. }
  98. /**
  99. * Filtre d'incrustation d'un document test
  100. *
  101. * Échappe les chevrons et l'esperluette.
  102. *
  103. * @filtre
  104. * @param string $t Contenu
  105. * @return string Contenu échappé.
  106. **/
  107. function filtre_text_dist($t) {
  108. static $t1 = array('&', '<', '>');
  109. static $t2 = array('&amp;', '&lt;', '&gt;');
  110. return '<pre>' . str_replace($t1, $t2, $t) . '</pre>';
  111. }
  112. /**
  113. * Filtre d'incrustation d'un document CSV
  114. *
  115. * Produit un joli tableau à partir du texte CSV
  116. *
  117. * @filtre
  118. * @param string $t
  119. * Texte CSV
  120. * @return string
  121. * Tableau (formaté en SPIP)
  122. **/
  123. function filtre_text_csv_dist($t) {
  124. include_spip('inc/csv');
  125. list($entete, $lignes, $caption) = analyse_csv($t);
  126. foreach ($lignes as &$l) {
  127. $l = join('|', $l);
  128. }
  129. $corps = join("\n", $lignes) . "\n";
  130. $corps = $caption .
  131. "\n|{{" .
  132. join('}}|{{', $entete) .
  133. '}}|' .
  134. "\n|" .
  135. str_replace("\n", "|\n|", $corps);
  136. $corps = str_replace('&#34#', '&#34;', $corps);
  137. include_spip('inc/texte');
  138. return propre($corps);
  139. }
  140. /**
  141. * Filtre d'incrustation d'un document text/html
  142. *
  143. * Incrustation de HTML, si on est capable de le sécuriser,
  144. * sinon, afficher la source
  145. *
  146. * @filtre
  147. * @param string $t Code html
  148. * @return string Code html sécurisé ou texte échappé
  149. **/
  150. function filtre_text_html_dist($t) {
  151. if (!preg_match(',^(.*?)<body[^>]*>(.*)</body>,is', $t, $r)) {
  152. return appliquer_filtre($t, 'text/plain');
  153. }
  154. list(, $h, $t) = $r;
  155. $style = '';
  156. // recuperer les styles internes
  157. if (preg_match_all(',<style>(.*?)</style>,is', $h, $r, PREG_PATTERN_ORDER)) {
  158. $style = join("\n", $r[1]);
  159. }
  160. // ... et externes
  161. include_spip('inc/distant');
  162. if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER)) {
  163. foreach ($r[0] as $l) {
  164. preg_match("/href='([^']*)'/", str_replace('"', "'", $l), $m);
  165. $style .= "\n/* $l */\n"
  166. . str_replace('<', '', recuperer_page($m[1]));
  167. }
  168. }
  169. // Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ?
  170. $t = safehtml(preg_replace(',<script' . '.*?</script>,is', '', $t));
  171. return (!$style ? '' : "\n<style>" . $style . '</style>') . $t;
  172. }
  173. /**
  174. * Filtre d'incrustation d'un document RealAudio
  175. *
  176. * Retourne les paramètres `<param>` nécessaires à la balise `<object>`
  177. *
  178. * @filtre
  179. * @param string $id
  180. * @return string Code HTML des balises `<param>`
  181. **/
  182. function filtre_audio_x_pn_realaudio($id) {
  183. return "
  184. <param name='controls' value='PositionSlider' />
  185. <param name='controls' value='ImageWindow' />
  186. <param name='controls' value='PlayButton' />
  187. <param name='console' value='Console$id' />
  188. <param name='nojava' value='true' />";
  189. }