You are here

function lingotek_config_add_query_filters in Lingotek Translation 7.7

Same name and namespace in other branches
  1. 7.6 lingotek.config.inc \lingotek_config_add_query_filters()
2 calls to lingotek_config_add_query_filters()
lingotek_config_get_rows in ./lingotek.config.inc
lingotek_row_status_query in ./lingotek.config.inc

File

./lingotek.config.inc, line 228
Config grid form elements

Code

function lingotek_config_add_query_filters($query) {
  $entity_type = $_SESSION['grid_entity_type'];
  if (!isset($_SESSION['grid_filters'][$entity_type])) {
    return;
  }
  $filters = $_SESSION['grid_filters'][$entity_type];
  if (isset($filters['search']) && strlen($filters['search'])) {
    $query
      ->where("LOWER(CONVERT(source USING utf8)) LIKE :source_string", array(
      ':source_string' => '%' . strtolower($filters['search'] . '%'),
    ));
  }
  if (isset($filters['textgroup'])) {
    if ($filters['textgroup'] == 'interface') {
      $query
        ->condition('textgroup', 'default');
    }
    elseif ($filters['textgroup'] == 'menu') {
      $query
        ->condition('textgroup', 'menu');
    }
    elseif ($filters['textgroup'] == 'taxonomy') {
      $query
        ->condition('textgroup', 'taxonomy');
    }
    elseif ($filters['textgroup'] == 'blocks') {
      $query
        ->condition('textgroup', 'blocks');
    }
    elseif ($filters['textgroup'] == 'field') {
      $query
        ->condition('textgroup', 'field');
    }
    elseif ($filters['textgroup'] == 'views') {
      $query
        ->condition('textgroup', 'views');
    }
    elseif ($filters['textgroup'] == 'webform') {
      $query
        ->condition('textgroup', 'webform');
    }
    elseif ($filters['textgroup'] == 'misc') {
      $query
        ->condition('textgroup', array(
        'default',
        'menu',
        'taxonomy',
        'blocks',
        'field',
        'views',
      ), 'NOT IN');
    }
  }

  // Module Filter
  if (isset($filters['location']) && $filters['location'] != '') {
    $query
      ->condition('s.location', '%' . $filters['location'] . '%', 'LIKE');
  }
  lingotek_filter_by_document_id($query, $filters);

  // Upload Status
  if (isset($filters['upload_status']) && $filters['upload_status'] != 'all') {
    $query
      ->leftJoin('locales_target', 'lt', 'lt.lid = s.lid');
    if ($filters['upload_status'] == 'never') {
      $query
        ->isNull('lt.lid');
    }
    elseif ($filters['upload_status'] == LingotekSync::STATUS_EDITED) {

      // The edited status won't show in lingotek_config_metadata table so we need to check the i18n_status (1 == edited).
      $query
        ->condition('lt.i18n_status', '1');
    }
    else {
      $query
        ->havingCondition('upload_status', $filters['upload_status']);

      // Do not include items with a source marked as edited in locales_target (1 == edited).
      $query
        ->condition('lt.i18n_status', '0');
    }
  }

  // Marked status
  if (isset($filters['marked_status']) && $filters['marked_status'] != 'all') {

    // Marked
    if ($filters['marked_status'] == 'marked') {
      $marked_query = db_select('lingotek_config_metadata', 'lcm');
      $marked_query
        ->distinct();
      $marked_query
        ->fields('lcm', array(
        'value',
      ));
      $marked_query
        ->condition('config_key', 'marked');
      $query
        ->condition('s.lid', $marked_query, 'IN');
    }
    elseif ($filters['marked_status'] == 'unmarked') {
      $marked_query = db_select('lingotek_config_metadata', 'lcm');
      $marked_query
        ->distinct();
      $marked_query
        ->fields('lcm', array(
        'value',
      ));
      $marked_query
        ->condition('config_key', 'marked');
      $query
        ->condition('s.lid', $marked_query, 'NOT IN');
    }
  }

  // Entity ID
  if (isset($filters['lid']) && $filters['lid'] != '') {
    $query
      ->condition('s.lid', $filters['lid']);
  }

  // Config set ID
  if (isset($filters['config_set_id']) && $filters['config_set_id'] != '') {
    $config_set_query = db_select('lingotek_config_map', 'lcm')
      ->fields('lcm', array(
      'lid',
    ))
      ->condition('set_id', $filters['config_set_id']);
    $query
      ->condition('s.lid', $config_set_query, 'IN');
  }
}