PageRenderTime 44ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/braldahim-site/library/Bral/Util/BBParser.php

https://github.com/Canop/braldahim
PHP | 245 lines | 148 code | 50 blank | 47 comment | 3 complexity | 9655b213f12de81a5076cf5b6499fdef MD5 | raw file
  1. <?php
  2. /**
  3. * This file is part of Braldahim, under Gnu Public Licence v3.
  4. * See licence.txt or http://www.gnu.org/licenses/gpl-3.0.html
  5. * Copyright: see http://www.braldahim.com/sources
  6. */
  7. // *******************************************************************
  8. // Title udde Instant Messages (uddeIM)
  9. // Description Instant Messages System for Mambo 4.5 / Joomla 1.0 / Joomla 1.5
  10. // Author 2007-2008 Stephan Slabihoud, 2006 Benjamin Zweifel
  11. // Adapte pour Braldahim par Yvonnick ESNAULT
  12. // License This is free software and you may redistribute it under the GPL.
  13. // uddeIM comes with absolutely no warranty.
  14. // Use at your own risk. For details, see the license at
  15. // http://www.gnu.org/licenses/gpl.txt
  16. // Other licenses can be found in LICENSES folder.
  17. // This code uses portions of the bbcode script from
  18. // phpBB (C) 2001 The phpBB Group
  19. // *******************************************************************
  20. // Modified by / for Braldahim
  21. // *******************************************************************
  22. class Bral_Util_BBParser {
  23. public static function bbcodeReplace($string) {
  24. // replace font formatting [b] [i] [u] [color= [size=
  25. // bold
  26. $string = preg_replace("/(\[b\])(.*?)(\[\/b\])/si","<span style=\"font-weight: bold\">\\2</span>",$string);
  27. // underline
  28. $string = preg_replace("/(\[u\])(.*?)(\[\/u\])/si","<span style=\"text-decoration: underline\">\\2</span>",$string);
  29. // italic
  30. $string = preg_replace("/(\[i\])(.*?)(\[\/i\])/si","<span style=\"font-style: italic\">\\2</span>",$string);
  31. // size Max size is 7
  32. $string = preg_replace("/\[size=([1-5])\](.+?)\[\/size\]/si","<font size=\\1\">\\2</font>",$string);
  33. // et une seconde fois pour les chaines du style : [size=4]sqfdqsdf[size=3]qqsdfqsf[/size][/size]
  34. $string = preg_replace("/\[size=([1-5])\](.+?)\[\/size\]/si","<font size=\\1\">\\2</font>",$string);
  35. // color
  36. $string = preg_replace("%\[color=(.*?)\](.*?)\[/color\]%si","<span style=\"color: \\1\">\\2</span>",$string);
  37. $string = preg_replace("/(\[center\])(.*?)(\[\/center\])/si","<center>\\2</center>",$string);
  38. $string = preg_replace("/(\[justify\])(.*?)(\[\/justify\])/si","<p style=\"text-align: justify\">\\2</p>",$string);
  39. $string = preg_replace("/(\[left\])(.*?)(\[\/left\])/si","<p style=\"text-align: left\">\\2</p>",$string);
  40. $string = preg_replace("/(\[right\])(.*?)(\[\/right\])/si","<p style=\"text-align: right\">\\2</p>",$string);
  41. while (substr_count($string,"<span") > substr_count($string,"</span>")) {
  42. $string.="</span>";
  43. }
  44. while (substr_count($string,"<span") < substr_count($string,"</span>")) {
  45. $string="<span>".$string;
  46. }
  47. // http, https, ftp, mailto
  48. $string = str_replace("[url=index.php", "#*#LINKINDEX=#*#", $string);
  49. $string = str_replace("[url=http://", "#*#LINKHTTP=#*#", $string);
  50. $string = str_replace("[url=ftp://", "#*#LINKFTP=#*#", $string);
  51. $string = str_replace("[url=https://", "#*#LINKHTTPS=#*#", $string);
  52. $string = str_replace("[url=mailto:", "#*#LINKMAILTO=#*#", $string);
  53. $string = str_replace("[url]index.php", "#*#LINKINDEX]#*#", $string);
  54. $string = str_replace("[url]http://", "#*#LINKHTTP]#*#", $string);
  55. $string = str_replace("[url]ftp://", "#*#LINKFTP]#*#", $string);
  56. $string = str_replace("[url]https://", "#*#LINKHTTPS]#*#", $string);
  57. $string = str_replace("[url]mailto:", "#*#LINKMAILTO]#*#", $string);
  58. $string = str_replace("[url]", "[url]http://", $string);
  59. $string = str_replace("[url=", "[url=http://", $string);
  60. $string = str_replace("#*#LINKHTTP=#*#", "[url=http://", $string);
  61. $string = str_replace("#*#LINKFTP=#*#", "[url=ftp://", $string);
  62. $string = str_replace("#*#LINKHTTPS=#*#", "[url=https://", $string);
  63. $string = str_replace("#*#LINKMAILTO=#*#", "[url=mailto:", $string);
  64. $string = str_replace("#*#LINKINDEX=#*#", "[url=index.php", $string);
  65. $string = str_replace("#*#LINKHTTP]#*#", "[url]http://", $string);
  66. $string = str_replace("#*#LINKFTP]#*#", "[url]ftp://", $string);
  67. $string = str_replace("#*#LINKHTTPS]#*#", "[url]https://", $string);
  68. $string = str_replace("#*#LINKMAILTO]#*#", "[url]mailto:", $string);
  69. $string = str_replace("#*#LINKINDEX]#*#", "[url]index.php", $string);
  70. $string = preg_replace("/\[img size=([0-9][0-9][0-9])\](http\:\/\/.*?)\[\/img\]/si","[#*#img size=$1]$2[/#*#img]",$string);
  71. $string = preg_replace("/\[img size=([0-9][0-9])\](http\:\/\/.*?)\[\/img\]/si","[#*#img size=$1]$2[/#*#img]",$string);
  72. $string = preg_replace("/\[img\](http\:\/\/.*?)\[\/img\]/si","[#*#img]$1[/#*#img]",$string);
  73. $string = preg_replace("/\[img size=([0-9][0-9][0-9])\](.*?)\[\/img\]/si","[img size=$1]http://$2[/img]",$string);
  74. $string = preg_replace("/\[img size=([0-9][0-9])\](.*?)\[\/img\]/si","[img size=$1]http://$2[/img]",$string);
  75. $string = preg_replace("/\[img\](.*?)\[\/img\]/si","[img]http://$1[/img]",$string);
  76. $string = str_replace("[#*#img", "[img", $string);
  77. $string = str_replace("[/#*#img", "[/img", $string);
  78. // ul li replacements
  79. $string = preg_replace("/(\[ul\])(.*?)(\[\/ul\])/si","<ul>\\2</ul>",$string);
  80. $string = preg_replace("/(\[ol\])(.*?)(\[\/ol\])/si","<ol type=1>\\2</ol>",$string);
  81. $string = preg_replace("/(\[li\])(.*?)(\[\/li\])/si","<li>\\2</li>",$string);
  82. // url replacement
  83. //make regular HTML URL links targets _blank, bbCode URL translation
  84. $string = preg_replace('/\[url\](.*?)javascript(.*?)\[\/url\]/si','<span style=\'text-decoration: line-through\'>javascript link</span>',$string);
  85. $string = preg_replace('/\[url=(.*?)javascript(.*?)\](.*?)\[\/url\]/si','<span style=\'text-decoration: line-through\'>javascript link</span>',$string);
  86. // now the rest of the links to blank
  87. $string = preg_replace("/\[url\](.*?)\[\/url\]/si","<a href=\"\\1\" target=\"_blank\">\\1</a>",$string);
  88. $string = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si","<a href=\"\\1\" target=\"_blank\">\\2</a>",$string);
  89. // img replacement
  90. $string = preg_replace("/\[img size=([0-9][0-9][0-9])\](.*?)\[\/img\]/si","<img src=\"$2\" border=\"0\" width=\"$1\" alt=\"\" />",$string);
  91. $string = preg_replace("/\[img size=([0-9][0-9])\](.*?)\[\/img\]/si","<img src=\"$2\" border=\"0\" width=\"$1\" alt=\"\" />",$string);
  92. $string = preg_replace("/\[img\](.*?)\[\/img\]/si","<img src=\"$1\" border=\"0\" alt=\"\" />",$string);
  93. $string = preg_replace("/<img(.*?)javascript(.*?)>/si",'<span style=\'text-decoration: line-through\'>javascript link</span>',$string);
  94. $string = nl2br($string);
  95. // Rajout Yvo
  96. $string = self::bbcodeStripPlus($string);
  97. return stripslashes(self::smileReplace($string));
  98. }
  99. public static function smileReplace($string) {
  100. $config = Zend_Registry::get('config');
  101. $url = $config->url->static;
  102. $message_emoticons=array(
  103. ":))" => '<img src="'.$url.'/images/uddeim/emoticon_laughing.gif" alt="" border="0" align="middle" />',
  104. ":D" => '<img src="'.$url.'/images/uddeim/emoticon_laughing.gif" alt="" border="0" align="middle" />',
  105. ":*" => '<img src="'.$url.'/images/uddeim/emoticon_heart.gif" alt="" border="0" align="middle" />',
  106. ":?" => '<img src="'.$url.'/images/uddeim/emoticon_wondering.gif" alt="" border="0" align="middle" />',
  107. ":x" => '<img src="'.$url.'/images/uddeim/emoticon_crossed.gif" alt="" border="0" align="middle" />',
  108. "B)" => '<img src="'.$url.'/images/uddeim/emoticon_cool.gif" alt="" border="0" align="middle" />',
  109. ":(" => '<img src="'.$url.'/images/uddeim/emoticon_sad.gif" alt="" border="0" align="middle" />',
  110. ":)" => '<img src="'.$url.'/images/uddeim/emoticon_smile.gif" alt="" border="0" align="middle" width="19" height="19"/>',
  111. ":-(" => '<img src="'.$url.'/images/uddeim/emoticon_sad.gif" alt="" border="0" align="middle" />',
  112. ":-)" => '<img src="'.$url.'/images/uddeim/emoticon_smile.gif" alt="" border="0" align="middle" />',
  113. ":laugh:" => '<img src="'.$url.'/images/uddeim/emoticon_laughing.gif" alt="" border="0" align="middle" />',
  114. ":grin:" => '<img src="'.$url.'/images/uddeim/emoticon_laughing.gif" alt="" border="0" align="middle" />',
  115. ";)" => '<img src="'.$url.'/images/uddeim/emoticon_wink.gif" alt="" border="0" align="middle" />',
  116. ";-)" => '<img src="'.$url.'/images/uddeim/emoticon_wink.gif" alt="" border="0" align="middle" />',
  117. ":P" => '<img src="'.$url.'/images/uddeim/emoticon_tongue.gif" alt="" border="0" align="middle" />',
  118. ":mad:" => '<img src="'.$url.'/images/uddeim/emoticon_angry.gif" alt="" border="0" align="middle" />',
  119. ":angry:" => '<img src="'.$url.'/images/uddeim/emoticon_angry.gif" alt="" border="0" align="middle" />',
  120. ":ohmy:" => '<img src="'.$url.'/images/uddeim/emoticon_shocked.gif" alt="" border="0" align="middle" />',
  121. ":o" => '<img src="'.$url.'/images/uddeim/emoticon_shocked.gif" alt="" border="0" align="middle" />',
  122. ":shock:" => '<img src="'.$url.'/images/uddeim/emoticon_shocked.gif" alt="" border="0" align="middle" />',
  123. ":blush:" => '<img src="'.$url.'/images/uddeim/emoticon_blush.gif" alt="" border="0" align="middle" />',
  124. ":kiss:" => '<img src="'.$url.'/images/uddeim/emoticon_kiss.gif" alt="" border="0" align="middle" />',
  125. );
  126. reset($message_emoticons);
  127. while (list($emo_txt,$emo_src)=each($message_emoticons)) {
  128. $string = str_replace($emo_txt,$emo_src,$string);
  129. }
  130. return $string;
  131. }
  132. public static function bbcodeStrip($string) {
  133. // bold
  134. $string = preg_replace("/(\[b\])(.*?)(\[\/b\])/si","\\2",$string);
  135. // underline
  136. $string = preg_replace("/(\[u\])(.*?)(\[\/u\])/si","\\2",$string);
  137. // italic
  138. $string = preg_replace("/(\[i\])(.*?)(\[\/i\])/si","\\2",$string);
  139. // size Max size is 7
  140. $string = preg_replace("/\[size=([1-7])\](.+?)\[\/size\]/si","\\2",$string);
  141. // color
  142. $string = preg_replace("%\[color=(.*?)\](.*?)\[/color\]%si","\\2",$string);
  143. // ul li replacements
  144. // lists
  145. $string = preg_replace("/(\[ul\])(.*?)(\[\/ul\])/si","\\2",$string);
  146. $string = preg_replace("/(\[ol\])(.*?)(\[\/ol\])/si","\\2",$string);
  147. $string = preg_replace("/(\[li\])(.*?)(\[\/li\])/si","\\2\\n",$string);
  148. // url replacement
  149. $string = preg_replace('/\[url\](.*?)javascript(.*?)\[\/url\]/si','',$string);
  150. $string = preg_replace('/\[url=(.*?)javascript(.*?)\](.*?)\[\/url\]/si','',$string);
  151. $string = preg_replace("/\[url\](.*?)\[\/url\]/si","\\1",$string);
  152. $string = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si","\\2 (\\1)",$string);
  153. // only front tag present
  154. $string = preg_replace("/\[url=(.*?)\]/si","",$string);
  155. // img replacement
  156. // img
  157. $string = preg_replace("/\[img size=([0-9][0-9][0-9])\](.*?)\[\/img\]/si","",$string);
  158. $string = preg_replace("/\[img size=([0-9][0-9])\](.*?)\[\/img\]/si","",$string);
  159. $string = preg_replace("/\[img\](.*?)\[\/img\]/si","",$string);
  160. $string = preg_replace("/<img(.*?)javascript(.*?)>/si",'',$string);
  161. // only front tag present
  162. $string = preg_replace("/\[img size=([0-9][0-9][0-9])\]]/si","",$string);
  163. // cut remaining single tags
  164. $string = str_replace("[i]", "", $string);
  165. $string = str_replace("[/i]", "", $string);
  166. $string = str_replace("[b]", "", $string);
  167. $string = str_replace("[/b]", "", $string);
  168. $string = str_replace("[u]", "", $string);
  169. $string = str_replace("[/u]", "", $string);
  170. $string = str_replace("[ul]", "", $string);
  171. $string = str_replace("[/ul]", "", $string);
  172. $string = str_replace("[ol]", "", $string);
  173. $string = str_replace("[/ol]", "", $string);
  174. $string = str_replace("[li]", "", $string);
  175. $string = str_replace("[/li]", "", $string);
  176. $string = preg_replace('/\[url=(.*?)javascript(.*?)\]/si','',$string);
  177. $string = preg_replace("/\[img size=([0-9][0-9][0-9])\]/si","",$string);
  178. $string = preg_replace("/\[img size=([0-9][0-9])\]/si","",$string);
  179. $string = preg_replace("/\[size=([1-7])\]/si","",$string);
  180. $string = preg_replace("%\[color=(.*?)\]%si","",$string);
  181. $string = str_replace("[img]", "", $string);
  182. $string = str_replace("[/img]", "", $string);
  183. $string = str_replace("[url]", "", $string);
  184. $string = str_replace("[/url]", "", $string);
  185. $string = str_replace("[/color]", "", $string);
  186. $string = str_replace("[/size]", "", $string);
  187. // Rajout Yvo
  188. $string = self::bbcodeStripPlus($string);
  189. return stripslashes($string);
  190. }
  191. public static function bbcodeStripPlus($string) {
  192. $string = str_replace("[plus]", "+", $string);
  193. return $string;
  194. }
  195. }