From 8ec9bf10682c73f1fe40967a106ccda2a5073ed0 Mon Sep 17 00:00:00 2001 From: slawkens Date: Mon, 22 Dec 2025 19:59:57 +0100 Subject: [PATCH] Fixed [player/guild/house] bb code in forum --- system/src/Forum.php | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/system/src/Forum.php b/system/src/Forum.php index 64b22222..6f0f2607 100644 --- a/system/src/Forum.php +++ b/system/src/Forum.php @@ -231,6 +231,7 @@ class Forum if(!is_int($rows / 2)) { $bgcolor = 'ABED25'; } else { $bgcolor = '23ED25'; } $rows++; $text = str_ireplace('[code]'.$code.'[/code]', 'Code:
'.$code.'
', $text); } + $rows = 0; while(stripos($text, '[quote]') !== false && stripos($text, '[/quote]') !== false ) { @@ -238,11 +239,31 @@ class Forum if(!is_int($rows / 2)) { $bgcolor = 'AAAAAA'; } else { $bgcolor = 'CCCCCC'; } $rows++; $text = str_ireplace('[quote]'.$quote.'[/quote]', '
'.$quote.'
', $text); } - $rows = 0; - while(stripos($text, '[url]') !== false && stripos($text, '[/url]') !== false ) - { - $url = substr($text, stripos($text, '[url]')+5, stripos($text, '[/url]') - stripos($text, '[url]') - 5); - $text = str_ireplace('[url]'.$url.'[/url]', ''.$url.'', $text); + + $tagsToParse = [ + 'url' => function ($str) { + return ''.$str.''; + }, + 'player' => function ($str) { + return generateLink(getPlayerLink($str, false), $str, true); + }, + 'guild' => function ($str) { + return generateLink(getGuildLink($str, false), $str, true); + }, + 'house' => function ($str) { + return generateLink(getHouseLink($str, false), $str, true); + } + ]; + + foreach ($tagsToParse as $tag => $callback) { + while(stripos($text, "[$tag]") !== false && stripos($text, "[/$tag]") !== false + && stripos($text, "[$tag]") < stripos($text, "[/$tag]")) + { + $length = strlen("[$tag]"); + $substr = substr($text, stripos($text, "[$tag]") + $length, stripos($text, "[/$tag]") - stripos($text, "[$tag]") - $length); + + $text = str_ireplace('[' . $tag . ']' . $substr . '[/' . $tag . ']', $callback($substr), $text); + } } $xhtml = false; @@ -252,9 +273,6 @@ class Forum '#\[u\](.*?)\[/u\]#si' => ($xhtml ? '\\1' : '\\1'), '#\[s\](.*?)\[/s\]#si' => ($xhtml ? '\\1' : '\\1'), - '#\[guild\](.*?)\[/guild\]#si' => urldecode(generateLink(getGuildLink('$1', false), '$1', true)), - '#\[house\](.*?)\[/house\]#si' => urldecode(generateLink(getHouseLink('$1', false), '$1', true)), - '#\[player\](.*?)\[/player\]#si' => urldecode(generateLink(getPlayerLink('$1', false), '$1', true)), // TODO: [poll] tag '#\[color=(.*?)\](.*?)\[/color\]#si' => ($xhtml ? '\\2' : '\\2'),