123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- <?php
- /**
- * @file
- * Provides the node source plugin controller.
- */
- class TMGMTNodeSourcePluginController extends TMGMTDefaultSourcePluginController {
- /**
- * {@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) {
- $node = node_load($job_item->item_id);
- $source_language = $job_item->getJob()->source_language;
- $languages = language_list();
- // If the node language is not the same as the job source language try to
- // load its translation for the job source language.
- if ($node->language != $source_language) {
- $translation_loaded = FALSE;
- foreach (translation_node_get_translations($node->nid) as $language => $translation) {
- if ($language == $source_language) {
- $node = node_load($translation->nid);
- $translation_loaded = TRUE;
- break;
- }
- }
- if (!$translation_loaded) {
- throw new TMGMTException(t('Unable to load %language translation for the node %title',
- array('%language' => $languages[$source_language]->name, '%title' => $node->title)));
- }
- }
- $type = node_type_get_type($node);
- // Get all the fields that can be translated and arrange their values into
- // a specific structure.
- $structure = tmgmt_field_get_source_data('node', $node, $job_item->getJob()->source_language);
- $structure['node_title']['#label'] = $type->title_label;
- $structure['node_title']['#text'] = $node->title;
- return $structure;
- }
- /**
- * {@inheritdoc}
- */
- public function saveTranslation(TMGMTJobItem $job_item) {
- if ($node = node_load($job_item->item_id)) {
- $job = $job_item->getJob();
- if (empty($node->tnid)) {
- // We have no translation source nid, this is a new set, so create it.
- $node->tnid = $node->nid;
- node_save($node);
- }
- $translations = translation_node_get_translations($node->tnid);
- if (isset($translations[$job->target_language])) {
- // We have already a translation for the source node for the target
- // language, so load it.
- $tnode = node_load($translations[$job->target_language]->nid);
- }
- else {
- // We don't have a translation for the source node yet, so create one.
- $tnode = clone $node;
- unset($tnode->nid, $tnode->vid, $tnode->uuid, $tnode->vuuid);
- $tnode->language = $job->target_language;
- $tnode->translation_source = $node;
- }
- // Allow modules and translator plugins to alter, for example in the
- // case of creating revisions for translated nodes, or altering
- // properties of the tnode before saving.
- drupal_alter('tmgmt_before_update_node_translation', $tnode, $node, $job_item);
- // Time to put the translated data into the node.
- $data = $job_item->getData();
- // Special case for the node title.
- if (isset($data['node_title']['#translation']['#text'])) {
- $tnode->title = $data['node_title']['#translation']['#text'];
- unset($data['node_title']);
- }
- tmgmt_field_populate_entity('node', $tnode, $job->target_language, $data, FALSE);
- // Reset translation field, which determines outdated status.
- $tnode->translation['status'] = 0;
- node_save($tnode);
- // We just saved the translation, set the sate of the job item to
- // 'finished'.
- $job_item->accepted();
- }
- }
- /**
- * {@inheritdoc}
- */
- public function getLabel(TMGMTJobItem $job_item) {
- if ($node = node_load($job_item->item_id)) {
- return entity_label('node', $node);
- }
- return parent::getLabel($job_item);
- }
- /**
- * {@inheritdoc}
- */
- public function getUri(TMGMTJobItem $job_item) {
- if ($node = node_load($job_item->item_id)) {
- return entity_uri('node', $node);
- }
- return parent::getUri($job_item);
- }
- /**
- * {@inheritdoc}
- */
- public function getType(TMGMTJobItem $job_item) {
- if ($node = node_load($job_item->item_id)) {
- return node_type_get_name($node);
- }
- return parent::getType($job_item);
- }
- /**
- * {@inheritdoc}
- */
- public function getSourceLangCode(TMGMTJobItem $job_item) {
- if ($node = node_load($job_item->item_id)) {
- return entity_language('node', $node);
- }
- return NULL;
- }
- /**
- * {@inheritdoc}
- */
- public function getExistingLangCodes(TMGMTJobItem $job_item) {
- $existing_lang_codes = array();
- if ($node = node_load($job_item->item_id)) {
- $existing_lang_codes = array(entity_language('node', $node));
- }
- if ($translations = translation_node_get_translations($job_item->item_id)) {
- $existing_lang_codes = array_unique(array_merge($existing_lang_codes, array_keys($translations)));
- }
- return $existing_lang_codes;
- }
- }
|