Added a fix for smillies_pass function by Ashe

See this topic for details:
http://www.phpbb.com/phpBB/viewtopic.php?p=166905
Yeilds a very large performance increase on long topics


git-svn-id: file:///svn/phpbb/branches/phpBB-2_0_0@2660 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
James Atkinson 2002-07-11 18:33:29 +00:00
parent 9d5befd6da
commit 0f712ff771

View file

@ -736,42 +736,36 @@ function bbcode_array_pop(&$stack)
// Smilies code ... would this be better tagged on to the end of bbcode.php? // Smilies code ... would this be better tagged on to the end of bbcode.php?
// Probably so and I'll move it before B2 // Probably so and I'll move it before B2
// //
function smilies_pass($message) function smilies_pass($message)
{ {
global $db, $board_config; static $orig, $repl;
static $smilies;
if( empty($smilies) ) if (!isset($orig))
{ {
$sql = "SELECT code, smile_url global $db, $board_config;
FROM " . SMILIES_TABLE; $orig = $repl = array();
if( !$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Couldn't obtain smilies data", "", __LINE__, __FILE__, $sql);
}
if( !$db->sql_numrows($result) ) $sql = 'SELECT code, smile_url FROM ' . SMILIES_TABLE;
{ if( !$result = $db->sql_query($sql) )
return $message; {
} message_die(GENERAL_ERROR, "Couldn't obtain smilies data", "", __LINE__, __FILE__, $sql);
}
$smilies = $db->sql_fetchrowset($result);
$smilies = $db->sql_fetchrowset($result); usort($smilies, 'smiley_sort');
} for($i = 0; $i < count($smilies); $i++)
{
$orig[] = "/(?<=.\W|\W.|^\W)" . phpbb_preg_quote($smilies[$i]['code'], "/") . "(?=.\W|\W.|\W$)/";
$repl[] = '<img src="'. $board_config['smilies_path'] . '/' . $smilies[$i]['smile_url'] . '" alt="' . $smilies[$i]['smile_url'] . '" border="0" />';
}
}
usort($smilies, 'smiley_sort'); if (count($orig))
for($i = 0; $i < count($smilies); $i++) {
{ $message = preg_replace($orig, $repl, ' ' . $message . ' ');
$orig[] = "/(?<=.\\W|\\W.|^\\W)" . phpbb_preg_quote($smilies[$i]['code'], "/") . "(?=.\\W|\\W.|\\W$)/"; $message = substr($message, 1, -1);
$repl[] = '<img src="'. $board_config['smilies_path'] . '/' . $smilies[$i]['smile_url'] . '" alt="' . $smilies[$i]['smile_url'] . '" border="0" />'; }
} return $message;
if( $i > 0 )
{
$message = preg_replace($orig, $repl, ' ' . $message . ' ');
$message = substr($message, 1, -1);
}
return $message;
} }
function smiley_sort($a, $b) function smiley_sort($a, $b)