bbcode_bitfield = $bitfield;
$this->bbcode_cache_init();
}
}
function bbcode_second_pass(&$message, $bbcode_uid = '', $bbcode_bitfield = '')
{
if ($bbcode_uid)
{
$this->bbcode_uid = $bbcode_uid;
}
if ($bbcode_bitfield)
{
$this->bbcode_bitfield = $bbcode_bitfield;
}
elseif (!$this->bbcode_bitfield)
{
return $message;
}
if (empty($this->bbcode_cache))
{
$this->bbcode_cache_init();
}
$str = array('search' => array(), 'replace' => array());
$preg = array('search' => array(), 'replace' => array());
$bitlen = strlen(decbin($this->bbcode_bitfield));
for ($bbcode_id = 0; $bbcode_id < $bitlen; ++$bbcode_id)
{
if ($this->bbcode_bitfield & pow(2, $bbcode_id))
{
foreach ($this->bbcode_cache[$bbcode_id] as $type => $array)
{
foreach ($array as $search => $replace)
{
${$type}['search'][] = str_replace('$uid', $this->bbcode_uid, $search);
${$type}['replace'][] = $replace;
}
}
}
}
if (count($str['search']))
{
$message = str_replace($str['search'], $str['replace'], $message);
}
if (count($preg['search']))
{
$message = preg_replace($preg['search'], $preg['replace'], $message);
}
return $message;
}
//
// bbcode_cache_init()
//
// requires: $this->bbcode_bitfield
// sets: $this->bbcode_cache with bbcode templates needed for bbcode_bitfield
//
function bbcode_cache_init()
{
$sql = '';
$bbcode_ids = array();
$bitlen = strlen(decbin($this->bbcode_bitfield));
for ($bbcode_id = 0; $bbcode_id < $bitlen; ++$bbcode_id)
{
if (isset($this->bbcode_cache[$bbcode_id]) || !($this->bbcode_bitfield & pow(2, $bbcode_id)))
{
continue;
}
$bbcode_ids[] = $bbcode_id;
// WARNING: hardcoded values. it assumes that bbcodes with bbcode_id > 11 are user-defined bbcodes
if ($bbcode_id > 11)
{
$sql .= $bbcode_id . ',';
}
}
/*
if ($sql)
{
global $db;
$rowset = array();
$sql = 'SELECT bbcode_id, second_pass_regexp, second_pass_replacement
FROM ' . BBCODES_TABLE . '
WHERE bbcode_id IN (' . substr($sql, 0, -1) . ')';
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$rowset[$row['bbcode_id']] = $row;
}
$db->sql_freeresult($result);
}
*/
foreach ($bbcode_ids as $bbcode_id)
{
switch ($bbcode_id)
{
case 0:
$this->bbcode_cache[$bbcode_id] = array(
'str' => array(
'[quote:$uid]' => $this->bbcode_tpl('quote_open'),
'[/quote:$uid]' => $this->bbcode_tpl('quote_close')
),
'preg' => array(
'#\[quote="(.*?)":$uid\]#' => $this->bbcode_tpl('quote_username_open')
)
);
break;
case 1:
$this->bbcode_cache[$bbcode_id] = array(
'str' => array(
'[b:$uid]' => '',
'[/b:$uid]' => ''
)
);
break;
case 2:
$this->bbcode_cache[$bbcode_id] = array(
'str' => array(
'[i:$uid]' => '',
'[/i:$uid]' => ''
)
);
break;
case 3:
$this->bbcode_cache[$bbcode_id] = array(
'preg' => array(
'#\[url:$uid\](.*?)\[/url:$uid\]#s' => '\1',
'#\[url=(.*?):$uid\](.*?)\[/url:$uid\]#s' => '\2'
)
);
break;
case 4:
$this->bbcode_cache[$bbcode_id] = array(
'preg' => array(
'#\[img:$uid\](.*?)\[/img:$uid\]#s' => ''
)
);
break;
case 5:
$this->bbcode_cache[$bbcode_id] = array(
'preg' => array(
'#\[size=(.*?):$uid\](.*?)\[/size:$uid\]#s' => '\2'
)
);
break;
case 6:
$this->bbcode_cache[$bbcode_id] = array(
'preg' => array(
'#\[color=(.*?):$uid\](.*?)\[/color:$uid\]#s' => '\2'
)
);
break;
case 7:
$this->bbcode_cache[$bbcode_id] = array(
'str' => array(
'[u:$uid]' => '',
'[/u:$uid]' => ''
)
);
break;
case 8:
$this->bbcode_cache[$bbcode_id] = array(
'preg' => array(
'#\[code(?:=([a-z]+))?:$uid\](.*?)\[/code:$uid\]#ise' => "\$this->bbcode_second_pass_code('\\1', '\\2')"
)
);
break;
case 9:
$this->bbcode_cache[$bbcode_id] = array(
'str' => array(
'[list:$uid]' => '