View source
<?php
function globallink_menu_send_for_translations($mlids, $pd4, $submission_name, $due_date, $project_code, $source_locale, $target_locale_arr, $submission_details, $submission_priority) {
module_load_include('inc', 'globallink', 'gl_ws/gl_ws_send_translations');
module_load_include('inc', 'globallink', 'globallink');
$submitter = $submission_details['submitter'];
$globallink_arr = array();
foreach ($mlids as $mlid) {
$rows = globallink_menu_get_sent_rows_by_mlid($mlid);
$target_arr = $target_locale_arr;
$menu_info = globallink_menu_get_info($mlid);
$title = $menu_info->link_title;
foreach ($rows as $row) {
if (array_search($row->target_lang_code, $target_locale_arr)) {
unset($target_arr[$row->target_lang_code]);
watchdog(GLOBALLINK_MODULE, 'Skipping Menu Id - %id for locales %locale', array(
'%id' => $mlid,
'%locale' => $row->target_lang_code,
), WATCHDOG_DEBUG);
}
}
if (empty($target_arr)) {
continue;
}
$xml = globallink_menu_get_xml($mlid);
$name = 'Menu_' . $mlid . '.xml';
$globallink = new GlobalLink();
$globallink->type = GLOBALLINK_ENTITY_TYPE_MENU;
$globallink->metadata = GLOBALLINK_ENTITY_TYPE_MENU;
$globallink->title = $title;
$globallink->sourceLocale = $source_locale;
$globallink->targetLocale = $target_arr;
$globallink->sourceXML = $xml;
$globallink->sourceFileName = $name;
$globallink->submissionName = $submission_name;
$globallink->submissionPriority = $submission_priority;
$globallink->dueDate = $due_date;
$globallink->otherObjectId = $mlid;
$globallink->submissionInstructions = $submission_details['instructions'] . "\nSubmitter: " . $submitter;
$globallink_arr[GLOBALLINK_ENTITY_TYPE_MENU][] = $globallink;
}
return $globallink_arr;
}
function globallink_menu_get_xml($mlid) {
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = TRUE;
$root = $dom
->createElement('content');
$dom
->appendChild($root);
$id = $dom
->createAttribute('mlid');
$id->value = $mlid;
$root
->appendChild($id);
$link = menu_link_load($mlid);
globallink_insert_child_element($dom, $root, GLOBALLINK_ENTITY_TYPE_MENU, $link['link_title'], array(
'name' => 'link_title',
));
if (isset($link['options']) && isset($link['options']['attributes'])) {
if (isset($link['options']['attributes']['title'])) {
if (is_string($link['options']['attributes']['title'])) {
globallink_insert_child_element($dom, $root, GLOBALLINK_ENTITY_TYPE_MENU, $link['options']['attributes']['title'], array(
'name' => 'title',
));
}
}
}
$xml = $dom
->saveXML();
return $xml;
}
function globallink_menu_check_delete($mlid) {
$s_link = menu_link_load($mlid);
if (!$s_link) {
return TRUE;
}
return FALSE;
}
function globallink_menu_get_i18n_menu_set($tsid) {
$arr = array();
$query = db_select('menu_links', 'ml');
$query
->fields('ml');
$query
->condition('i18n_tsid', $tsid, '=');
$results = $query
->execute();
foreach ($results as $row) {
$arr[$row->language] = $row;
}
return $arr;
}
function globallink_menu_sort_gl_objects_by_menu_order($gl_1, $gl_2) {
$link_1 = menu_link_load($gl_1->otherObjectId);
$link_2 = menu_link_load($gl_2->otherObjectId);
return globallink_menu_count_parents($link_1) < globallink_menu_count_parents($link_2) ? -1 : 1;
}
function globallink_menu_count_parents($menu_link) {
$count = 0;
if (isset($menu_link)) {
if (isset($menu_link['p1']) && $menu_link['p1'] != 0) {
$count++;
}
if (isset($menu_link['p2']) && $menu_link['p2'] != 0) {
$count++;
}
if (isset($menu_link['p3']) && $menu_link['p3'] != 0) {
$count++;
}
if (isset($menu_link['p4']) && $menu_link['p4'] != 0) {
$count++;
}
if (isset($menu_link['p5']) && $menu_link['p5'] != 0) {
$count++;
}
if (isset($menu_link['p6']) && $menu_link['p6'] != 0) {
$count++;
}
if (isset($menu_link['p7']) && $menu_link['p7'] != 0) {
$count++;
}
if (isset($menu_link['p8']) && $menu_link['p8'] != 0) {
$count++;
}
if (isset($menu_link['p9']) && $menu_link['p9'] != 0) {
$count++;
}
}
return $count;
}
function globallink_menu_import(&$globallink) {
module_load_include('inc', 'i18n_menu', 'i18n_menu.admin');
module_load_include('inc', 'globallink', 'globallink');
$target_xml = $globallink->targetXML;
if (empty($target_xml)) {
$globallink->status = GLOBALLINK_STATUS_TRANSLATION_ERROR;
return;
}
$language = globallink_get_drupal_locale_code($globallink->targetLocale);
$arr = globallink_menu_get_translated_items($target_xml);
try {
$mlid = $arr['mlid'];
$t_link_title = $arr['link_title'];
$source_link = menu_link_load($mlid);
$parent_link = $source_link['plid'];
if ($parent_link != 0) {
$p_link = menu_link_load($parent_link);
$parent_tr = i18n_menu_link_load($p_link['link_path'], $language);
if (empty($parent_tr)) {
$globallink->status = GLOBALLINK_STATUS_TRANSLATION_ERROR;
watchdog(GLOBALLINK_MODULE, 'Cannot update as the parent %parent is not translated.', array(
'%parent' => $p_link['link_title'],
), WATCHDOG_ERROR);
return;
}
}
if ($source_link) {
$t_title = FALSE;
if (isset($source_link['options'])) {
if (isset($source_link['options']['attributes'])) {
if (isset($source_link['options']['attributes']['title'])) {
if ($source_link['options']['attributes']['title'] != '') {
$t_title = isset($arr['title']) ? $arr['title'] : FALSE;
}
}
}
}
$t_plid = 0;
if (isset($source_link['plid']) && $source_link['plid'] != 0) {
$plid = $source_link['plid'];
$p_source_link = menu_link_load($plid);
$p_path_arr = translation_path_get_translations($p_source_link['link_path']);
if (isset($p_path_arr[$language])) {
$p_target_link = i18n_menu_link_load($p_path_arr[$language], $language);
$t_plid = $p_target_link['mlid'];
}
elseif (isset($p_source_link['i18n_tsid']) && $p_source_link['i18n_tsid'] != 0) {
$i18n_arr = globallink_menu_get_i18n_menu_set($p_source_link['i18n_tsid']);
if (isset($i18n_arr[$language])) {
$menu_link_row = $i18n_arr[$language];
$t_plid = $menu_link_row->mlid;
}
}
}
$path_arr = translation_path_get_translations($source_link['link_path']);
$link_path = '';
if (!isset($path_arr[$language])) {
$link_path = $source_link['link_path'];
}
else {
$link_path = $path_arr[$language];
}
$t_link = NULL;
if (isset($source_link['i18n_tsid']) && $source_link['i18n_tsid'] != 0) {
$i18n_arr = globallink_menu_get_i18n_menu_set($source_link['i18n_tsid']);
if (isset($i18n_arr[$language])) {
$menu_link_row = $i18n_arr[$language];
$t_link = menu_link_load($menu_link_row->mlid);
}
}
if (is_array($t_link)) {
$t_link['link_title'] = $t_link_title;
$t_link['menu_name'] = $source_link['menu_name'];
$t_link['customized'] = $source_link['customized'];
$t_link['has_children'] = $source_link['has_children'];
$t_link['expanded'] = $source_link['expanded'];
$t_link['weight'] = $source_link['weight'];
$t_link['hidden'] = $source_link['hidden'];
if ($t_title && $t_link != '') {
if (isset($t_link['options'])) {
if (isset($t_link['options']['attributes'])) {
$t_link['options']['attributes']['title'] = $t_title;
}
else {
$t_link['options']['attributes'] = array(
'title' => $t_title,
);
}
}
}
}
else {
$t_link = array();
$t_link['link_title'] = $t_link_title;
$t_link['language'] = $language;
$t_link['link_path'] = $link_path;
$t_link['menu_name'] = $source_link['menu_name'];
$t_link['customized'] = $source_link['customized'];
$t_link['has_children'] = $source_link['has_children'];
$t_link['expanded'] = $source_link['expanded'];
$t_link['weight'] = $source_link['weight'];
$t_link['hidden'] = $source_link['hidden'];
if ($t_plid != 0) {
$t_link['plid'] = $t_plid;
}
if ($t_title) {
$t_link['options'] = array(
'attributes' => array(
'title' => $t_title,
),
'langcode' => $language,
);
}
}
menu_link_save($t_link);
$translation_set = $source_link['i18n_tsid'] ? i18n_translation_set_load($source_link['i18n_tsid']) : i18n_translation_set_create('menu_link');
$translation_set
->add_item($source_link, $source_link['language']);
$translation_set
->add_item($t_link, $language);
$translation_set
->save(TRUE);
$globallink->status = GLOBALLINK_STATUS_TRANSLATION_IMPORTED;
}
else {
$globallink->status = GLOBALLINK_STATUS_TRANSLATION_SOURCE_DELETED;
return;
}
} catch (Exception $e) {
$globallink->status = GLOBALLINK_STATUS_TRANSLATION_ERROR;
watchdog(GLOBALLINK_MODULE, 'Exception - %function - File[%file], Line[%line], Code[%code], Message[%message]', array(
'%function' => __FUNCTION__,
'%file' => $e
->getFile(),
'%line' => $e
->getLine(),
'%code' => $e
->getCode(),
'%message' => $e
->getMessage(),
), WATCHDOG_ERROR);
}
if ($globallink->status != GLOBALLINK_STATUS_TRANSLATION_ERROR) {
$globallink->status = GLOBALLINK_STATUS_TRANSLATION_IMPORTED;
}
return;
}
function globallink_menu_get_translated_items($xml) {
if (is_null($xml) || !is_string($xml) || $xml == '') {
return array();
}
$dom = new DomDocument();
$dom->preserveWhiteSpace = FALSE;
$dom
->loadXML($xml);
$arr = array();
$contents = $dom
->getElementsByTagName('content');
$mlid = '';
foreach ($contents as $content) {
if (is_null($content->attributes)) {
continue;
}
foreach ($content->attributes as $attr_name => $attr_node) {
if ($attr_name == 'mlid') {
$mlid = $attr_node->value;
}
}
}
if ($mlid == '') {
return array();
}
$arr['mlid'] = $mlid;
$menus = $dom
->getElementsByTagName(GLOBALLINK_ENTITY_TYPE_MENU);
foreach ($menus as $menu) {
$type = '';
foreach ($menu->attributes as $attr_name => $attr_node) {
if ($attr_name == 'name') {
$type = $attr_node->value;
}
}
$arr[$type] = $menu->nodeValue;
}
return $arr;
}
function globallink_menu_get_sent_rows_by_mlid($mlid) {
$result = db_select('globallink_document', 'tc')
->fields('tc')
->condition('object_id', $mlid, '=')
->condition('entity_type', GLOBALLINK_ENTITY_TYPE_MENU, '=')
->condition('target_status', array(
GLOBALLINK_STATUS_TRANSLATION_SENT,
GLOBALLINK_STATUS_TRANSLATION_ERROR,
GLOBALLINK_STATUS_TRANSLATION_COMPLETED,
), 'IN')
->execute();
$rows = array();
foreach ($result as $row) {
$rows[] = $row;
}
return $rows;
}
function globallink_menu_load_data($mlid) {
$query = db_select('menu_links', 'ml')
->fields('ml')
->condition('mlid', $mlid, '=');
$results = $query
->execute();
$rows = array();
foreach ($results as $item) {
$rows[] = $item;
}
return $rows;
}
function globallink_menu_get_info($mlid) {
$results = db_select('menu_links', 'ml')
->fields('ml')
->condition('mlid', $mlid, '=')
->execute();
$arr = new stdClass();
foreach ($results as $result) {
$arr = $result;
}
return $arr;
}
function globallink_menu_get_active_submission_by_id($id) {
$query = db_select('globallink_document', 'gd');
$query
->join('globallink_submission', 'gs', 'gd.submission_rid = gs.rid');
$query
->condition('gd.object_id', $id, '=');
$query
->condition('gd.entity_type', GLOBALLINK_ENTITY_TYPE_MENU, '=');
$or = db_or();
$or
->condition('gd.target_status', GLOBALLINK_STATUS_TRANSLATION_SENT, '=');
$or
->condition('gd.target_status', GLOBALLINK_STATUS_TRANSLATION_COMPLETED, '=');
$or
->condition('gd.target_status', GLOBALLINK_STATUS_TRANSLATION_ERROR, '=');
$query
->condition($or);
$query
->fields('gd');
$query
->fields('gs', array(
'submission',
'source_lang_code',
'source_lang_name',
'sub_target_lang_code',
'sub_target_lang_name',
));
$results = $query
->execute()
->fetchAll();
return $results;
}