View Single Post
  #1  
Old 09-24-2007, 12:55 PM
Hugo Firth Hugo Firth is offline
 
Join Date: Aug 2007
Posts: 4
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default vB Getting Last Poster (member.php)

Hi guys,

I'm trying to replicate the member.php?find=lastposter&f=<number> function into my own piece of code, I've dug into the code in member.php and took the relavant code out and modified it according to my needs.

The function now reads as follows:

PHP Code:
function memberForumLastPoster($fid)
{
    global 
$vbulletin$db$vbphrase;

    
$forumperms fetch_permissions($fid);
    if (!(
$forumperms $vbulletin->bf_ugp_forumpermissions['canview']))
    {
        
print_no_permission();
    }

    if (
$vbulletin->userinfo['userid'] AND in_coventry($vbulletin->userinfo['userid'], true))
    {
        
$tachyjoin "LEFT JOIN " TABLE_PREFIX "tachythreadpost AS tachythreadpost ON " .
            
"(tachythreadpost.threadid = thread.threadid AND tachythreadpost.userid = " $vbulletin->userinfo['userid'] . ')';
    }
    else
    {
        
$tachyjoin '';
    }

    require_once(
DIR '/includes/functions_misc.php');
    
$forumslist $fid ',' fetch_child_forums($fid);

    require_once(
DIR '/includes/functions_bigthree.php');
    
// this isn't including moderator checks, because the last post checks don't either
    
if ($coventry fetch_coventry('string')) // takes self into account
    
{
        
$globalignore_post "AND post.userid NOT IN ($coventry)";
        
$globalignore_thread "AND thread.postuserid NOT IN ($coventry)";
    }
    else
    {
        
$globalignore_post '';
        
$globalignore_thread '';
    }

    
cache_ordered_forums(1);

    
$datecutoff $vbulletin->forumcache[$fid]['lastpost'] - 30;

    
$thread $db->query_first_slave("
        SELECT thread.threadid
            " 
. ($tachyjoin ', IF(tachythreadpost.lastpost > thread.lastpost, tachythreadpost.lastpost, thread.lastpost) AS lastpost' '') . "
        FROM " 
TABLE_PREFIX "thread AS thread
        
$tachyjoin
        WHERE thread.forumid IN (
$forumslist)
            AND thread.visible = 1
            AND thread.sticky IN (0,1)
            AND thread.open <> 10
            " 
. (!$tachyjoin "AND lastpost > $datecutoff'') . "
            
$globalignore_thread
        ORDER BY lastpost DESC
        LIMIT 1
    "
);

    if (!
$thread)
    {
        eval(
standard_error(fetch_error('invalidid'$vbphrase['user'], $vbulletin->options['contactuslink'])));
    }

    
$getuserid $db->query_first_slave("
        SELECT post.username
        FROM " 
TABLE_PREFIX "post AS post
        WHERE threadid = 
$thread[threadid]
            AND visible = 1
            
$globalignore_post
        ORDER BY dateline DESC
        LIMIT 1
    "
);
    return 
$getuserid;

The only problem I have with this function is that now when I return $getuserid and echo $getuserid['username'], the same username is constantly being echoed out once it reaches the last category, such as below:

Quote:
profile-James.html (for fid: 32)
profile-Punisher12.html (for fid: 49)
profile-James.html (for fid: 50)
profile-Yun.html (for fid: 46)
profile-Samuel.html (for fid: 37)
profile-Samuel.html (for fid: 29)
profile-Samuel.html (for fid: 42)
profile-Samuel.html (for fid: 33)
profile-Samuel.html (for fid: 40)
profile-Samuel.html (for fid: 34)
profile-Samuel.html (for fid: 35)
profile-Samuel.html (for fid: 36)
Obviously the last posters for the Fids after profile-Yun.html are not Samuel . But when I view the URL directly at member.php?find=lastposter&fid=37, it reflects to the correct profile.

Can anyone tell me why this is happening?

Thanks!


edit:
I've done some through debugging, the flawed code seems to be:
PHP Code:
$forumslist $fid ',' fetch_child_forums($fid); 
Overwritting $forumslist with just $fid seems to make it work, but I'm afraid that it may backfire in the future. Also, why does fetch_child_forums() work in member.php and not in my function? .
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01223 seconds
  • Memory Usage 1,812KB
  • 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
  • (2)bbcode_php
  • (1)bbcode_quote
  • (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