New file |
0,0 → 1,150 |
<?php |
|
if(!defined("PHORUM")) return; |
|
// BB Code Phorum Mod |
function phorum_bb_code($data) |
{ |
$PHORUM = $GLOBALS["PHORUM"]; |
|
$search = array( |
"/\[img\]((http|https|ftp):\/\/[a-z0-9;\/\?:@=\&\$\-_\.\+!*'\(\),~%# ]+?)\[\/img\]/is", |
"/\[url\]((http|https|ftp|mailto):\/\/([a-z0-9\.\-@:]+)[a-z0-9;\/\?:@=\&\$\-_\.\+!*'\(\),\#%~ ]*?)\[\/url\]/is", |
"/\[url=((http|https|ftp|mailto):\/\/[a-z0-9;\/\?:@=\&\$\-_\.\+!*'\(\),~%# ]+?)\](.+?)\[\/url\]/is", |
"/\[email\]([a-z0-9\-_\.\+]+@[a-z0-9\-]+\.[a-z0-9\-\.]+?)\[\/email\]/ies", |
"/\[color=([\#a-z0-9]+?)\](.+?)\[\/color\]/is", |
"/\[size=([+\-\da-z]+?)\](.+?)\[\/size\]/is", |
"/\[b\](.+?)\[\/b\]/is", |
"/\[u\](.+?)\[\/u\]/is", |
"/\[i\](.+?)\[\/i\]/is", |
"/\[s\](.+?)\[\/s\]/is", |
"/\[center\](.+?)\[\/center\]/is", |
"/\[hr\]/i", |
"/\[code\](.+?)\[\/code\]/is", |
"/\[sub\](.+?)\[\/sub\]/is", |
"/\[sup\](.+?)\[\/sup\]/is", |
); |
|
// add extra tags to links, if enabled in the admin settings page |
|
$extra_link_tags = ""; |
|
if(isset($PHORUM["mod_bb_code"])){ // check for settings file before using settings-dependent variables |
if ($PHORUM["mod_bb_code"]["links_in_new_window"]){ |
$extra_link_tags .= "target=\"_blank\" "; |
} |
if ($PHORUM["mod_bb_code"]["rel_no_follow"]){ |
$extra_link_tags .= "rel=\"nofollow\" "; |
} |
} |
|
$replace = array( |
"<img src=\"$1\" />", |
"[<a $extra_link_tags href=\"$1\">$3</a>]", |
"<a $extra_link_tags href=\"$1\">$3</a>", |
"'<a $extra_link_tags href=\"'.phorum_html_encode('mailto:$1').'\">'.phorum_html_encode('$1').'</a>'", |
"<span style=\"color: $1\">$2</span>", |
"<span style=\"font-size: $1\">$2</span>", |
"<strong>$1</strong>", |
"<u>$1</u>", |
"<i>$1</i>", |
"<s>$1</s>", |
"<center class=\"bbcode\">$1</center>", |
"<hr class=\"bbcode\" />", |
"<pre class=\"bbcode\">$1</pre>", |
"<sub class=\"bbcode\">$1</sub>", |
"<sup class=\"bbcode\">$1</sup>", |
); |
|
$quote_search = array( |
"/\[quote\]/is", |
"/\[quote ([^\]]+?)\]/is", |
"/\[quote=([^\]]+?)\]/is", |
"/\[\/quote\]/is" |
); |
|
$quote_replace = array( |
"<blockquote class=\"bbcode\">".$PHORUM["DATA"]["LANG"]["Quote"] . ":<div>", |
"<blockquote class=\"bbcode\">".$PHORUM["DATA"]["LANG"]["Quote"] . ":<div><strong>$1</strong><br />", |
"<blockquote class=\"bbcode\">".$PHORUM["DATA"]["LANG"]["Quote"] . ":<div><strong>$1</strong><br />", |
"</div></blockquote>" |
); |
|
foreach($data as $message_id => $message){ |
|
if(isset($message["body"])){ |
|
// do BB Code here |
$body = $message["body"]; |
|
$rnd=substr(md5($body.time()), 0, 4); |
|
// convert bare urls into bbcode tags as best we can |
// the haystack has to have a space in front of it for the preg to work. |
$body = preg_replace("/([^='\"(\[url\]|\[img\])])((http|https|ftp):\/\/[a-z0-9;\/\?:@=\&\$\-_\.\+!*'\(\),~%#]+)/i", "$1:$rnd:$2:/$rnd:", " $body"); |
|
// stip puncuation from urls |
if(preg_match_all("!:$rnd:(.+?):/$rnd:!i", $body, $match)){ |
|
$urls = array_unique($match[1]); |
|
foreach($urls as $key => $url){ |
// stip puncuation from urls |
if(preg_match("|[^a-z0-9=&/\+_]+$|i", $url, $match)){ |
|
$extra = $match[0]; |
$true_url = substr($url, 0, -1 * (strlen($match[0]))); |
|
$body = str_replace("$url:/$rnd:", "$true_url:/$rnd:$extra", $body); |
|
$url = $true_url; |
} |
|
$body = str_replace(":$rnd:$url:/$rnd:", "[url]{$url}[/url]", $body); |
} |
|
} |
|
// no sense doing any of this if there is no [ in the body |
if(strstr($body, "[")){ |
|
// convert bare email addresses into bbcode tags as best we can. |
$body = preg_replace("/([a-z0-9][a-z0-9\-_\.\+]+@[a-z0-9\-]+\.[a-z0-9\-\.]+[a-z0-9])/i", "[email]$1[/email]", $body); |
|
// clean up any BB code we stepped on. |
$body = str_replace("[email][email]", "[email]", $body); |
$body = str_replace("[/email][/email]", "[/email]", $body); |
|
// fiddle with white space around quote and code tags. |
$body=preg_replace("/\s*(\[\/*(code|quote)\])\s*/", "$1", $body); |
|
// run the pregs defined above |
$body = preg_replace($search, $replace, $body); |
|
// quote has to be handled differently because they can be embedded. |
// we only do quote replacement if we have matching start and end tags |
if(strstr($body, "[quote") && substr_count($body, "[quote")==substr_count($body, "[/quote]")){ |
$body = preg_replace($quote_search, $quote_replace, $body); |
} |
|
|
} |
|
|
$data[$message_id]["body"] = $body; |
} |
} |
|
return $data; |
} |
|
|
function phorum_bb_code_quote ($array) |
{ |
$PHORUM = $GLOBALS["PHORUM"]; |
|
if(isset($PHORUM["mod_bb_code"]) && $PHORUM["mod_bb_code"]["quote_hook"]){ |
return "[quote $array[0]]$array[1][/quote]"; |
} |
} |
?> |