Viva,
Detectei o comportamento abaixo indicado aquando a utilização do Drupal Commons v6.x-1.6.
Ao seleccionar os filtros "Node: Type" e "Organic Groups: Group Types" numa view que tenha uma relação com "Organic groups: Group node" o query gerado pela preview contém algo como:
...
WHERE ((node.type in ('event')) AND (node.status <> 0) AND (node.type in ('og_group_a', 'og_group_b')))
...
A 3ª condição não devia ser algo diferente de node.type, uma vez que esta entra em "conflito" com a 1ª?
Depois de dar uma vista de olhos no código fiquei com a sensação que este seria o comportamento expectável (depois de ler os comentários abaixo), mas não encontrei nenhuma razão explícita que o justifique.
project/profiles/drupal_commons/modules/contrib/og/modules/og_views/og_views.views.inc:276-284
<?php
// Pseudofield which actually operates on node.type
$data['og']['type_groups'] = array(
'title' => t('Group types'), // The item it appears as on the UI,
'help' => t('The type of a group (for example, "blog entry", "forum post", "story", etc).'),
'real field' => 'type',
'filter' => array(
'handler' => 'og_views_handler_filter_og_type',
),
);
?>
project/profiles/drupal_commons/modules/contrib/og/modules/og_views/includes/og_views_handler_filter_og_type.inc:16-28
<?php
// This is a copy of views_handler_filter_in_operator::query
// We force the table to be 'node' instead of 'og'. There might be cleaner ways to do this.
function query() {
if (empty($this->value)) {
return;
}
$table = $this->query->ensure_table('node');
$placeholder = !empty($this->definition['numeric']) ? '%d' : "'%s'";
$replace = array_fill(0, sizeof($this->value), $placeholder);
$in = ' (' . implode(", ", $replace) . ')';
$this->query->add_where($this->options['group'], "$table.$this->real_field " . $this->operator . $in, $this->value);
}
?>
Já alguem se deparou com a mesma situação, ou, que me saiba explicar o porquê de no código estarem a forçar que a tabela utilizada seja a node?
Se substituir 'node' por 'node_og_ancestry' (disponível devido à relação com "Organic groups: Group node") a view funciona como seria de esperar.
Obrigado pela atenção, qualquer comentário sobre este assunto será bem vindo :)