You are here

function oa_core_visibility_data in Open Atrium Core 7.2

Utility function to return visibility data for a given node $data['public'] TRUE if node is public, FALSE if private $data['title'] either "Public" or "Private" $data['accessors']['group'] list of groups that can access $data['accessors']['space'] list of spaces that can access $data['accessors']['teams'] list of teams that can access $data['accessors']['users'] list of users that can access

2 calls to oa_core_visibility_data()
oa_widgets_content_visibility_render in modules/oa_widgets/plugins/content_types/oa_widgets_content_visibility.inc
Render callback for the content visibility panel.
oa_widgets_visibility_toolbar_render in modules/oa_widgets/plugins/content_types/oa_widgets_visibility_toolbar.inc
Render callback for the content visibility panel.

File

includes/oa_core.access.inc, line 559
Code for Access Control functions for OpenAtrium spaces

Code

function oa_core_visibility_data($node) {
  $static =& drupal_static(__FUNCTION__, array());
  if (!empty($static[$node->nid])) {
    return $static[$node->nid];
  }
  $data = array();
  $data['published'] = !empty($node->status);
  $data['archived'] = FALSE;
  if (module_exists('flag') && ($flag = flag_get_flag('trash'))) {
    $data['archived'] = $flag
      ->is_flagged($node->nid);
  }
  if ($node->type == OA_SPACE_TYPE || $node->type == OA_GROUP_TYPE) {
    $visibility = field_get_items('node', $node, 'group_access');
    $private = oa_core_get_group_privacy($node);
    $data['public'] = !$private;
    $data['space_public_in_private'] = $private && empty($visibility[0]['value']);
    if (!$data['public'] && ($ids = og_subgroups_parents_load('node', $node->nid)) && !empty($ids['node'])) {
      if ($groups = array_filter(oa_core_get_titles($ids['node'], 'oa_group', 'title', array(
        'link',
      ), TRUE, 0))) {
        $data['accessors']['group'] = array(
          'links' => $groups['links'],
          'label' => t('Groups'),
        );
      }
      if ($spaces = array_filter(oa_core_get_titles($ids['node'], 'oa_space', 'title', array(
        'link',
      ), TRUE, 0))) {
        $data['accessors']['space'] = array(
          'links' => $spaces['links'],
          'label' => t('Spaces'),
        );
      }
    }
  }
  else {
    if ($node->type == OA_SECTION_TYPE) {
      $section_node = $node;
    }
    else {
      $section_reference_field = field_get_items('node', $node, OA_SECTION_FIELD);
      if (isset($section_reference_field[0]['target_id'])) {
        $section_node = node_load($section_reference_field[0]['target_id']);
      }
    }
    if (empty($section_node)) {
      $section_node = $node;
    }
    $space_reference_field = field_get_items('node', $section_node, OA_SPACE_FIELD);
    $space_node = node_load($space_reference_field[0]['target_id']);
    if (empty($space_node)) {
      $data['public'] = TRUE;
    }
    else {
      $space_private = oa_core_get_group_privacy($space_node);
      $visibility = field_get_items('node', $space_node, 'group_access');
      $data['space_public_in_private'] = $space_private && empty($visibility[0]['value']);
      $private = oa_core_get_group_privacy($space_reference_field[0]['target_id']);
      $data['public'] = ($section_node->type != OA_SECTION_TYPE || oa_core_section_is_public($section_node)) && !$private;
      if (!$data['public']) {
        $spaces = _oa_core_build_visibility_links('node', $section_node, OA_GROUP_FIELD, OA_SPACE_TYPE);
        if ($private || !empty($spaces)) {
          $data['accessors']['space'] = array(
            'links' => $spaces + _oa_core_build_visibility_links('node', $section_node, OA_SPACE_FIELD, OA_SPACE_TYPE),
            'label' => t('Spaces'),
          );
        }
        $spaces = _oa_core_build_visibility_links('node', $section_node, OA_GROUP_FIELD, OA_GROUP_TYPE);
        if ($private || !empty($spaces)) {
          $data['accessors']['group'] = array(
            'links' => $spaces + _oa_core_build_visibility_links('node', $section_node, OA_SPACE_FIELD, OA_GROUP_TYPE),
            'label' => t('Groups'),
          );
        }
        $data['accessors']['teams'] = array(
          'links' => _oa_core_build_visibility_links('node', $section_node, OA_TEAM_FIELD),
          'label' => t('Teams'),
        );
        $data['accessors']['users'] = array(
          'links' => _oa_core_build_visibility_links('user', $section_node, OA_USER_FIELD),
          'label' => t('Additional Users'),
        );
      }
    }
  }
  $data['title'] = $data['public'] ? t('Public') : t('Private');
  $static[$node->nid] = $data;
  return $data;
}