PDA

View Full Version : BBCode condition and cache problem!


Wedframe
08-21-2015, 09:35 AM
Hello! I was create my own bbcode, with check of privileges to use it, according to usergroup-settings in admincp.
At hooks:
bbcode_create
if(!function_exists ('handle_addshare'))
{
function handle_addshare (&$theobj, &$param, &$option)
{
global $vbulletin, $vbphrase, $post;

if (is_member_of($post, unserialize($vbulletin->options['anysharecode_user_groups'])))
{
$find[] = '.';
$find[] = '/';
$replace[] = '\\.';
$replace[] = '\\/';
$find2[] = 'http:';
$find2[] = 'https:';
$find2[] = '//';
$replace2[] = '';

foreach (explode(",", str_replace($find, $replace, $vbulletin->options['anysharecode_allowed_domains'])) as $s)
{
$halfreadyproviderlist .= "$s|";
}
$patternprovider = "/" .substr($halfreadyproviderlist, 0, -1). "/";
$patternsharecode = "/(.+(" .substr($halfreadyproviderlist, 0, -1). ").+?)/U";
$testprovider = preg_match($patternprovider, htmlspecialchars_decode($param), $providertitle);
$testsharecode = preg_match($patternsharecode, htmlspecialchars_decode($param), $resultsharecode);
$wrongsharecode = "<div class=\"wrongmessage\"><div class=\"wrongsharecodeicon\"><img src=\"images/misc/anysharecode/info.png\"></div><div class=\"wrongsharecode\">" .$vbulletin->options['anysharecode_error_text']. "</div></div>";
$anysharecode = "<div class=\"anysharecode\">" . $resultsharecode[0] . "</div><div class=\"providertitle\"><span>" .$vbphrase['anysharecode_provider']. "<b>" . str_replace($find2, $replace2, $providertitle[0]) . "</b></span></div>";
$anysharecodeoption = $anysharecode . "<div class=\"anysharecodeoption\"><span><a href=\"" .$option. "\" rel=\"nofollow\" target=\"_blank\">" .$vbphrase['anysharecode_source_url']. "</a></span></div>";

if($testsharecode == 0)
{
return $wrongsharecode;
}

if($option != '' AND preg_match($patternprovider, $option) == 1)
{
return str_replace('src', 'data-src', $anysharecodeoption);
}

return str_replace('src', 'data-src', $anysharecode);
}

else
{
$anysharecodeusergrouperror = "<div class=\"wrongmessage\"><div class=\"wrongsharecodeicon\"><img src=\"images/misc/anysharecode/info.png\"></div><div class=\"wrongsharecode\">" .$vbulletin->options['anysharecode_user_access_error']. "</div></div>";
return $anysharecodeusergrouperror;
}
}
}
if ($this->is_wysiwyg())
{
$this->unparsed_tags[] = 'addshare';
}

bbcode_fetch_tags
$tag_list['no_option']['addshare'] = array(
'callback' => 'handle_external',
'external_callback' => 'handle_addshare',
'disable_wordwrap' => true,
'strip_empty' => true
);
$tag_list['option']['addshare'] = array(
'callback' => 'handle_external',
'external_callback' => 'handle_addshare',
'disable_wordwrap' => true,
'strip_empty' => true
);

Everythings works fine, untill I was clear cache of messages. After clear of messages, logic of function handle_addshare brokes, and return $anysharecodeusergrouperror, even if post['userid'] was from usergroup that have privileges to use this bbcode.
Now,... if I do edit post, function again work correctly for this post only. But at this time, I have a lot of posts with my bbcode and with wrong cached messages....
What I have to do?
Thanks anyway!

Wedframe
08-25-2015, 10:23 PM
Bump (((((

Wedframe
08-27-2015, 05:03 AM
Well.... thanks for "respons"
I want to share my solution.
As I think, function is_member_of is broken then it used with post cache rebuild from admincp, AND, maybe, if it used with unserialized data of usergroups...
I replace it:
if (is_member_of($post, unserialize($vbulletin->options['anysharecode_user_groups'])))
with:
$alowedgroups = array_intersect(explode(",", $post['membergroupids'] . "," . $post['usergroupid']), unserialize($vbulletin->options['anysharecode_user_groups']));
if (count($alowedgroups > 0))
and now, rebuild post cache, work correct.