vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vBulletin 4.x Add-ons (https://vborg.vbsupport.ru/forumdisplay.php?f=245)
-   -   Social Group and Album Enhancements - Private Social Groups (https://vborg.vbsupport.ru/showthread.php?t=266892)

grey_goose 07-14-2011 10:00 PM

Private Social Groups
 
1 Attachment(s)
Some may not have noticed, but vb4 no longer supports restricting Moderators from viewing Join-To-View/Invite Only content.

This modification does the following:
- Restricts Moderator access
- Hides the display of Social Groups set to Invite Only/Join-To-View (similar to this)

These are file edits. Back up your original files.

Included in the zip are changed files which can be used as replacements; for those that prefer to make the changes manually, here they are.

1) In /group.php
Find (~ line365):
Code:

// If a group id is specified, but the group doesn't exist, error out
if ($vbulletin->GPC['groupid'])
{
    $group = fetch_socialgroupinfo($vbulletin->GPC['groupid'], true);

    if (empty($group))
    {
        standard_error(fetch_error('invalidid', $vbphrase['social_group'], $vbulletin->options['contactuslink']));
    }

Replace with:
Code:

// If a group id is specified, but the group doesn't exist, error out
if ($vbulletin->GPC['groupid'])
{
    $group = fetch_socialgroupinfo($vbulletin->GPC['groupid'], true);

    if (empty($group))
    {
        standard_error(fetch_error('invalidid', $vbphrase['social_group'], $vbulletin->options['contactuslink']));
    }

    $group = prepare_socialgroup($group);

    // Disallow everything except joining if you can't view a
    // group's content.
    if(
        !$group['canviewcontent']
        AND $group['type'] == 'inviteonly'
        AND $_REQUEST['do'] != 'join'
        AND $_REQUEST['do'] != 'dojoin'
    )
        print_no_permission();
}

2) In /group.php
Find (~ line 653):
Code:

                $group = prepare_socialgroup($group);

                $group['canjoin'] = can_join_group($group);
                $group['canleave'] = can_leave_group($group);

                $show['pending_link'] = (fetch_socialgroup_modperm('caninvitemoderatemembers', $group) AND $group['moderatedmembers'] > 0);
                $show['lastpostinfo'] = ($group['lastposterid']);

                ($hook = vBulletinHook::fetch_hook('group_list_groupbit')) ? eval($hook) : false;

                $templater = vB_Template::create('socialgroups_grouplist_bit');
                    $templater->register('group', $group);
                    $templater->register('lastpostalt', $lastpostalt);
                $grouplist .= $templater->render();

            }
        }

Replace with:
Code:

                // Only show groups if we can view the
                // content or this is an invitation
                $group = prepare_socialgroup($group);
                if(
                    $group['canviewcontent']
                    OR $group['type'] != 'inviteonly'
                    OR $_REQUEST['do'] == 'invitations'
                )
                {
                    $group['canjoin'] = can_join_group($group);
                    $group['canleave'] = can_leave_group($group);

                    $show['pending_link'] = (fetch_socialgroup_modperm('caninvitemoderatemembers', $group) AND $group['moderatedmembers'] > 0);
                    $show['lastpostinfo'] = ($group['lastposterid']);

                    ($hook = vBulletinHook::fetch_hook('group_list_groupbit')) ? eval($hook) : false;

                    $templater = vB_Template::create('socialgroups_grouplist_bit');
                    $templater->register('group', $group);
                    $templater->register('lastpostalt', $lastpostalt);
                    $grouplist .= $templater->render();
                }
            }
        }

3) In /includes/functions_socialgroup.php
Find (~ line 699):
Code:

            ) // The above means that you dont have to join to view
            OR $group['membertype'] == 'member'
            // Or can moderate comments
            OR can_moderate(0, 'canmoderategroupmessages')
            OR can_moderate(0, 'canremovegroupmessages')
            OR can_moderate(0, 'candeletegroupmessages')
            OR fetch_socialgroup_perm('canalwayspostmessage')
            OR fetch_socialgroup_perm('canalwascreatediscussion')
        )
    );

Replace with:
Code:

            ) // The above means that you dont have to join to view
            OR $group['membertype'] == 'member'
        )
    );

4) In /includes/functions_socialgroup.php
Find (~ line 1829):
Code:

    $groups = array();
    while ($group = $vbulletin->db->fetch_array($result))
    {
        $group = prepare_socialgroup($group, true);

        $group['delete_group'] = can_delete_group($group);
        $group['edit_group'] = can_edit_group($group);
        $group['leave_group'] = can_leave_group($group);
        $group['group_options'] = ($group['delete_group'] OR $group['edit_group'] OR $group['leave_group']);

        $groups[] = $group;
    }

