Index: l10n_client.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/l10n_client/Attic/l10n_client.module,v retrieving revision 1.22.2.12 diff -u -r1.22.2.12 l10n_client.module --- l10n_client.module 4 Aug 2010 10:38:23 -0000 1.22.2.12 +++ l10n_client.module 15 Sep 2010 12:38:32 -0000 @@ -434,22 +434,61 @@ function l10n_client_save_string() { global $user, $language; - if (l10n_client_access()) { - if (isset($_POST['source']) && isset($_POST['target']) && isset($_POST['textgroup']) && !empty($_POST['form_token']) && drupal_valid_token($_POST['form_token'], 'l10n_client_form')) { - include_once 'includes/locale.inc'; - $report = array('skips' => 0, 'additions' => 0, 'updates' => 0, 'deletes' => 0); - _locale_import_one_string_db($report, $language->language, $_POST['source'], $_POST['target'], $_POST['textgroup'], NULL, LOCALE_IMPORT_OVERWRITE); - cache_clear_all('locale:', 'cache', TRUE); - _locale_invalidate_js($language->language); - - // Submit to remote server if enabled. - if (variable_get('l10n_client_use_server', FALSE) && user_access('submit translations to localization server') && !empty($user->l10n_client_key)) { - l10n_client_submit_translation($language->language, $_POST['source'], $_POST['target'], $user->l10n_client_key, l10n_client_user_token($user)); - } - } + if (l10n_client_access() && isset($_POST['source']) && isset($_POST['target']) && isset($_POST['textgroup']) && !empty($_POST['form_token']) && drupal_valid_token($_POST['form_token'], 'l10n_client_form')) { + $translation['source'] = $_POST['source']; + $translation['translation'] = $_POST['target']; + $translation['textgroup'] = $_POST['textgroup']; + $translation['language'] = $language->language; + $translation['user'] = $user; + $translation['save'] = TRUE; + $translation['submit'] = variable_get('l10n_client_use_server', FALSE) && user_access('submit translations to localization server') && !empty($user->l10n_client_key); + return l10n_client_process_translation($translation); + } +} + +/** + * Process translation: Store and/or for submit to remote server + */ +function l10n_client_process_translation($translation) { + // Give a chance to modules for editing this translation, set 'save' or 'submit' to false to skip next steps + drupal_alter('l10n_client_translation', $translation); + if ($translation['save']) { + l10n_client_save_translation($translation); + } + // If translation not properly saved, we don't bother submitting it to the remote server. + if ($translation['submit'] && (!$translation['save'] || $translation['save_status'])) { + l10n_client_submit_translation($translation); } + // Inform other modules of what's happened + module_invoke_all('l10n_client', 'translation', $translation); + return $translation; } +/** + * Save string translation to database + * + * @param $translation + * Array with string translation data with the following elements + * - source, Source string + * - translation, Translated string + * - language, Language code + * - textgroup, Text group name + */ +function l10n_client_save_translation(&$translation) { + include_once 'includes/locale.inc'; + $translation += array('location' => NULL, 'mode' => LOCALE_IMPORT_OVERWRITE, 'plid' => NULL, 'plural' => NULL); + $translation['report'] = array('skips' => 0, 'additions' => 0, 'updates' => 0, 'deletes' => 0); + $translation['lid'] = _locale_import_one_string_db($translation['report'], $translation['language'], $translation['source'], $translation['translation'], $translation['textgroup'], $translation['location'], $translation['mode'], $translation['plid'], $translation['plural']); + // Check import success and if successful, clear caches. + $translation['save_status'] = $translation['lid'] && !$translation['report']['skips']; + if ($translation['save_status']) { + cache_clear_all('locale:', 'cache', TRUE); + _locale_invalidate_js($language->language); + } + return $translation['save_status']; +} + + // ----------------------------------------------------------------------------- /** @@ -630,18 +669,25 @@ /** * Submit translation to the server. */ -function l10n_client_submit_translation($langcode, $source, $translation, $user_key, $user_token) { - $server_uid = current(split(':', $user_key)); - $signature = md5($user_key . $langcode . $source . $translation . $user_token); +function l10n_client_submit_translation(&$translation) { + $translation += array('server' => variable_get('l10n_client_server', '')); + if (!empty($translation['user']) && (empty($translation['user_key']) || empty($translation['user_token']))) { + $translation += array( + 'user_key' => $translation['user']->l10n_client_key, + 'user_token' => l10n_client_user_token($translation['user']), + ); + } + $server_uid = current(split(':', $translation['user_key'])); + $signature = md5($translation['user_key'] . $translation['language'] . $translation['source'] . $translation['translation'] . $translation['user_token']); $response = xmlrpc( - variable_get('l10n_client_server', '') .'/xmlrpc.php', + $translation['server'] .'/xmlrpc.php', 'l10n.submit.translation', - $langcode, - $source, - $translation, + $translation['language'], + $translation['source'] , + $translation['translation'], (int)$server_uid, - $user_token, + $translation['user_token'], $signature ); @@ -651,10 +697,11 @@ } else { watchdog('l10n_client', 'Translation rejected by remote server. Reason: %reason', array('%reason' => $response['reason']), WATCHDOG_WARNING); } - return $response['status']; + $translation['submit_status'] = $response['status']; } else { watchdog('l10n_client', 'The connection with the remote server failed with the following error: %error_code: %error_message.', array('%error_code' => xmlrpc_errno(), '%error_message' => xmlrpc_error_msg()), WATCHDOG_ERROR); - return FALSE; + $translation['submit_status'] = FALSE; } + return $translation['submit_status']; }