Go Back   vb.org Archive > vBulletin 4 Discussion > vB4 General Discussions
FAQ Community Calendar Today's Posts Search

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #1  
Old 09-11-2012, 05:40 AM
stardotstar stardotstar is offline
 
Join Date: May 2008
Location: SYD, AU
Posts: 156
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default myfriends online widget

I've scoured the net for something that at least provides some good code basis for a feature that does seem to have been discussed around the place.

With vBA CMPS we could have a portal block displaying which of our "friends" were online.

I have looked at all the myfriends widget options and they all centre on recent activity or blogs etc.

What I really would like, well what my members are asking for, is a portal block that lists, from the users online list only my friends who are online>

Is this difficult? I have tried a couple of attempts at the widget with code from some of the plugins but I'm getting nowhere.

Can the users online be filtered?

Code:
require_once(DIR . '/includes/functions_bigthree.php'); 

$activeusers = '';
if ((vB::$vbulletin->options['displayloggedin'] == 1 OR vB::$vbulletin->options['displayloggedin'] == 2 OR (vB::$vbulletin->options['displayloggedin'] > 2 AND vB::$vbulletin->userinfo['userid'])) AND !$show['search_engine'])
{
    $datecut = TIMENOW - vB::$vbulletin->options['cookietimeout'];
    $numbervisible = 0;
    $numberregistered = 0;
    $numberguest = 0;
    
    $hook_query_fields = $hook_query_joins = $hook_query_where = '';
    ($hook = vBulletinHook::fetch_hook('forumhome_loggedinuser_query')) ? eval($hook) : false;

    $forumusers = vB::$db->query_read_slave("
        SELECT
            user.username, (user.options & " . vB::$vbulletin->bf_misc_useroptions['invisible'] . ") AS invisible, user.usergroupid, user.lastvisit,
            session.userid, session.inforum, session.lastactivity, session.badlocation,
            IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid
            $hook_query_fields
        FROM " . TABLE_PREFIX . "session AS session
        LEFT JOIN " . TABLE_PREFIX . "user AS user ON(user.userid = session.userid)
        $hook_query_joins
        WHERE session.lastactivity > $datecut
            $hook_query_where
        " . iif(vB::$vbulletin->options['displayloggedin'] == 1 OR vB::$vbulletin->options['displayloggedin'] == 3, "ORDER BY username ASC") . "
    ");

    if (vB::$vbulletin->userinfo['userid'])
    {
        // fakes the user being online for an initial page view of index.php
        vB::$vbulletin->userinfo['joingroupid'] = iif(vB::$vbulletin->userinfo['displaygroupid'], vB::$vbulletin->userinfo['displaygroupid'], vB::$vbulletin->userinfo['usergroupid']);
        $userinfos = array
        (
            vB::$vbulletin->userinfo['userid'] => array
            (
                'userid'            =>& vB::$vbulletin->userinfo['userid'],
                'username'          =>& vB::$vbulletin->userinfo['username'],
                'invisible'         =>& vB::$vbulletin->userinfo['invisible'],
                'inforum'           => 0,
                'lastactivity'      => TIMENOW,
                'lastvisit'         =>& vB::$vbulletin->userinfo['lastvisit'],
                'usergroupid'       =>& vB::$vbulletin->userinfo['usergroupid'],
                'displaygroupid'    =>& vB::$vbulletin->userinfo['displaygroupid'],
                'infractiongroupid' =>& vB::$vbulletin->userinfo['infractiongroupid'],
            )
        );
    }
    else
    {
        $userinfos = array();
    }
    $inforum = array();

    while ($loggedin = vB::$db->fetch_array($forumusers))
    {
        $userid = $loggedin['userid'];
        if (!$userid)
        {    // Guest
            $numberguest++;
            if (!isset($inforum["$loggedin[inforum]"]))
            {
                $inforum["$loggedin[inforum]"] = 0;
            }
            if (!$loggedin['badlocation'])
            {
                $inforum["$loggedin[inforum]"]++;
            }
        }
        else if (empty($userinfos["$userid"]) OR ($userinfos["$userid"]['lastactivity'] < $loggedin['lastactivity']))
        {
            $userinfos["$userid"] = $loggedin;
        }
    }

    if (!vB::$vbulletin->userinfo['userid'] AND $numberguest == 0)
    {
        $numberguest++;
    }

    $activeusers = array();
    foreach ($userinfos AS $userid => $loggedin)
    {
        $numberregistered++;
        if ($userid != vB::$vbulletin->userinfo['userid'] AND !$loggedin['badlocation'])
        {
            if (!isset($inforum["$loggedin[inforum]"]))
            {
                $inforum["$loggedin[inforum]"] = 0;
            }
            $inforum["$loggedin[inforum]"]++;
        }

        fetch_musername($loggedin);
        $loggedin['comma'] = ',';

        if (fetch_online_status($loggedin))
        {
            $numbervisible++;
            $activeusers[$numbervisible] = $loggedin;
        }
    }
    
    // Last element
    if ($numbervisible) 
    {
        $activeusers[$numbervisible]['comma'] = '';
    }

    // memory saving
    unset($userinfos, $loggedin);

    vB::$db->free_result($forumusers);

    $totalonline = $numberregistered + $numberguest;
    $numberinvisible = $numberregistered - $numbervisible;
     
    vB::$vbulletin->datastore->fetch(array('maxloggedin'));
    if (vB::$vbulletin->maxloggedin === NULL)
    {
        vB::$vbulletin->maxloggedin = array();
    }
    if (intval(vB::$vbulletin->maxloggedin['maxonline']) <= $totalonline)
    {
        vB::$vbulletin->maxloggedin['maxonline'] = $totalonline;
        vB::$vbulletin->maxloggedin['maxonlinedate'] = TIMENOW;
        build_datastore('maxloggedin', serialize(vB::$vbulletin->maxloggedin), 1);
    }

    $recordusers = vb_number_format(vB::$vbulletin->maxloggedin['maxonline']);
    $recorddate = vbdate(vB::$vbulletin->options['dateformat'], vB::$vbulletin->maxloggedin['maxonlinedate'], true);
    $recordtime = vbdate(vB::$vbulletin->options['timeformat'], vB::$vbulletin->maxloggedin['maxonlinedate']);

    $show['loggedinusers'] = true;
    
    $statsarray = array('onlinestats' => $onlinestats,
    'totalonline' => $totalonline,
    'numberregistered' => $numberregistered,
    'numberguest' => $numberguest,
    'show'    => $show,
    'recordusers'  => $recordusers,
    'recorddate'  => $recorddate,
    'recordtime'  => $recordtime,
    'activeusers'=> $activeusers,
    );
    
    vB_Template::preRegister('vbcms_widget_execphp_activeusers', $statsarray); 
}
Very interested in any ideas or suggestions on what would be a very well adopted CMS widget if it could be built.

W
Reply With Quote
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 08:14 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.05569 seconds
  • Memory Usage 2,296KB
  • Queries Executed 12 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)bbcode_code
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (2)post_thanks_box
  • (2)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (2)post_thanks_postbit_info
  • (2)postbit
  • (2)postbit_onlinestatus
  • (2)postbit_wrapper
  • (1)showthread_list
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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_threadedmode.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids_threaded
  • showthread_threaded_construct_link
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • 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
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete