You are here

function nodeaccess_userreference_node_access_records in Node access user reference 6.2

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. 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 130

Code

function nodeaccess_userreference_node_access_records($node) {
  $grants = array();
  $content_types = content_types($node->type);
  $info =& $content_types['fields'];
  $priority = variable_get('nodeaccess_userreference_priority', 0);
  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) && !empty($node->{$field}['field_name'])) {
          foreach ((array) $node->{$field}['field_name'] as $userreference) {
            if ($userreference['uid']) {
              $uid =& $userreference['uid'];
              $grants[] = array(
                'realm' => 'nodeaccess_userreference',
                'gid' => $uid,
                'priority' => $priority,
                'grant_view' => $data['view'],
                'grant_update' => $data['update'],
                'grant_delete' => $data['delete'],
              );
            }
          }
        }
      }
    }
  }
  if (!empty($grants)) {

    // Store author grants according to configuration.
    $grant_view = variable_get('nodeaccess_userreference_author_view', 1);
    $grant_update = variable_get('nodeaccess_userreference_author_update', 1);
    $grant_delete = variable_get('nodeaccess_userreference_author_delete', 1);
    if ($grant_view || $grant_update || $grant_delete) {
      $grants[] = array(
        'realm' => 'nodeaccess_userreference_author',
        'gid' => $node->uid,
        'priority' => $priority,
        'grant_view' => $grant_view,
        'grant_update' => $grant_update,
        'grant_delete' => $grant_delete,
      );
    }

    // Allow other modules to change the grants.
    drupal_alter('nodeaccess_userreference_grants', $grants, $node);
    return $grants;
  }
  return NULL;
}