You are here

function _views_add_vocabulary in Views (for Drupal 7) 5

1 call to _views_add_vocabulary()
views_handler_filter_voc in modules/views_taxonomy.inc

File

modules/views_taxonomy.inc, line 545

Code

function _views_add_vocabulary($op, $value, $depth, &$query) {
  $value = array_map('intval', $value);
  if ($op == 'OR' || $op == 'NOR') {
    $num = $query
      ->add_table('term_node');
    $tablename1 = $query
      ->get_table_name('term_node', $num);
    $joininfo = array(
      'left' => array(
        'table' => $tablename1,
        'field' => 'tid',
        'alias' => '',
      ),
      'right' => array(
        'field' => 'tid',
      ),
    );
    $joininfo['extra'] = array(
      'vid' => $value,
    );
    $num = $query
      ->add_table('term_data', false, 1, $joininfo);
    $tablename2 = $query
      ->get_table_name('term_data', $num);
    if ($op == 'OR') {
      $query
        ->add_where("{$tablename1}.tid IS NOT NULL");
      $query
        ->add_where("{$tablename2}.tid IS NOT NULL");
    }
    else {
      $query
        ->add_where("({$tablename1}.tid IS NULL AND {$tablename2}.tid IS NULL)");
    }
  }
  else {
    foreach ($value as $vid) {

      // For every vocabulary we have to match, add a views_get_title table
      $num = $query
        ->add_table('term_node');
      $tablename = $query
        ->get_table_name('term_node', $num);
      $num = $query
        ->add_table('term_data', false, 1, array(
        'left' => array(
          'table' => $tablename,
          'field' => 'tid',
          'alias' => '',
        ),
        'right' => array(
          'field' => 'tid',
        ),
      ));
      $tablename = $query
        ->get_table_name('term_data', $num);
      $query
        ->add_where("{$tablename}.vid = '{$vid}'");
    }
  }
}