You are here

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

Implements hook_node_access_records().

File

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

Code

function nodeaccess_userreference_node_access_records($node) {
  $grants = array();
  $bundles = field_info_instances('node');
  $priority = variable_get('nodeaccess_userreference_priority', 0);
  foreach ($bundles as $fields) {
    foreach ($fields as $field) {
      if ($field['widget']['module'] == 'user_reference') {
        $data = nodeaccess_userreference_field_settings($field['field_name']);
        if (!empty($data) && !empty($node->{$field}['field_name'])) {
          foreach ((array) $node->{$field}['field_name'] as $language) {
            foreach ($language 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,
      );
    }
    return $grants;
  }
  return NULL;
}