$value pairs passed into
* tmgmt_entity_get_translatable_entities() as the second parameter.
*
* @return array
* Array of entities.
*/
public function getEntitiesTranslationData($type, $property_conditions = array()) {
$return_value = array();
$entities = tmgmt_entity_get_translatable_entities($type, $property_conditions, TRUE);
$entity_info = entity_get_info($type);
$bundles = tmgmt_entity_get_translatable_bundles($type);
// For retrieved entities add translation specific data.
foreach ($entities as $entity) {
list($entity_id, , $bundle) = entity_extract_ids($type, $entity);
$entity_uri = entity_uri($type, $entity);
// This occurs on user entity type.
if (empty($entity_id)) {
continue;
}
/**
* @var EntityTranslationDefaultHandler $handler
*/
$handler = entity_translation_get_handler($type, $entity);
// Get existing translations and current job items for the entity
// to determine translation statuses
$translations = $handler->getTranslations();
$source_lang = entity_language($type, $entity);
$current_job_items = tmgmt_job_item_load_latest('entity', $type, $entity_id, $source_lang);
// Load basic entity data.
$return_value[$entity_id] = array(
'entity_type' => $type,
'entity_id' => $entity_id,
'entity_label' => entity_label($type, $entity),
'entity_uri' => $entity_uri['path'],
);
if (count($bundles) > 1) {
$return_value[$entity_id]['bundle'] = isset($bundles[$bundle]) ? $bundles[$bundle] : t('Unknown');
}
// Load entity translation specific data.
foreach (language_list() as $langcode => $language) {
$translation_status = 'current';
if ($langcode == $source_lang) {
$translation_status = 'original';
}
elseif (!isset($translations->data[$langcode])) {
$translation_status = 'missing';
}
elseif (!empty($translations->data[$langcode]['translate'])) {
$translation_status = 'outofdate';
}
$return_value[$entity_id]['current_job_items'][$langcode] = isset($current_job_items[$langcode]) ? $current_job_items[$langcode]: NULL;
$return_value[$entity_id]['translation_statuses'][$langcode] = $translation_status;
}
}
return $return_value;
}
/**
* Builds search form for entity sources overview.
*
* @param array $form
* Drupal form array.
* @param $form_state
* Drupal form_state array.
* @param $type
* Entity type.
*
* @return array
* Drupal form array.
*/
public function overviewSearchFormPart($form, &$form_state, $type) {
// Add search form specific styling.
drupal_add_css(drupal_get_path('module', 'tmgmt_entity') . '/css/tmgmt_entity.admin.entity_source_search_form.css');
$form = array();
// Add entity type value into form array so that it is available in
// the form alter hook.
$form_state['entity_type'] = $type;
$form['search_wrapper'] = array(
'#prefix' => '
',
'#suffix' => '
',
'#weight' => -15,
);
$form['search_wrapper']['search'] = array(
'#tree' => TRUE,
);
$form['search_wrapper']['search_submit'] = array(
'#type' => 'submit',
'#value' => t('Search'),
'#weight' => 10,
);
$form['search_wrapper']['search_cancel'] = array(
'#type' => 'submit',
'#value' => t('Cancel'),
'#weight' => 11,
);
$entity_info = entity_get_info($type);
$label_key = isset($entity_info['entity keys']['label']) ? $entity_info['entity keys']['label'] : NULL;
if (!empty($label_key)) {
$form['search_wrapper']['search'][$label_key] = array(
'#type' => 'textfield',
'#title' => t('@entity_name title', array('@entity_name' => $entity_info['label'])),
'#size' => 25,
'#default_value' => isset($_GET[$label_key]) ? $_GET[$label_key] : NULL,
);
}
$language_options = array();
foreach (language_list() as $langcode => $language) {
$language_options[$langcode] = $language->name;
}
$form['search_wrapper']['search']['language'] = array(
'#type' => 'select',
'#title' => t('Source Language'),
'#options' => $language_options,
'#empty_option' => t('All'),
'#default_value' => isset($_GET['language']) ? $_GET['language'] : NULL,
);
$bundle_key = $entity_info['entity keys']['bundle'];
$bundle_options = tmgmt_entity_get_translatable_bundles($type);
if (count($bundle_options) > 1) {
$form['search_wrapper']['search'][$bundle_key] = array(
'#type' => 'select',
'#title' => t('@entity_name type', array('@entity_name' => $entity_info['label'])),
'#options' => $bundle_options,
'#empty_option' => t('All'),
'#default_value' => isset($_GET[$bundle_key]) ? $_GET[$bundle_key] : NULL,
);
}
// In case entity translation is not enabled for any of bundles
// display appropriate message.
elseif (count($bundle_options) == 0) {
drupal_set_message(t('Entity translation is not enabled for any of existing content types. To use this functionality go to Content types administration and enable entity translation for desired content types.'), 'warning');
unset($form['search_wrapper']);
}
$options = array();
foreach (language_list() as $langcode => $language) {
$options[$langcode] = $language->name;
}
$form['search_wrapper']['search']['target_language'] = array(
'#type' => 'select',
'#title' => t('Target language'),
'#options' => $options,
'#empty_option' => t('Any'),
'#default_value' => isset($_GET['target_language']) ? $_GET['target_language'] : NULL,
);
$form['search_wrapper']['search']['target_status'] = array(
'#type' => 'select',
'#title' => t('Target status'),
'#options' => array(
'untranslated_or_outdated' => t('Untranslated or outdated'),
'untranslated' => t('Untranslated'),
'outdated' => t('Outdated'),
),
'#default_value' => isset($_GET['target_status']) ? $_GET['target_status'] : NULL,
'#states' => array(
'invisible' => array(
':input[name="search[target_language]"]' => array('value' => ''),
),
),
);
return $form;
}
/**
* Performs redirect with search params appended to the uri.
*
* In case of triggering element is edit-search-submit it redirects to
* current location with added query string containing submitted search form
* values.
*
* @param array $form
* Drupal form array.
* @param $form_state
* Drupal form_state array.
* @param $type
* Entity type.
*/
public function overviewSearchFormRedirect($form, &$form_state, $type) {
if ($form_state['triggering_element']['#id'] == 'edit-search-cancel') {
drupal_goto($_GET['q']);
}
elseif ($form_state['triggering_element']['#id'] == 'edit-search-submit') {
$query = array();
foreach ($form_state['values']['search'] as $key => $value) {
$query[$key] = $value;
}
drupal_goto($_GET['q'], array('query' => $query));
}
}
/**
* {@inheritdoc}
*/
public function hook_menu() {
$items = parent::hook_menu();
if (isset($items['admin/tmgmt/sources/entity_node'])) {
// We assume that nodes are the most important overview if enabled, so
// make sure they show up first.
$items['admin/tmgmt/sources/entity_node']['weight'] = -20;
}
return $items;
}
}