You are here

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