| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 | <?php/** * @file * MigrateTranslationEntityHandler class for entity_translation. *//** * Destination handler implementing translatable fields. */class MigrateTranslationEntityHandler extends MigrateDestinationHandler {  /**   * Registers all entites as handled by this class.   */  public function __construct() {    $this->registerTypes(array('entity'));  }  /**   * Handles Entity Translations.   *   * @param stdClass $entity   * @param stdClass $sourceRow   */  public function prepare($entity, stdClass $row) {    $migration = Migration::currentMigration();    $entity_type = $migration->getDestination()->getEntityType();    // Only continue if the entity type + bundle combination is enabled for    // entity_translation.    if (entity_translation_enabled($entity_type, $entity)) {      // Get the entity_translation handler and load any existing translations.      $handler = entity_translation_get_handler($entity_type, $entity);      $handler->loadTranslations();      $original_language = $handler->getLanguage();      // Get the bundle of the entity.      list(, , $bundle) = entity_extract_ids($entity_type, $entity);      // We need to get all of the possible translations to create. So we look      // for any translatable fields.      $translatable_fields = array();      foreach (field_info_instances($entity_type, $bundle) as $instance) {        $field_name = $instance['field_name'];        $field = field_info_field($field_name);        if ($field['translatable']) {          $translatable_fields[] = $field_name;        }      }      // In those fields we look for translated values to build out an array      // of languages we need to set translations for.      $translate_languages = array();      foreach ($translatable_fields as $translatable_field) {        if (!empty($entity->{$translatable_field})) {          $field_languages = array_keys($entity->{$translatable_field});          foreach ($field_languages as $field_language) {            $translate_languages[$field_language] = $field_language;          }        }      }      // Remove the LANGUAGE_NONE results.      unset($translate_languages[LANGUAGE_NONE]);      // Remove the original language.      unset($translate_languages[$original_language]);      // Anything we're left with is a translation that should be set.      foreach ($translate_languages as $translate_language) {        if (!isset($entity->translations->data[$translate_language])) {          // Add the new translation and store it.          $handler->setTranslation(array(            'translate' => 0,            'status' => 1,            'language' => $translate_language,            'source' => $original_language,            'uid' => (empty($entity->uid)) ? 0 : $entity->uid,            'changed' => (empty($entity->changed)) ? REQUEST_TIME : $entity->changed,            'created' => (empty($entity->created)) ? REQUEST_TIME : $entity->created,          ));        }      }    }  }}
 |