You are here

function _og_query_og_membership_alter_conditions in Organic groups 7.2

Recursively replace the fields to their aliases in the query's conditions.

See og_query_og_membership_alter().

1 call to _og_query_og_membership_alter_conditions()
og_query_og_membership_alter in ./og.module
Implements hook_query_TAG_alter().

File

./og.module, line 1528
Enable users to create and manage groups with roles and permissions.

Code

function _og_query_og_membership_alter_conditions(&$conditions, $aliases, $base_table_alias, $entity_info) {
  foreach ($conditions as $delta => $values) {
    if (!is_array($values)) {
      continue;
    }

    // Handle conditions in a sub-query.
    if (is_object($values['value'])) {
      _og_query_og_membership_alter_conditions($values['value']
        ->conditions(), $aliases, $base_table_alias, $entity_info);
    }

    // Handle sub-conditions.
    if (is_object($values['field'])) {
      _og_query_og_membership_alter_conditions($values['field']
        ->conditions(), $aliases, $base_table_alias, $entity_info);
      continue;
    }
    if (strpos($values['field'], 'field_data_') !== 0) {
      continue;
    }

    // Explode spaces on the fiels, for handling only the first part in values
    // such as "foo.nid = bar.nid".
    $field_parts = explode(' ', $values['field'], 2);
    list($table, $column) = explode('.', $field_parts[0]);
    if (empty($aliases[$table])) {
      continue;
    }
    $table = 'ogm';

    // Replace entity_id or any other primary id (e.g. nid for the node
    // entity).
    $id_columns = array(
      'entity_id',
      $entity_info['entity keys']['id'],
    );
    if (in_array($column, $id_columns)) {
      $column = 'etid';
    }
    if ($column == 'deleted') {
      unset($conditions[$delta]);
      continue;
    }
    elseif (strpos($column, 'target_id')) {
      $column = 'gid';
    }
    elseif ($column == 'bundle') {

      // Add the bundle of the base entity type.
      $table = $base_table_alias;
      $column = $entity_info['entity keys']['bundle'];
    }
    $conditions[$delta]['field'] = "{$table}.{$column}";

    // Add the second part if it exists.
    if (!empty($field_parts[1])) {
      $conditions[$delta]['field'] .= ' ' . $field_parts[1];
    }
  }
}