You are here

function nodeaccess_userreference_node_in_field_view in Node access user reference 7.3

Determine if any node falls into the view configured in the field settings.

Parameters

$data: The node access user reference settings for the field.

$nids: Array of node ids.

Return value

Boolean indicating if the entity is in the view defined by the field config.

2 calls to nodeaccess_userreference_node_in_field_view()
nodeaccess_userreference_node_access in ./nodeaccess_userreference.module
Implements hook_node_access().
nodeaccess_userreference_node_access_records in ./nodeaccess_userreference.module
Implements hook_node_access_records().

File

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

Code

function nodeaccess_userreference_node_in_field_view($data, $nids) {
  $view_id = $data['views']['view'];
  list($view_name, $view_display) = explode(':', $view_id);
  if ($view = views_get_view($view_name)) {

    // We add a display, and let it derive from the 'default' display.
    $display = $view
      ->add_display('nodeaccess_userreference_views_plugin_display');
    $view
      ->set_display($display);

    // Get the options from the user supplied display.
    if ($view_display != 'default' && isset($view->display[$view_display]->display_options)) {
      $view->display[$display]->display_options = $view->display[$view_display]->display_options;
    }

    // TODO from merlinofchaos on IRC : arguments using summary view can defeat the style setting.
    // We might also need to check if there's an argument, and set *its* style_plugin as well.
    $view->display_handler
      ->set_option('style_plugin', 'nodeaccess_userreference_views_plugin_style');
    $view->display_handler
      ->set_option('row_plugin', 'fields');

    // Additional options to let node_reference_display::query()
    // narrow the results.
    $options = array(
      'table' => 'node',
      'field_id' => 'nid',
      'ids' => $nids,
    );
    $view->display_handler
      ->set_option('nodeaccess_userreference_options', $options);

    // TODO : for consistency, a fair amount of what's below
    // should be moved to node_reference_display
    // Limit to a single result.
    $view->display_handler
      ->set_option('items_per_page', 1);

    // Get arguments for the view.
    if (!empty($data['views']['view_args'])) {
      $view_args = array_map('trim', explode(',', $data['views']['view']));
    }
    else {
      $view_args = array();
    }

    // Make sure the query is not cached
    $view->is_cacheable = FALSE;

    // Get the results.
    $result = $view
      ->execute_display($display, $view_args);
  }
  else {
    $result = FALSE;
  }
  return $result;
}