0 something is wrong with the quote syntax
if ($q_depth > 0)
message($lang_common['BBCode error'].' '.$lang_common['BBCode error 4']);
else if ($q_depth < 0)
message($lang_common['BBCode error'].' '.$lang_common['BBCode error 5']);
// If the quote depth level was higher than $max_depth we return the index for the
// beginning and end of the part we should strip out
if (isset($overflow_begin))
return array($overflow_begin, $overflow_end);
else
return null;
}
//
// Truncate URL if longer than 55 characters (add http:// or ftp:// if missing)
//
function truncate_url($url, $link = '')
{
global $cur_user;
$full_url = $url;
if (strpos($url, 'www.') === 0)
$full_url = 'http://'.$full_url;
else if (strpos($url, 'ftp.') === 0)
$full_url = 'ftp://'.$full_url;
// Ok, not very pretty :-)
$link = ($link == '' || $link == $url) ? ((strlen($url) > 55) ? substr($url, 0 , 39).' ... '.substr($url, -10) : $url) : stripslashes($link);
if ($cur_user['link_to_new_win'] == '0')
return ''.$link.'';
else
return ''.$link.'';
}
//
// Convert BBCodes to their HTML equivalent
//
function do_bbcode($message)
{
global $cur_user;
if (strpos($message, '[') !== false && strpos($message, ']') !== false)
{
$pattern = array("#\[b\](.*?)\[/b\]#s",
"#\[i\](.*?)\[/i\]#s",
"#\[u\](.*?)\[/u\]#s",
"#\[url\](.*?)\[/url\]#ie",
"#\[url=(.*?)\](.*?)\[/url\]#ie",
"#\[email\](.*?)\[/email\]#i",
"#\[email=(.*?)\](.*?)\[/email\]#i",
"#\[color=([a-zA-Z]*|\#?[0-9a-fA-F]{6})](.*?)\[/color\]#s");
$replace = array('$1',
'$1',
'$1',
'truncate_url("$1")',
'truncate_url("$1", "$2")',
'$1',
'$2',
'$2');
// Run this big regex replacement
/*$message = preg_replace($pattern, $replace, $message);*/
if (strpos($message, 'quote]') !== false)
{
$message = str_replace('[quote]', '
', $message);
$message = str_replace('[/quote]', ' |
', $message);
}
}
return $message;
}
//
// Make hyperlinks clickable
//
function do_clickable($message)
{
global $cur_user;
$message = ' '.$message;
$message = preg_replace_callback(
'#([\t\n ])([a-z0-9]+?){1}://([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)#i',
function($matches) {
return $matches[1] . truncate_url($matches[2] . '://' . $matches[3]);
},
$message
);
$message = preg_replace_callback(
'#([\t\n ])(www|ftp)\.(([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)#i',
function($matches) {
return $matches[1] . truncate_url($matches[2] . '.' . $matches[3], $matches[2] . '.' . $matches[3]);
},
$message
);
return substr($message, 1);
}
//
// Convert a series of smilies to images
//
function do_smilies($message)
{
// Here you can add additional smilies if you like (please note that you must escape singlequote and backslash)
$text = array(':)', '=)', ':(', '=(', ':D', '=D', ';)', ':x', ':rolleyes:');
$img = array('smile.png', 'smile.png', 'sad.png', 'sad.png', 'big_smile.png', 'big_smile.png', 'wink.png', 'mad.png', 'roll.png');
// Uncomment the next row if you add smilies that contain any of the characters &"'<>
// $text = array_map('htmlspecialchars', $text);
$message = ' '.$message.' ';
$num_smilies = count($text);
for ($i = 0; $i < $num_smilies; $i++)
$message = preg_replace("#(?<=.\W|\W.|^\W)".preg_quote($text[$i], '#')."(?=.\W|\W.|\W$)#m", '$1$2', $message);
return substr($message, 1, -1);
}
//
// Parse message text
//
function parse_message($message, $smilies)
{
global $cur_user, $permissions, $options;
// Deal with some possible "exploits"
$message = preg_replace("#javascript:#i", '_javascript_:', $message);
$message = preg_replace("#about:#i", '_about_:', $message);
if ($options['censoring'] == '1')
$message = censor_words($message);
if ($permissions['message_html'] == '0')
$message = htmlspecialchars($message);
// If the message contains a code tag we have to split it up (text within [code][/code] shouldn't be touched)
if (strpos($message, '[code]') !== false && strpos($message, '[/code]') !== false)
{
list($inside, $outside) = split_text($message, '[code]', '[/code]');
$outside = array_map('trim', $outside);
$message = implode('<">', $outside);
}
if ($options['make_links'] == '1')
$message = do_clickable($message);
if ($smilies == '1' && $options['smilies'] == '1' && isset($cur_user['show_img']) != '0')
$message = do_smilies($message);
if ($permissions['message_bbcode'] == '1')
{
$message = do_bbcode($message);
if ($permissions['message_img_tag'] == '1')
{
if (isset($cur_user['show_img']) != '0')
$message = preg_replace('#\[img\](.*?)\[/img\]#s', '', $message);
else
{
if (isset($cur_user['link_to_new_win']) == '0')
$message = preg_replace('#\[img\](.*?)\[/img\]#s', '<image>', $message);
else
$message = preg_replace('#\[img\](.*?)\[/img\]#s', '<image>', $message);
}
}
}
// Deal with newlines, tabs and multiple spaces
$pattern = array("\n", "\t", ' ', ' ');
$replace = array('
', ' ', ' ', ' ');
$message = str_replace($pattern, $replace, $message);
// If we split up the message before we have to concatenate it together again (code tags)
if (isset($inside))
{
$outside = explode('<">', $message);
$message = '';
$num_tokens = count($outside);
for ($i = 0; $i < $num_tokens; $i++)
{
$message .= $outside[$i];
if ($inside[$i])
$message .= '
code:
'.trim($inside[$i]).' |
';
}
}
return $message;
}
//
// Parse signature text
//
function parse_signature($message)
{
global $cur_user, $permissions, $options;
// Deal with some possible "exploits"
$message = preg_replace('/javascript:/i', '_javascript_:', $message);
$message = preg_replace('/about:/i', '_about_:', $message);
if ($options['censoring'] == '1')
$message = censor_words($message);
if ($permissions['sig_html'] == '0')
$message = htmlspecialchars($message);
if ($options['make_links'] == '1')
$message = do_clickable($message);
if ($options['smilies_sig'] == '1' && $cur_user['show_img'] != '0')
$message = do_smilies($message);
if ($permissions['sig_bbcode'] == '1')
{
$message = do_bbcode($message);
if ($permissions['sig_img_tag'] == '1')
{
if ($cur_user['show_img'] != '0')
$message = preg_replace('#\[img\](.*?)\[/img\]#s', '', $message);
else
{
if ($cur_user['link_to_new_win'] == '0')
$message = preg_replace('#\[img\](.*?)\[/img\]#s', '<image>', $message);
else
$message = preg_replace('#\[img\](.*?)\[/img\]#s', '<image>', $message);
}
}
}
// Deal with newlines, tabs and multiple spaces
$pattern = array("\n", "\t", ' ', ' ');
$replace = array('
', ' ', ' ', ' ');
$message = str_replace($pattern, $replace, $message);
return $message;
}