You are here

function nodeaccess_userreference_node_access_records in Node access user reference 7.3

Same name and namespace in other branches
  1. 5.2 nodeaccess_userreference.module \nodeaccess_userreference_node_access_records()
  2. 5 nodeaccess_userreference.module \nodeaccess_userreference_node_access_records()
  3. 6.3 nodeaccess_userreference.module \nodeaccess_userreference_node_access_records()
  4. 6 nodeaccess_userreference.module \nodeaccess_userreference_node_access_records()
  5. 6.2 nodeaccess_userreference.module \nodeaccess_userreference_node_access_records()
  6. 7.2 nodeaccess_userreference.module \nodeaccess_userreference_node_access_records()

Implements hook_node_access_records().

File

./nodeaccess_userreference.module, line 326
The Node access user reference module.

Code

function nodeaccess_userreference_node_access_records($node) {
  $grants = array();
  $field_data = nodeaccess_userreference_field_settings($node->type);
  if (!empty($field_data)) {
    foreach ($field_data as $field_name => &$data) {
      if (!empty($data) && (empty($data['views']['view']) || nodeaccess_userreference_node_in_field_view($data, array(
        $node->nid,
      )))) {
        if (!isset($data['priority'])) {
          $data['priority'] = 0;
        }
        if (!empty($node->status) || !empty($data['referenced_published'])) {

          // Add referenced user grants.
          $items = field_get_items('node', $node, $field_name);
          if (!empty($items)) {
            foreach ($items as &$user_reference) {
              $uid = NULL;

              // user_reference
              if (isset($user_reference['uid'])) {
                $uid = $user_reference['uid'];
              }
              elseif (isset($user_reference['target_id'])) {
                $uid = $user_reference['target_id'];
              }
              if ($uid) {
                nodeaccess_userreference_add_grant($grants, 'nodeaccess_userreference', $uid, $data['priority'], $data['referenced']);
              }
            }
          }
        }
        if (!empty($data['unused']) && isset($data['referenced'])) {

          // Add a dummy grant for user 1 to block other users' access.
          nodeaccess_userreference_add_grant($grants, 'nodeaccess_userreference', 1, $data['priority'], $data['referenced']);
        }

        // If there are grants set, also add the author and view-all grants.
        // These will fire for each non-empty nodeaccess_userreference field,
        // but redundant calls will be correctly handled by the helper function:
        // nodeaccess_userreference_add_grant().
        if (!empty($grants)) {
          if (!empty($data['author']) && (!empty($node->status) || !empty($data['author_published']))) {

            // Add author grants.
            if ($node->uid > 0) {
              nodeaccess_userreference_add_grant($grants, 'nodeaccess_userreference_author', $node->uid, $data['priority'], $data['author']);
            }
          }
          if (!empty($data['all']) && (!empty($node->status) || !empty($data['all_published']))) {

            // Add all grants.
            nodeaccess_userreference_add_grant($grants, 'nodeaccess_userreference_all', 1, $data['priority'], $data['all']);
          }
        }
      }
    }
  }
  return $grants;
}