globallink_entity.module in GlobalLink Connect for Drupal 7.7
Same filename and directory in other branches
GlobalLink entity translation module.
This module adds entity translation support with configuration options.
File
globallink_entity/globallink_entity.moduleView source
<?php
/**
* @file
* GlobalLink entity translation module.
*
* This module adds entity translation support with configuration options.
*/
/**
* Adds a validation handler to check for change in multilingual options.
*/
function globallink_entity_form_node_type_form_alter(&$form, $form_state) {
array_unshift($form['#validate'], 'globallink_entity_form_node_type_form_validate');
}
/**
* Validation to check if any active submission exists for this content type
* only if there is a change in multilingual options.
*/
function globallink_entity_form_node_type_form_validate($form, &$form_state) {
module_load_include('inc', 'globallink', 'globallink');
$language_content_type = $form_state['values']['language_content_type'];
if ($language_content_type != 2 && globallink_pending_submission_exists_for_content_type($form_state['values']['old_type'])) {
form_set_error('language_content_type', t('Active submission exists for this content type in GlobalLink.'));
}
}
/**
* Implements hook_node_presave().
*/
function globallink_entity_node_presave($node) {
if (isset($node->tpt_skip) && $node->tpt_skip == TRUE || !isset($node->type)) {
return;
}
if (!entity_translation_node_supported_type($node->type)) {
return;
}
if (!isset($node->original)) {
return;
}
$handler = entity_translation_get_handler(GLOBALLINK_ENTITY_TYPE_NODE, $node);
$config_fields = globallink_get_translatable_fields($node->type, $node->type);
$orig = $node->original;
$lang = $handler
->getFormLanguage();
foreach ($config_fields as $field) {
if ($field->translatable != 1) {
continue;
}
$field_name = $field->field_name;
switch ($field_name) {
case 'title':
if ($orig->title != $node->title) {
globallink_update_change_detection_entity($node, $lang);
break 2;
}
break 1;
case 'metatags':
continue 2;
}
$field_info = field_info_field($field_name);
switch ($field_info['type']) {
case 'list_boolean':
case 'image':
case 'file':
case 'taxonomy_term_reference':
case 'field_collection':
continue 2;
break;
}
if (!isset($node->{$field_name}) || !isset($orig->{$field_name})) {
globallink_update_change_detection_entity($node, $lang);
break;
}
$o_arr = isset($orig->{$field_name}) ? $orig->{$field_name} : array();
$n_arr = isset($node->{$field_name}) ? $node->{$field_name} : array();
if (empty($o_arr) || empty($n_arr) || count($o_arr) != count($n_arr)) {
globallink_update_change_detection_entity($node, $lang);
continue;
}
if (!is_array($o_arr) || !is_array($n_arr)) {
if ($o_arr != $n_arr) {
globallink_update_change_detection_entity($node, $lang);
break;
}
continue;
}
if (empty($o_arr[$lang]) && empty($n_arr[$lang]) && isset($o_arr[LANGUAGE_NONE]) && isset($n_arr[LANGUAGE_NONE])) {
$lang = LANGUAGE_NONE;
}
if (isset($o_arr[$lang]) && isset($n_arr[$lang]) && count($o_arr[$lang]) != count($n_arr[$lang])) {
globallink_update_change_detection_entity($node, $lang);
break;
}
if (isset($o_arr[$lang]) && empty($n_arr[$lang]) || empty($o_arr[$lang]) && isset($n_arr[$lang])) {
globallink_update_change_detection_entity($node, $lang);
break;
}
if (count($o_arr[$lang]) != count($n_arr[$lang])) {
globallink_update_change_detection_entity($node, $lang);
break;
}
foreach ($o_arr[$lang] as $delta => $n_field) {
if (isset($n_arr[$lang][$delta]) && isset($n_arr[$lang][$delta]['value'])) {
if ($n_field['value'] != $n_arr[$lang][$delta]['value']) {
globallink_update_change_detection_entity($node, $lang);
break 2;
}
}
else {
globallink_update_change_detection_entity($node, $lang);
break 2;
}
}
}
}
/**
* Updates change detection entity with new node ID and language.
*
* @param object $node
* The node object.
* @param string $lang
* The target language.
*/
function globallink_update_change_detection_entity($node, $lang) {
module_load_include('inc', 'globallink', 'globallink');
$tpt_locale_code = globallink_get_locale_code($lang);
db_update('globallink_core')
->fields(array(
'last_modified' => REQUEST_TIME,
'changed' => 1,
))
->condition('nid', $node->nid, '=')
->condition('source', $tpt_locale_code, '=')
->execute();
}
/**
* Gets entity rows that have been sent for translation.
*
* @param string $nid
* The entity node ID.
* @param string $source
* The target language of the entity.
*
* @return array
* Array of entity rows that have been sent for translation.
*/
function get_tpt_entity_sent_rows($nid, $source) {
module_load_include('inc', 'globallink', 'globallink');
$arr = array();
$query = db_select('globallink_document', 'gd')
->fields('gd')
->condition('object_id', $nid, '=')
->condition('entity_type', GLOBALLINK_ENTITY_TYPE_ENTITY, '=')
->condition('target_status', array(
GLOBALLINK_STATUS_TRANSLATION_SENT,
GLOBALLINK_STATUS_TRANSLATION_ERROR,
GLOBALLINK_STATUS_TRANSLATION_COMPLETED,
), 'IN');
$result = $query
->execute()
->fetchAll();
foreach ($result as $row) {
$arr[] = globallink_get_drupal_locale_code($row->target_lang_code);
}
return $arr;
}
/**
* Implements hook_menu().
*/
function globallink_entity_menu() {
$items = array();
$items['admin/globallink-translations/dashboard/entity'] = array(
'title' => ' Entity ',
'page callback' => 'globallink_entity_dashboard',
'access callback' => 'globallink_access_callback_any',
'type' => MENU_LOCAL_TASK,
'file' => 'globallink_entity_send.inc',
'page arguments' => array(
GLOBALLINK_ENTITY_TYPE_ENTITY,
),
);
$items['admin/globallink-translations/dashboard/entity/preview/%/%ctools_js'] = array(
'title' => 'Preview',
'page callback' => 'globallink_entity_preview',
'page arguments' => array(
5,
),
'file' => 'globallink_entity_send.inc',
'access callback' => 'globallink_access_callback_any',
// 'access arguments' => array(TPT_ROLE_MANAGE_TRANSLATIONS),
'type' => MENU_CALLBACK,
);
$items['admin/globallink-translations/workbench/entity/%sub_id/%lang_id'] = array(
'title' => ' Entity ',
'page callback' => 'globallink_dashboard_active_submissions_page',
'access callback' => 'globallink_access_callback_any',
'file' => '../globallink_workbench_all_active_submissions.inc',
'type' => MENU_LOCAL_TASK,
'page arguments' => array(
4,
),
);
$items['admin/globallink-translations/receiveTranslation/entity/preview'] = array(
'title' => 'Preview Translation',
'page callback' => 'globallink_entity_preview_translated_content',
'file' => 'globallink_entity_receive.inc',
'access arguments' => array(
TPT_ROLE_MANAGE_TRANSLATIONS,
),
'type' => MENU_CALLBACK,
);
return $items;
}
Functions
Name | Description |
---|---|
get_tpt_entity_sent_rows | Gets entity rows that have been sent for translation. |
globallink_entity_form_node_type_form_alter | Adds a validation handler to check for change in multilingual options. |
globallink_entity_form_node_type_form_validate | Validation to check if any active submission exists for this content type only if there is a change in multilingual options. |
globallink_entity_menu | Implements hook_menu(). |
globallink_entity_node_presave | Implements hook_node_presave(). |
globallink_update_change_detection_entity | Updates change detection entity with new node ID and language. |