You are here

function nodeaccess_userreference_node_access_records in Node access user reference 6.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 nodeaccess_userreference.module \nodeaccess_userreference_node_access_records()
  4. 6.2 nodeaccess_userreference.module \nodeaccess_userreference_node_access_records()
  5. 7.3 nodeaccess_userreference.module \nodeaccess_userreference_node_access_records()
  6. 7.2 nodeaccess_userreference.module \nodeaccess_userreference_node_access_records()

Implementation of hook_node_access_records().

File

./nodeaccess_userreference.module, line 139

Code

function nodeaccess_userreference_node_access_records($node) {
  $grants = array();
  $content_types = content_types($node->type);
  $info =& $content_types['fields'];
  if (is_array($info)) {
    foreach ($info as $field) {
      if ($field['type'] == 'userreference') {
        $data = nodeaccess_userreference_field_settings($field['type_name'], $field['field_name']);
        if (!empty($data)) {
          if (!empty($node->{$field}['field_name'])) {

            // Add referenced user grants.
            foreach ((array) $node->{$field}['field_name'] as $userreference) {
              if ($userreference['uid']) {
                nodeaccess_userreference_add_grant($grants, 'nodeaccess_userreference', $userreference['uid'], $data['priority'], $data['referenced']);
              }
            }
          }
          if ($data['unused']) {

            // 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)) {

            // Add author grants.
            if ($node->uid > 0) {
              nodeaccess_userreference_add_grant($grants, 'nodeaccess_userreference_author', $node->uid, $data['priority'], $data['author']);
            }

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