function lingotek_bulk_grid_filter_popup_options in Lingotek Translation 7.7
Same name and namespace in other branches
- 7.6 lingotek.bulk_grid.inc \lingotek_bulk_grid_filter_popup_options()
1 call to lingotek_bulk_grid_filter_popup_options()
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);
}
}