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];
}
}
}