You are here

tmgmt_entity.plugin.inc in Translation Management Tool 7

Provides the Entity source controller.

File

sources/entity/tmgmt_entity.plugin.inc
View source
<?php

/**
 * @file
 * Provides the Entity source controller.
 */
class TMGMTEntitySourcePluginController extends TMGMTDefaultSourcePluginController {
  public function getLabel(TMGMTJobItem $job_item) {
    if ($entity = entity_load_single($job_item->item_type, $job_item->item_id)) {
      return entity_label($job_item->item_type, $entity);
    }
  }
  public function getUri(TMGMTJobItem $job_item) {
    if ($entity = entity_load_single($job_item->item_type, $job_item->item_id)) {
      return entity_uri($job_item->item_type, $entity);
    }
  }

  /**
   * {@inheritdoc}
   *
   * Returns the data from the fields as a structure that can be processed by
   * the Translation Management system.
   */
  public function getData(TMGMTJobItem $job_item) {
    $entity = entity_load_single($job_item->item_type, $job_item->item_id);
    if (!$entity) {
      throw new TMGMTException(t('Unable to load entity %type with id %id', array(
        '%type' => $job_item->item_type,
        $job_item->item_id,
      )));
    }
    if (entity_language($job_item->item_type, $entity) == LANGUAGE_NONE) {
      throw new TMGMTException(t('Entity %entity could not be translated because it is language neutral', array(
        '%entity' => entity_label($job_item->item_type, $entity),
      )));
    }
    return tmgmt_field_get_source_data($job_item->item_type, $entity, $job_item
      ->getJob()->source_language, TRUE);
  }

  /**
   * {@inheritdoc}
   */
  public function saveTranslation(TMGMTJobItem $job_item) {
    $entity = entity_load_single($job_item->item_type, $job_item->item_id);
    $job = tmgmt_job_load($job_item->tjid);
    tmgmt_field_populate_entity($job_item->item_type, $entity, $job->target_language, $job_item
      ->getData());

    // Change the active language of the entity to the target language.
    $handler = entity_translation_get_handler($job_item->item_type, $entity);
    $handler
      ->setFormLanguage($job_item
      ->getJob()->target_language);
    entity_save($job_item->item_type, $entity);
    $translation = array(
      // @todo Improve hardcoded values.
      'translate' => 0,
      'status' => TRUE,
      'language' => $job_item
        ->getJob()->target_language,
      'source' => $job_item
        ->getJob()->source_language,
    );
    $handler
      ->setTranslation($translation);
    $handler
      ->saveTranslations();
    $job_item
      ->accepted();
  }

  /**
   * {@inheritdoc}
   */
  public function getType(TMGMTJobItem $job_item) {
    if ($entity = entity_load_single($job_item->item_type, $job_item->item_id)) {
      $bundles = tmgmt_entity_get_translatable_bundles($job_item->item_type);
      $info = entity_get_info($job_item->item_type);
      list(, , $bundle) = entity_extract_ids($job_item->item_type, $entity);

      // Display entity type and label if we have one and the bundle isn't
      // the same as the entity type.
      if (isset($bundles[$bundle]) && $bundle != $job_item->item_type) {
        return t('@type (@bundle)', array(
          '@type' => $info['label'],
          '@bundle' => $bundles[$bundle],
        ));
      }
      elseif (isset($info['label'])) {
        return $info['label'];
      }
      return parent::getType($job_item);
    }
  }

  /**
   * {@inheritdoc}
   */
  public function getSourceLangCode(TMGMTJobItem $job_item) {
    $entity = entity_load_single($job_item->item_type, $job_item->item_id);
    return isset($entity->translations->original) ? $entity->translations->original : NULL;
  }

  /**
   * {@inheritdoc}
   */
  public function getExistingLangCodes(TMGMTJobItem $job_item) {
    if ($entity = entity_load_single($job_item->item_type, $job_item->item_id)) {
      $entity_info = entity_get_info($job_item->item_type);
      if (isset($entity_info['entity keys']['translations'])) {
        $translations_key = $entity_info['entity keys']['translations'];
        return array_keys($entity->{$translations_key}->data);
      }
    }
    return array();
  }

}

Classes

Namesort descending Description
TMGMTEntitySourcePluginController @file Provides the Entity source controller.