Replace with:
Code:

    $groups = array();
    while ($group = $vbulletin->db->fetch_array($result))
    {
        // Only include groups whose content can be viewed.
        $group = prepare_socialgroup($group, true);
        if($group['canviewcontent'] OR $group['type'] != 'inviteonly')
        {
            $group['delete_group'] = can_delete_group($group);
            $group['edit_group'] = can_edit_group($group);
            $group['leave_group'] = can_leave_group($group);
            $group['group_options'] = ($group['delete_group'] OR $group['edit_group'] OR $group['leave_group']);

            $groups[] = $group;
        }
    }

5) In /includes/functions_socialgroup.php
Find (~ line 1893):
Code:

      return $groups;
}

Replace with:
Code:

      // Only include groups whose content can be viewed.
    $visible_groups = array();
    while($groups)
    {
        $group = prepare_socialgroup(array_shift($groups));
        if($group['canviewcontent'] OR $group['type'] != 'inviteonly')
            $visible_groups[] = $group;
    }

    return $visible_groups;
}

6) In /includes/functions_socialgroup.php
Find (~ line 1967):
Code:

      $groups = array();
    while ($group = $vbulletin->db->fetch_array($result))
    {
        $group['delete_group'] = can_delete_group($group);
        $group['edit_group'] = can_edit_group($group);
        $group['leave_group'] = can_leave_group($group);
        $group['group_options'] = ($group['delete_group'] OR $group['edit_group'] OR $group['leave_group']);

        $groups[] = $group;
    }

Replace with:
Code:

      $groups = array();
    while ($group = $vbulletin->db->fetch_array($result))
    {
        // Only show groups we can view
          $group = prepare_socialgroup($group);
        if($group['canviewcontent'] OR $group['type'] != 'inviteonly')
        {
            $group['delete_group'] = can_delete_group($group);
            $group['edit_group'] = can_edit_group($group);
            $group['leave_group'] = can_leave_group($group);
            $group['group_options'] = ($group['delete_group'] OR $group['edit_group'] OR $group['leave_group']);

            $groups[] = $group;
        }
    }
    $vbulletin->db->free_result($result);

    return $groups;
}

Note: This is marked "Unsupported" as I am not the original author; this was done by a member of my site in his spare time who is allowing the modification to be shared. This works. He simply has no time for troubleshooting.

HotnHoly 07-22-2011 07:55 AM

Thank you for this solution !

grey_goose 07-22-2011 03:10 PM

Very welcome, glad someone else could use it!

smirkley 09-07-2015 06:04 PM

Just installed. Works like a champ.

Trying to figure out how to apply filter to the Activity Stream now.

KevinL 09-26-2016 09:03 PM

Quote:

Originally Posted by smirkley (Post 2554497)
Just installed. Works like a champ.

Trying to figure out how to apply filter to the Activity Stream now.

Ever figure out how to do that?

grey_goose 09-26-2016 09:19 PM

Probably just need to add the viewable permission to the stream SQL query. Unfortunately I don't use that so I can't be much help there.

maybe something like...

WHERE group.canviewcontent != 'No'
OR group.type != 'inviteonly'

KevinL 09-26-2016 09:50 PM

Thank you I will look into that.

Would the profile page edits be similar to what is listed here also:

https://vborg.vbsupport.ru/showthread.php?t=184715

Also trying remove the group posts from the profile activity stream. When viewing someones profile you are able to see the private groups post. Would that be similar to your last reply?

Thank you for the help!

grey_goose 09-27-2016 05:34 PM

Semi-sorta. That link will still let moderators see it (refer to can_moderate in WHERE syntax) whereas my goal was to hide them completely.

And, yes, adjusting the query would remove the private groups post.

IggyP 09-15-2017 03:58 PM

Quote:

Originally Posted by grey_goose (Post 2576326)
Semi-sorta. That link will still let moderators see it (refer to can_moderate in WHERE syntax) whereas my goal was to hide them completely.

And, yes, adjusting the query would remove the private groups post.

was this ever fully fixed/resolved?

just realized about it...kinda surprising not even vb4 got around to fixing permission issues dam..


All times are GMT. The time now is 02:34 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01187 seconds
  • Memory Usage 1,758KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (12)bbcode_code_printable
  • (2)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (9)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete