First of all, awesome mod! We use it on a fairly large forum (500k users, nearly 2M posts), and it's given our users something new to play with.
With that said; I've had to modify a few things to make it more usable on bigger boards, and more happy with custom postbit_legacy users.
The first thing we changed was in the following plugin (Point Market: Postbit Adjustments):
PHP Code:
if ($post['market_username_subscript']) {
$post[username] = "<s>$post[username]</s>";
}
if ($post['market_username_color']) {
$post[username] = "<span style='color: #$post[market_username_color]'>$post[username]</span>";
}
if ($post['market_username_glow']) {
$post[username] = "<span style='font-weight: bold;text-shadow: 0 0 4px #$post[market_ct_glow]'>$post[username]</span>";
}
if ($post['market_usertitle_subscript']) {
$post[usertitle] = "<s>$post[usertitle]</s>";
}
if ($post['market_ct_color'] AND $post[customtitle] == 1) {
$post[usertitle] = "<span style='color: #$post[market_ct_color]'>$post[usertitle]</span>";
}
if ($post['market_ct_color'] AND $post[customtitle] != 1) {
$new_usertitle = "<span style='color: #$post[market_ct_color]'>$post[usertitle]</span>";
}
if ($post['market_ct_glow'] AND $post[customtitle] == 1) {
$post[usertitle] = "<span style='font-weight: bold;text-shadow: 0 0 4px #$post[market_ct_glow]'>$post[usertitle]</span>";
}
if ($post['market_ct_glow'] AND $post[customtitle] != 1) {
$new_usertitle = "<span style='font-weight: bold;text-shadow: 0 0 4px #$post[market_ct_glow]'>$post[usertitle]</span>";
}
if ($post['market_ct_glow'] AND $post[customtitle] != 1 AND $post[market_ct_color]) {
$new_usertitle = "<span style='font-weight: bold;text-shadow: 0 0 4px #$post[market_ct_glow]'><span style='color: #$post[market_ct_color]'>$post[usertitle]</span></span>";
}
if ($new_usertitle != "") {
$post[usertitle] = $new_usertitle;
}
That simply makes sure that we only set the user's title, and not append it to the username. However, doing that caused the title to not always display correctly. The fix was to move the hook location to postbit_display_complete.
It also allows us to add far more color options in the template for item_buy (and our custom template for username colors) without having to also modify the CSS files to include the glows.
Further down in that hook, is a potentially server-intensive set of queries that was causing certain threads to have query counts in the 400s which is unacceptable.
The potentially bad code is as follows:
PHP Code:
$gift_tran= $vbulletin->db->query_read("SELECT reason, userid, affecteduser, gift_id, gift_customid from " . TABLE_PREFIX . "market_transactions where `affecteduser`='$post[userid]' AND (gift_id > 0 OR gift_customid > 0)");
while ($gift= $vbulletin->db->fetch_array($gift_tran)) {
if ($gift[gift_customid]) {
$gift[gift_id] = $gift[gift_customid];
}
$gift_info = $vbulletin->db->fetch_array($vbulletin->db->query_read("SELECT icon_small, name from " . TABLE_PREFIX . "market_gifts where `giftid`='$gift[gift_id]'"));
if ($gift[userid] != $gift[affecteduser]) {
$grab_name = $vbulletin->db->fetch_array($vbulletin->db->query_read("SELECT username from " . TABLE_PREFIX . "user where `userid`='$gift[userid]'"));
} else {
$grab_name = "";
}
$reason = ". Reason: ".stripslashes($gift[reason])."";
$templater = vB_Template::create('market_gifts_bit');
$templater->register('icon_big', $gift_info[icon_small]);
$templater->register('name', $gift_info[name]);
$templater->register('givenby', $grab_name[username]);
$templater->register('gift_reason', $reason);
$market_gifts_bit .= $templater->render();
}
This has the potential of 1 + (giftcount*2) queries, which can cause quite a few unnecessary queries.
Since we don't display who gave the gift, and why, in the postbit (we leave that to the member profiles to cut down on page sizes) I could change the above code to the following, to drop the query count down to 1 per post, which is acceptable.
PHP Code:
$gift_tran= $vbulletin->db->query_read("SELECT ".TABLE_PREFIX."market_gifts.icon_small AS icon_small,
".TABLE_PREFIX."market_gifts.name AS name
FROM ".TABLE_PREFIX."market_transactions, ".TABLE_PREFIX."market_gifts
WHERE ".TABLE_PREFIX."market_transactions.affecteduser=$post[userid]
AND (".TABLE_PREFIX."market_transactions.gift_id > 0 OR ".TABLE_PREFIX."market_transactions.gift_customid > 0)
AND (".TABLE_PREFIX."market_gifts.giftid=".TABLE_PREFIX."market_transactions.gift_id
OR ".TABLE_PREFIX."market_gifts.giftid=".TABLE_PREFIX."market_transactions.gift_customid)
");
while ($gift= $vbulletin->db->fetch_array($gift_tran))
{
$templater = vB_Template::create('market_gifts_bit');
$templater->register('icon_big', $gift[icon_small]);
$templater->register('name', $gift[name]);
$market_gifts_bit .= $templater->render();
}
I'm no SQL guru, but 1 query vs potentially hundreds is a vast improvement.
Other changes include actually setting the message to use the [COLOR][B][I] BBCode tags, instead of wrapping them in HTML for display. (Which messes with quotes, and other tags inside the posts) I simply modified your plugin code for that to the following:
PHP Code:
if($vbulletin->GPC['wysiwyg'])
{
if ($vbulletin->userinfo['market_post_bold']) {
$vbulletin->GPC['message'] = "<b>".$vbulletin->GPC['message']."</b>";
}
if ($vbulletin->userinfo['market_post_italics']) {
$vbulletin->GPC['message'] = "<i>".$vbulletin->GPC['message']."</i>";
}
if ($vbulletin->userinfo['market_post_fontface']) {
$vbulletin->GPC['message'] = "<span style='font-family: ".$vbulletin->userinfo['market_post_fontface'].";'>".$vbulletin->GPC['message']."</span>";
}
if ($vbulletin->userinfo['market_post_color']) {
$vbulletin->GPC['message'] = "<span style='color: #".$vbulletin->userinfo['market_post_color']."'>".$vbulletin->GPC['message']."</span>";
}
}
else
{
if ($vbulletin->userinfo['market_post_bold']) {
$vbulletin->GPC['message'] = "[B]".$vbulletin->GPC[message]."[/B]";
}
if ($vbulletin->userinfo['market_post_italics']) {
$vbulletin->GPC['message'] = "[I]".$vbulletin->GPC['message']."[/I]";
}
if ($vbulletin->userinfo['market_post_fontface']) {
$vbulletin->GPC['message'] = "[FONT='".$vbulletin->userinfo[market_post_fontface]."']".$vbulletin->GPC['message']."[/FONT]";
}
if ($vbulletin->userinfo['market_post_color']) {
$vbulletin->GPC['message'] = "[COLOR=#".$vbulletin->userinfo[market_post_color]."]".$vbulletin->GPC['message']."[/COLOR]";
}
}
And added that to a hook on newreply_post_start, which effectively wraps it properly, instead of wrapping it for display. (It sends the formatted message to the DB, where the colors can be edited later by the user if they want)
We also had to change the way username/title coloring is handled, since we want certain colors unavailable for usernames, but still available for titles/posts.
There are various other things we've changed, but overall, great mod!
I'd personally like to see a bit easier-to-use item adding system, so I don't have to manually insert things into the DB and add the code later. (An eval() type system would be awesome)