1 EntityReferenceSelectionHandlerGeneric.inc public EntityReferenceSelectionHandlerGeneric_comment::entityFieldQueryAlter(SelectQueryInterface $query)

Implements EntityReferenceHandler::entityFieldQueryAlter().

Overrides EntityReferenceSelectionHandlerGeneric::entityFieldQueryAlter

File

core/modules/entityreference/plugins/selection/EntityReferenceSelectionHandlerGeneric.inc, line 436
Generic Entity handler.

Class

EntityReferenceSelectionHandlerGeneric_comment
Override for the Comment entity type.

Code

public function entityFieldQueryAlter(SelectQueryInterface $query) {
  // Adding the 'comment_access' tag is insufficient for comments: need to
  // also know about the concept of 'published' and 'unpublished'.
  if (!user_access('administer comments')) {
    $base_table = $this->ensureBaseTable($query);
    $query->condition("$base_table.status", COMMENT_PUBLISHED);
  }

  // Need to make sure that comments cannot be viewed when the user doesn't
  // have access to the node.
  $tables = $query->getTables();
  $base_table = key($tables);
  $node_alias = $query->innerJoin('node', 'n', '%alias.nid = ' . $base_table . '.nid');
  // Pass the query to the node access control.
  $this->reAlterQuery($query, 'node_access', $node_alias);

  // The comment entity exposes a bundle, but doesn't have a bundle column
  // in the database. Alter the query to fetch the bundle.
  $conditions = &$query->conditions();
  foreach ($conditions as $key => &$condition) {
    if ($key !== '#conjunction' && is_string($condition['field']) && $condition['field'] === $base_table . '.node_type') {
      $condition['field'] = '`' . $node_alias . '`.`type`';
      foreach ($condition['value'] as &$value) {
        if (substr($value, 0, 13) == 'comment_node_') {
          $value = substr($value, 13);
        }
      }
      break;
    }
  }

  // @see EntityReferenceHandler_node::entityFieldQueryAlter()
  if (!user_access('bypass node access') && !count(module_implements('node_grants'))) {
    $query->condition($node_alias . '.status', 1);
  }
}