tmgmt_entity.plugin.inc 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. /**
  3. * @file
  4. * Provides the Entity source controller.
  5. */
  6. class TMGMTEntitySourcePluginController extends TMGMTDefaultSourcePluginController {
  7. public function getLabel(TMGMTJobItem $job_item) {
  8. if ($entity = entity_load_single($job_item->item_type, $job_item->item_id)) {
  9. return entity_label($job_item->item_type, $entity);
  10. }
  11. }
  12. public function getUri(TMGMTJobItem $job_item) {
  13. if ($entity = entity_load_single($job_item->item_type, $job_item->item_id)) {
  14. return entity_uri($job_item->item_type, $entity);
  15. }
  16. }
  17. /**
  18. * {@inheritdoc}
  19. *
  20. * Returns the data from the fields as a structure that can be processed by
  21. * the Translation Management system.
  22. */
  23. public function getData(TMGMTJobItem $job_item) {
  24. $entity = entity_load_single($job_item->item_type, $job_item->item_id);
  25. if (!$entity) {
  26. throw new TMGMTException(t('Unable to load entity %type with id %id', array('%type' => $job_item->item_type, $job_item->item_id)));
  27. }
  28. if (entity_language($job_item->item_type, $entity) == LANGUAGE_NONE) {
  29. throw new TMGMTException(t('Entity %entity could not be translated because it is language neutral', array('%entity' => entity_label($job_item->item_type, $entity))));
  30. }
  31. return tmgmt_field_get_source_data($job_item->item_type, $entity, $job_item->getJob()->source_language, TRUE);
  32. }
  33. /**
  34. * {@inheritdoc}
  35. */
  36. public function saveTranslation(TMGMTJobItem $job_item) {
  37. $entity = entity_load_single($job_item->item_type, $job_item->item_id);
  38. $job = tmgmt_job_load($job_item->tjid);
  39. tmgmt_field_populate_entity($job_item->item_type, $entity, $job->target_language, $job_item->getData());
  40. // Change the active language of the entity to the target language.
  41. $handler = entity_translation_get_handler($job_item->item_type, $entity);
  42. $handler->setFormLanguage($job_item->getJob()->target_language);
  43. entity_save($job_item->item_type, $entity);
  44. $translation = array(
  45. // @todo Improve hardcoded values.
  46. 'translate' => 0,
  47. 'status' => TRUE,
  48. 'language' => $job_item->getJob()->target_language,
  49. 'source' => $job_item->getJob()->source_language,
  50. );
  51. $handler->setTranslation($translation);
  52. $handler->saveTranslations();
  53. $job_item->accepted();
  54. }
  55. /**
  56. * {@inheritdoc}
  57. */
  58. public function getType(TMGMTJobItem $job_item) {
  59. if ($entity = entity_load_single($job_item->item_type, $job_item->item_id)) {
  60. $bundles = tmgmt_entity_get_translatable_bundles($job_item->item_type);
  61. $info = entity_get_info($job_item->item_type);
  62. list(, , $bundle) = entity_extract_ids($job_item->item_type, $entity);
  63. // Display entity type and label if we have one and the bundle isn't
  64. // the same as the entity type.
  65. if (isset($bundles[$bundle]) && $bundle != $job_item->item_type) {
  66. return t('@type (@bundle)', array('@type' => $info['label'], '@bundle' => $bundles[$bundle]));
  67. }
  68. // Otherwise just display the entity type label.
  69. elseif (isset($info['label'])) {
  70. return $info['label'];
  71. }
  72. return parent::getType($job_item);
  73. }
  74. }
  75. /**
  76. * {@inheritdoc}
  77. */
  78. public function getSourceLangCode(TMGMTJobItem $job_item) {
  79. $entity = entity_load_single($job_item->item_type, $job_item->item_id);
  80. return isset($entity->translations->original) ? $entity->translations->original : NULL;
  81. }
  82. /**
  83. * {@inheritdoc}
  84. */
  85. public function getExistingLangCodes(TMGMTJobItem $job_item) {
  86. if ($entity = entity_load_single($job_item->item_type, $job_item->item_id)) {
  87. $entity_info = entity_get_info($job_item->item_type);
  88. if (isset($entity_info['entity keys']['translations'])){
  89. $translations_key = $entity_info['entity keys']['translations'];
  90. return array_keys($entity->{$translations_key}->data);
  91. }
  92. }
  93. return array();
  94. }
  95. }