function views_related_content_views_query_alter in Views Related Content 7
Implements hook_views_query_alter()
File
- views/
views_related_content.views.inc, line 48
Code
function views_related_content_views_query_alter(&$view, &$query) {
$curNode = menu_get_object();
if ($curNode && $curNode->nid) {
$count_where = 1;
if (isset($view->display_handler->handlers['filter']['related_author']->definition) && isset($curNode)) {
$query
->add_where($count_where, 'node.uid', $curNode->uid, '=');
if (isset($curNode->nid)) {
$query
->add_where(1, 'node.nid', $curNode->nid, '<>');
}
}
if (isset($view->display_handler->handlers['filter']['related_content_type']->definition) && isset($curNode)) {
$query
->add_where($count_where, 'node.type', $curNode->type, '=');
if (isset($curNode->nid)) {
$query
->add_where(1, 'node.nid', $curNode->nid, '<>');
}
}
if (isset($view->display_handler->handlers['filter']['related_term']->value) && isset($curNode)) {
$listTaxonomySelected = $view->display_handler->handlers['filter']['related_term']->value;
$join = new views_join();
$join->table = 'taxonomy_index';
$join->left_table = 'node';
$join->field = 'nid';
$join->left_field = 'nid';
$join->type = 'LEFT';
$query->table_queue['taxonomy_index'] = array(
'alias' => 'taxonomy_index',
'table' => 'taxonomy_index',
'relationship' => 'node',
'join' => $join,
);
$join = new views_join();
$join->table = 'taxonomy_term_data';
$join->left_table = 'taxonomy_index';
$join->field = 'tid';
$join->left_field = 'tid';
$join->type = 'LEFT';
$query->table_queue['taxonomy_term_data'] = array(
'alias' => 'taxonomy_term_data',
'table' => 'taxonomy_term_data',
'relationship' => 'taxonomy_index',
'join' => $join,
);
$curNodeTaxonomy = array();
foreach ($curNode as $key => $value) {
if (isset($value['und'][0]['taxonomy_term'])) {
$curNodeTaxonomy[$key] = array();
foreach ($value['und'] as $key_item => $value_item) {
$curNodeTaxonomy[$key][] = $value_item['taxonomy_term']->name;
}
}
}
$count_where++;
foreach ($listTaxonomySelected as $key => $value) {
if (array_key_exists('field_' . $key, $curNodeTaxonomy)) {
# find taxonomy
foreach ($curNodeTaxonomy['field_' . $key] as $key_cur_taxonomy => $value_term) {
# search term in current taxonomy
$query
->add_where($count_where, 'taxonomy_term_data.name', $value_term, '=');
}
# Set conditon type where
$query->where[$count_where]['type'] = 'OR';
$count_where++;
}
}
$query
->add_field('node', 'nid', 'node_nid', array(
'function' => 'groupby',
));
$query
->add_groupby('node.nid');
if (isset($curNode->nid)) {
$query
->add_where(1, 'node.nid', $curNode->nid, '<>');
}
}
if (isset($view->display_handler->handlers['filter']['related_field_reference']->value) && isset($curNode)) {
$listFieldReference = $view->display_handler->handlers['filter']['related_field_reference']->value;
# List node entity reference of field
$list_ref_cur_node = array();
foreach ($listFieldReference as $key => $value) {
if (isset($curNode->{$value}['und'])) {
foreach ($curNode->{$value}['und'] as $key_node => $value_node) {
$list_ref_cur_node[$value][] = $value_node['target_id'];
}
}
}
foreach ($listFieldReference as $key => $value) {
$count_where++;
$query
->add_where($count_where, 'field_data_' . $key . '.' . $key . '_target_id', $list_ref_cur_node[$value], 'IN');
$query->where[$count_where]['type'] = 'OR';
}
}
}
}