function social_group_flexible_group_block_access in Open Social 8.8
Same name and namespace in other branches
- 8.9 modules/social_features/social_group/modules/social_group_flexible_group/social_group_flexible_group.module \social_group_flexible_group_block_access()
- 8.6 modules/social_features/social_group/modules/social_group_flexible_group/social_group_flexible_group.module \social_group_flexible_group_block_access()
- 8.7 modules/social_features/social_group/modules/social_group_flexible_group/social_group_flexible_group.module \social_group_flexible_group_block_access()
- 10.3.x modules/social_features/social_group/modules/social_group_flexible_group/social_group_flexible_group.module \social_group_flexible_group_block_access()
- 10.0.x modules/social_features/social_group/modules/social_group_flexible_group/social_group_flexible_group.module \social_group_flexible_group_block_access()
- 10.1.x modules/social_features/social_group/modules/social_group_flexible_group/social_group_flexible_group.module \social_group_flexible_group_block_access()
- 10.2.x modules/social_features/social_group/modules/social_group_flexible_group/social_group_flexible_group.module \social_group_flexible_group_block_access()
Implements hook_block_access().
File
- modules/
social_features/ social_group/ modules/ social_group_flexible_group/ social_group_flexible_group.module, line 360 - The Social Group Flexible Group module.
Code
function social_group_flexible_group_block_access(Block $block, $operation, AccountInterface $account) {
// This is a list of the blocks that this function cares about, if we're being
// called for a different block we exit early.
$block_id = $block
->getPluginId();
$managed_blocks = [
'views_exposed_filter_block:newest_groups-page_all_groups',
'views_block:groups-block_user_groups',
'views_block:upcoming_events-upcoming_events_group',
'views_block:latest_topics-group_topics_block',
'views_block:group_managers-block_list_managers',
];
// We don't care for other blocks.
if (!in_array($block_id, $managed_blocks, FALSE)) {
return AccessResult::neutral();
}
$group = _social_group_get_current_group();
// We don't care about other group types in here.
if ($group && $group
->getGroupType()
->id() === 'flexible_group') {
// Only when users cant join directly, add the managers block
// so they know who to contact.
if ($operation === 'view' && social_group_flexible_group_can_join_directly($group) && $block
->getPluginId() === 'views_block:group_managers-block_list_managers') {
return AccessResult::forbidden();
}
// All users with permissions can see the rest.
if ($account
->hasPermission('manage all groups')) {
return AccessResult::neutral();
}
if (!$group
->getMember($account) && !social_group_flexible_group_community_enabled($group) && !social_group_flexible_group_public_enabled($group)) {
// If it is flexible and the current user is not an member of this group,
// and content visibility is not public and also not community
// hide it.
$forbidden_blocks = [
'views_block:upcoming_events-upcoming_events_group',
'views_block:latest_topics-group_topics_block',
];
foreach ($forbidden_blocks as $forbidden_block) {
if ($operation === 'view' && $block
->getPluginId() === $forbidden_block) {
return AccessResult::forbidden();
}
}
}
}
return AccessResult::neutral();
}