View source
<?php
class EntityReference_SelectionHandler_Translation_Generic extends EntityReference_SelectionHandler_Generic {
public static function getInstance($field, $instance = NULL, $entity_type = NULL, $entity = NULL) {
$target_entity_type = $field['settings']['target_type'];
$entity_info = entity_get_info($target_entity_type);
if (empty($entity_info['base table'])) {
return EntityReference_SelectionHandler_Broken::getInstance($field, $instance);
}
if (class_exists($class_name = 'EntityReference_SelectionHandler_Translation_Generic_' . $target_entity_type)) {
return new $class_name($field, $instance, $entity_type, $entity);
}
else {
return new EntityReference_SelectionHandler_Generic($field, $instance, $entity_type, $entity);
}
}
}
class EntityReference_SelectionHandler_Translation_Generic_node extends EntityReference_SelectionHandler_Generic_node {
public function entityFieldQueryAlter(SelectQueryInterface $query) {
parent::entityFieldQueryAlter($query);
$base_table = $this
->ensureBaseTable($query);
$entity_info = entity_get_info($this->field['settings']['target_type']);
if ($this->field['settings']['handler_settings']['filter']['language'] == 1 && $entity_info['translation']['locale'] == TRUE) {
$node_language = i18n_node_i18n_context_language();
if (isset($node_language->language) && !is_null($node_language->language)) {
$query
->condition("{$base_table}.language", $node_language->language);
}
}
else {
global $language;
$query
->condition("{$base_table}.language", $language->language);
}
}
public static function settingsForm($field, $instance) {
$form = parent::settingsForm($field, $instance);
$form['filter']['language'] = array(
'#type' => 'select',
'#title' => t('Language handling'),
'#options' => array(
0 => t('Select all nodes matching with the interface language'),
1 => t('Select only nodes matching the parent\'s language'),
),
'#default_value' => isset($field['settings']['handler_settings']['filter']['language']) ? $field['settings']['handler_settings']['filter']['language'] : 0,
);
return $form;
}
}
class EntityReference_SelectionHandler_Translation_Generic_taxonomy_term extends EntityReference_SelectionHandler_Generic_taxonomy_term {
public function entityFieldQueryAlter(SelectQueryInterface $query) {
parent::entityFieldQueryAlter($query);
$base_table = $this
->ensureBaseTable($query);
$entity_info = entity_get_info($this->field['settings']['target_type']);
if ($this->field['settings']['handler_settings']['filter']['language'] == 1 && $entity_info['translation']['locale'] == TRUE) {
$term_language = i18n_taxonomy_i18n_context_language();
if (isset($term_language->language) && !is_null($term_language->language)) {
$query
->condition("{$base_table}.language", $term_language->language);
}
}
else {
global $language;
$query
->condition("{$base_table}.language", $language->language);
}
}
public static function settingsForm($field, $instance) {
$form = parent::settingsForm($field, $instance);
$form['filter']['language'] = array(
'#type' => 'select',
'#title' => t('Language handling'),
'#options' => array(
0 => t('Select all terms matching with the interface language'),
1 => t('Select only terms matching the parent\'s language'),
),
'#default_value' => isset($field['settings']['handler_settings']['filter']['language']) ? $field['settings']['handler_settings']['filter']['language'] : 0,
);
return $form;
}
}