You are here

function lingotek_bulk_grid_filter_popup_options in Lingotek Translation 7.7

Same name and namespace in other branches
  1. 7.6 lingotek.bulk_grid.inc \lingotek_bulk_grid_filter_popup_options()
1 call to lingotek_bulk_grid_filter_popup_options()
lingotek_bulk_grid_filter_query in ./lingotek.bulk_grid.inc

File

./lingotek.bulk_grid.inc, line 2146

Code

function lingotek_bulk_grid_filter_popup_options($query, $filters, $eid, $info, $entity_type) {

  //  Entity ID
  if (isset($filters['nid']) && $filters['nid'] != '') {
    $query
      ->condition('' . $eid . '', $filters['nid']);
  }
  lingotek_filter_by_document_id($query, $filters);
  $array_fix = array(
    'upload_status',
    'content_type',
    'auto_upload',
    'auto_download',
    'crowdsourcing',
    'url_alias',
    'translation_status',
    'locale_progress_percent',
    'marked_status',
  );
  foreach ($array_fix as $value) {
    if (isset($filters[$value]) && !is_array($filters[$value])) {
      $filters[$value] = array(
        $filters[$value],
      );
    }
  }

  // Source Language
  if (isset($filters['source_language']) && $filters['source_language'] != 'all') {
    $query
      ->condition('n.' . $info['entity keys']['language'], $filters['source_language']);
  }

  // Upload Status
  if (isset($filters['upload_status']) && !in_array('all', $filters['upload_status'])) {

    //never uploaded case
    if (in_array("never", $filters['upload_status'])) {
      $not_uploaded_query = db_select('lingotek_entity_metadata', 'lingo_em');
      $not_uploaded_query
        ->distinct();
      $not_uploaded_query
        ->fields('lingo_em', array(
        'entity_id',
      ));
      $not_uploaded_query
        ->condition('entity_key', 'last_uploaded');
      $query
        ->havingCondition('entity_id_key', $not_uploaded_query, 'NOT IN');
    }
    elseif (in_array("disassoc", $filters['upload_status'])) {
      $disassoc_query = db_select('lingotek_entity_metadata', 'lingo_em');
      $disassoc_query
        ->distinct();
      $disassoc_query
        ->fields('lingo_em', array(
        'entity_id',
      ));
      $disassoc_query
        ->condition('entity_key', 'last_uploaded');
      $query
        ->havingCondition('entity_id_key', $disassoc_query, 'IN');
      $query
        ->havingCondition('upload_status', 'UNTRACKED');
    }
    elseif (in_array("uploaded", $filters['upload_status'])) {
      $uploaded_query = db_select('lingotek_entity_metadata', 'lingo_em');
      $uploaded_query
        ->distinct();
      $uploaded_query
        ->fields('lingo_em', array(
        'entity_id',
      ));
      $uploaded_query
        ->condition('entity_key', 'document_id');
      $query
        ->havingCondition('entity_id_key', $uploaded_query, 'IN');
    }
    elseif (in_array("upload_failed", $filters['upload_status'])) {
      $upload_failed_query = db_select('lingotek_entity_metadata', 'lingo_em');
      $upload_failed_query
        ->distinct();
      $upload_failed_query
        ->fields('lingo_em', array(
        'entity_id',
      ));
      $upload_failed_query
        ->condition('entity_key', 'invalid_xml');
      $query
        ->havingCondition('entity_id_key', $upload_failed_query, 'IN');
      $query
        ->havingCondition('invalid_xml', LingotekSync::INVALID_XML_PRESENT);
    }
    else {
      $query
        ->havingCondition('upload_status', $filters['upload_status'], 'IN');
    }
  }

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

    // Marked
    if (in_array("marked", $filters['marked_status'])) {
      $marked_query = db_select('lingotek_entity_metadata', 'lingo_em');
      $marked_query
        ->distinct();
      $marked_query
        ->fields('lingo_em', array(
        'entity_id',
      ));
      $marked_query
        ->condition('entity_key', 'marked');
      $marked_query
        ->condition('value', LingotekSync::MARKED);
      $query
        ->havingCondition('entity_id_key', $marked_query, 'IN');
    }
    elseif (in_array("unmarked", $filters['marked_status'])) {
      $un_marked_query = db_select('lingotek_entity_metadata', 'lingo_em');
      $un_marked_query
        ->distinct();
      $un_marked_query
        ->fields('lingo_em', array(
        'entity_id',
      ));
      $un_marked_query
        ->condition('entity_key', 'marked');
      $un_marked_query
        ->condition('value', LingotekSync::MARKED);
      $query
        ->havingCondition('entity_id_key', $un_marked_query, 'NOT IN');
    }
  }

  //  Content Type
  if (isset($filters['content_type']) && !in_array('all', $filters['content_type'])) {

    // Special-case handling of taxonomy_term pseudo-entities
    if ($entity_type == 'taxonomy_term') {
      $query
        ->condition('tv.machine_name', $filters['content_type'], 'IN');
    }
    elseif ($entity_type == 'comment') {
      $or = db_or();
      foreach ($filters['content_type'] as $type_alias) {
        $content_type = substr($type_alias, strlen('comment_node_'));
        $or
          ->condition('nn.type', $content_type);
      }
      $query
        ->condition($or);
    }
    else {
      $query
        ->condition('n.' . $info['entity keys']['bundle'], $filters['content_type'], 'IN');
    }
  }
  if (isset($filters['profile']) && !in_array('all', $filters['profile'])) {
    $profiled_entity_ids = array(
      -1,
    );
    foreach ($filters['profile'] as $p) {
      $profile_obj = LingotekProfile::loadById($p);
      $entities = $profile_obj
        ->getEntities($entity_type);
      $profiled_entity_ids = array_merge($profiled_entity_ids, array_keys($entities));
    }
    foreach ($profiled_entity_ids as $p) {
      $profiled_entity_ids[] = $p['id'];
    }
    $query
      ->condition('n.' . $info['entity keys']['id'], $profiled_entity_ids, 'IN');

    //$or = lingotek_profile_condition($base_table, 'n', 'lingo_profile', $filters['profile']);

    //$query->condition($or);
  }
}