Thread: Major Additions - Point Market System 3.1x
View Single Post
  #513  
Old 05-12-2010, 10:56 PM
kurios kurios is offline
 
Join Date: Nov 2006
Posts: 4
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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] != 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)
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.02591 seconds
  • Memory Usage 1,898KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (4)bbcode_php
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete