Quantcast
Channel: MyBB Community Forums - Tutorials
Viewing all articles
Browse latest Browse all 690

Usergroup Page

$
0
0
Hello,

Before I start I want to say I did not create this I am just sharing it, the creator is Sazze. Well thats what he said but i'll take his word for it for now. LOL. Ever wanted to have a page to display your sites user groups without you adding them to the page by yourself? Well now you can! Once set up all you need to do is add the user group IDs and that's it. The page will display the group name, description of the group, group image, and how much members are in it. 

Step 1. Create a new file in your forums root called usergroups.php and paste this code into it :
Code:
<?php

define( 'IN_MYBB', TRUE );
define( 'NAME', basename( __FILE__ ) );
define( 'THIS_SCRIPT', NAME );
define( 'GUEST', 'Please login or register in order to see this page.' );
require_once __DIR__ . '/global.php';

add_breadcrumb( 'Usergroups', NAME );

if( !$mybb->user['uid'] )
{
    error( GUEST );
}

$allowed_groups = array( 'x','x','x'); // Please group IDs here

if( !$mybb->input['request'] )
{
    foreach ( $allowed_groups as &$groupid )
    {
        $groupcache = $cache->read( 'usergroups' );

        $query = $db->write_query( "
            SELECT *
            FROM ".TABLE_PREFIX."usergroups
            WHERE `gid`='".(int)$groupid."'
            ORDER BY gid
        " );

        if( isset( $query->num_rows ) )
        {
            while( $groups = $db->fetch_array( $query ) )
            {
                /* Fetch group leaders */
                $leaders_array = array();
                $leader_query = $db->write_query("
                    SELECT u.username, u.uid, u.usergroup, u.displaygroup, l.gid
                    FROM ".TABLE_PREFIX."groupleaders l
                    INNER JOIN ".TABLE_PREFIX."users u ON (u.uid=l.uid)
                    WHERE `gid`='".(int)$groupid."'
                ");

                while( $leader = $db->fetch_array( $leader_query ) )
                {                    
                    $leaders = build_profile_link( format_name( $leader['username'], ( !empty( $leader['displaygroup'] ) ? $leader['displaygroup'] : $leader['usergroup'] ) ), $leader['uid'] );
                    array_push( $leaders_array, $leaders );
                }

                $usergroups['groupleaders'] = rtrim( implode( ', ', $leaders_array ), ', ' );

                if( !$usergroups['groupleaders'] )
                {
                    $usergroups['groupleaders'] = 'None';
                }

                $usergroups['groupname'] = htmlspecialchars_uni( $groupcache[$groups['gid']]['title'] );
                $usergroups['groupdesc'] = htmlspecialchars_uni( $groupcache[$groups['gid']]['description'] );
                $usergroups['userbar'] = '<img src="'.$groupcache[$groups['gid']]['image'].'" />';
                $usergroups['gid'] = intval( $groupcache[$groups['gid']]['gid'] );
                $usergroups['members'] = intval( countmembers( $groupid ) );

                eval( "\$groups_row .= \"".$templates->get( 'usergroups_row' )."\";" );
            }
        }
        else
        {
            $groups_row = '<td class="trow1" align="left">No usergroups was found.</td>';
        }
    }
}

eval( "\$usergroups_page = \"".$templates->get( 'usergroups' )."\";" );
output_page( $usergroups_page );


/* Count members function */
function countmembers( $groupid )
{
    global $db, $plugins;

    $query = $db->query("
        SELECT g.gid, COUNT(u.uid) AS users
        FROM ".TABLE_PREFIX."users u
        LEFT JOIN ".TABLE_PREFIX."usergroups g ON (g.gid=u.usergroup)
        GROUP BY g.gid
    ");

    while( $groupcount = $db->fetch_array( $query ) )
    {
        $primaryusers[$groupcount['gid']] = $groupcount['users'];
    }

    switch( $db->type )
    {
        case "pgsql":
        case "sqlite":
            $query = $db->query("
                SELECT g.gid, COUNT(u.uid) AS users
                FROM ".TABLE_PREFIX."users u
                LEFT JOIN ".TABLE_PREFIX."usergroups g ON (','|| u.additionalgroups|| ',' LIKE '%,'|| g.gid|| ',%')
                WHERE g.gid != '0' AND g.gid is not NULL GROUP BY g.gid
            ");

        break;
        default:
            $query = $db->query("
                SELECT g.gid, COUNT(u.uid) AS users
                FROM ".TABLE_PREFIX."users u
                LEFT JOIN ".TABLE_PREFIX."usergroups g ON (CONCAT(',', u.additionalgroups, ',') LIKE CONCAT('%,', g.gid, ',%'))
                WHERE g.gid != '0' AND g.gid is not NULL GROUP BY g.gid
            ");
        }

        while( $groupcount = $db->fetch_array( $query ) )
        {
            $secondaryusers[$groupcount['gid']] = $groupcount['users'];
        }
                
        $numusers = $primaryusers[$groupid];
        $numusers += $secondaryusers[$groupid];
                
        if( !$numusers )
        {
            $numusers = "0";
        }

        return $numusers;
    }
?>

Now find $allowed_groups = array( 'x','x','x'); (Line 16) change the x to the user group ID you want to be displayed and remember you can add more if needed.

Step 2. Now go to

Admin CP -> Templates & Styles -> Templates -> Global Templates create a new template called usergroups and paste this code into it :
Code:
<html>
    <head>
        <title>
            {$mybb->settings['bbname']} - Usergroups
        </title>
        {$headerinclude}
    </head>
    <body>
        <style>
            .joingroup {
                color: #fff;
                text-shadow: none;
                padding: 5px 8px;
                border-radius: 2px;
                text-align: center;
                margin-left: 5px;
                background: rgba(0,0,0,0.2);
            }
            .joingroup:hover {
                cursor: pointer;
                background: rgb(167, 70, 70);
            }
        </style>
        {$header}
        <table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder">
            <tr>
                <td class="thead" colspan="5"><strong>Usergroups</strong></td>
            </tr>
            <tr>
                <td class="trow1">{$groups_row}</td>
            </tr>
        </table>
        {$footer}
    </body>
</html>

Step 3. Now go back and create a new template called usergroups_row and paste this code into it :
Code:
<div style="width: 48%; min-height: 150px; float: left; border: 1px #333 solid; margin: 4px; padding: 2px;">
    <table width="100%" cellspacing="0" cellpadding="5" border="0">
        <tr>
            <td width="75%">
                <span style="color: #fff; font-size: 15px;">{$usergroups['groupname']}</span><br />
                </br>{$usergroups['groupdesc']}<br />
        Members: {$usergroups['members']}
        </td>
    <td width="25%" align="right" valign="top">
        {$usergroups['userbar']}
    </td>
    </tr>
</table>
</div>

Note: You might need to change the color to match with your theme to do this just find <span style="color: #fff; font-size: 15px;"> and change the #fff to the color code you want.

That's it your done now go to http://yoursite.com/usergroups.php and enjoy!

Screenshot:

[Image: Untitled.png]

Viewing all articles
Browse latest Browse all 690

Trending Articles