You are here

function select_translation_filter_handler::original_query in Select translation 7

This was the original correlated query, which is currently not used.

File

./select_translation_filter_handler.inc, line 281
Views select translation filter handler.

Class

select_translation_filter_handler

Code

function original_query() {

  // Prepare input.
  $list = array();
  if ($this->value == 'original') {
    $list = array(
      'current',
    );
  }
  elseif ($this->value == 'default') {
    $list = array(
      'current',
      'default',
    );
  }
  elseif (!empty($this->options['priorities'])) {
    $list = explode(',', $this->options['priorities']);
    foreach ($list as $i => $v) {
      $list[$i] = strtolower(trim($v));
    }
  }
  $list[] = 'original';
  foreach ($list as $i => $v) {
    if ($list[$i] == 'current') {
      $list[$i] = '***CURRENT_LANGUAGE***';
    }
    elseif ($list[$i] == 'default') {
      $list[$i] = language_default('language');
    }
  }
  $list = array_unique($list);
  $views_query = $this->query;

  /* @var $views_query views_plugin_query_default */

  // Now build the query. For every option, we need to exclude
  // the previous ones to ensure only one node gets selected in the end.
  $alias = $views_query
    ->ensure_table('node');

  // First include nodes that don't have translations.
  $query = "node.tnid = 0";
  $exclude = array();
  foreach ($list as $v) {
    if ($v == 'original') {

      // Include nodes that are the base of a translation (aka original).
      $add = "{$alias}.nid = {$alias}.tnid";
      $exc = "lmfh_node.tnid = lmfh_node.nid";
    }
    else {

      // Include nodes of specified language.
      $add = "{$alias}.language = '{$v}'";
      $exc = "lmfh_node.language = '{$v}'";
    }
    if (count($exclude)) {
      $add = $add . " AND\n          0 = (SELECT count(lmfh_node.nid)\n                 FROM {node} AS lmfh_node\n                WHERE lmfh_node.tnid = node.tnid AND\n                      ((" . implode(') OR (', $exclude) . ")))";
    }
    $exclude[] = $exc;
    $query = $query . "\n OR ({$add})";
  }
  $views_query
    ->add_where_expression($this->options['group'], $query);
}