public function get_translator_name() { $this->maybe_load_basic_data(); if ($this->basic_data->translation_service == TranslationProxy::get_current_service_id()) { $this->basic_data->translator_name = TranslationProxy_Translator::get_translator_name($this->basic_data->translator_id); } else { $this->basic_data->translator_name = false; } return $this->basic_data->translator_name; }
function ajax_calls($call, $data) { global $wpdb, $sitepress; switch ($call) { case 'assign_translator': $translator_data = TranslationProxy_Service::get_translator_data_from_wpml($data['translator_id']); $service_id = $translator_data['translation_service']; $translator_id = $translator_data['translator_id']; $assign_translation_job = $this->assign_translation_job($data['job_id'], $translator_id, $service_id, $data['job_type']); if ($assign_translation_job) { $translator_edit_link = ''; if ($translator_id) { if ($service_id == TranslationProxy::get_current_service_id()) { $job = $this->get_translation_job($data['job_id']); /** @var $ICL_Pro_Translation WPML_Pro_Translation */ global $ICL_Pro_Translation; $ICL_Pro_Translation->send_post($job->original_doc_id, array($job->language_code), $translator_id, $data['job_id']); $project = TranslationProxy::get_current_project(); $translator_edit_link = TranslationProxy_Popup::get_link($project->translator_contact_iframe_url($translator_id), array('title' => __('Contact the translator', 'sitepress'), 'unload_cb' => 'icl_thickbox_refresh')) . esc_html(TranslationProxy_Translator::get_translator_name($translator_id)) . "</a> ({$project->service}->name)"; } else { $translator_edit_link = '<a href="' . TranslationManagement::get_translator_edit_url($data['translator_id']) . '">' . esc_html($wpdb->get_var($wpdb->prepare("SELECT display_name FROM {$wpdb->users} WHERE ID=%d", $data['translator_id']))) . '</a>'; } } echo wp_json_encode(array('error' => 0, 'message' => $translator_edit_link, 'status' => TranslationManagement::status2text(ICL_TM_WAITING_FOR_TRANSLATOR), 'service' => $service_id)); } else { echo wp_json_encode(array('error' => 1)); } break; case 'icl_cf_translation': case 'icl_tcf_translation': if (!empty($data['cf'])) { foreach ($data['cf'] as $k => $v) { $cft[base64_decode($k)] = $v; } if (isset($cft)) { $this->settings[$call === 'icl_tcf_translation' ? WPML_TERM_META_SETTING_INDEX_PLURAL : WPML_POST_META_SETTING_INDEX_PLURAL] = $cft; $this->save_settings(); } } echo '1|'; break; case 'icl_doc_translation_method': $this->settings['doc_translation_method'] = intval($data['t_method']); $sitepress->set_setting('doc_translation_method', $this->settings['doc_translation_method']); $sitepress->save_settings(array('hide_how_to_translate' => empty($data['how_to_translate']))); if (isset($data['tm_block_retranslating_terms'])) { $sitepress->set_setting('tm_block_retranslating_terms', $data['tm_block_retranslating_terms']); } else { $sitepress->set_setting('tm_block_retranslating_terms', ''); } if (isset($data['tm_block_retranslating_terms'])) { $sitepress->set_setting('tm_block_retranslating_terms', $data['tm_block_retranslating_terms']); } else { $sitepress->set_setting('tm_block_retranslating_terms', ''); } $this->save_settings(); echo '1|'; break; case 'reset_duplication': $this->reset_duplicate_flag($_POST['post_id']); break; case 'set_duplication': $new_id = $this->set_duplicate($_POST['wpml_original_post_id'], $_POST['post_lang']); wp_send_json_success(array('id' => $new_id)); break; case 'make_duplicates': $mdata['iclpost'] = array($data['post_id']); $langs = explode(',', $data['langs']); foreach ($langs as $lang) { $mdata['duplicate_to'][$lang] = 1; } $this->make_duplicates($mdata); do_action('wpml_new_duplicated_terms', (array) $mdata['iclpost'], false); break; } }
/** * Returns array of remote translators. Works only with ICL as a Translation Service * * @return array */ public static function translation_service_translators_list() { $translators = array(); if (!TranslationProxy::translator_selection_available()) { return $translators; } $project = TranslationProxy::get_current_project(); if (!$project) { return $translators; } $lang_status = TranslationProxy_Translator::get_language_pairs(); if (empty($lang_status)) { return $translators; } $action_link_args = array('title' => __('Contact translator', 'sitepress'), 'unload_cb' => 'icl_thickbox_refresh', 'ar' => 1); foreach ($lang_status as $language_pair) { $language_from = $language_pair['from']; $language_pair_translators = $language_pair['translators']; if ($language_pair_translators) { foreach ($language_pair_translators as $translator) { $translator_item = array(); if (isset($translators[$translator['id']])) { $translator_item = $translators[$translator['id']]; $translator_item['langs'][$language_from][] = $language_pair['to']; } else { $translator_item['name'] = $translator['nickname']; $translator_item['langs'][$language_from][] = $language_pair['to']; $translator_item['type'] = $project->service->name; $url = $project->translator_contact_iframe_url($translator['id']); $action_link = ''; if ($url) { $action_link = TranslationProxy_Popup::get_link($url, $action_link_args) . __('Contact translator', 'sitepress') . '</a>'; } $translator_item['action'] = $action_link; } $translators[$translator['id']] = $translator_item; } } } return $translators; }
public function build_content_translators() { global $sitepress, $iclTranslationManagement, $wpdb, $current_user; $selected_translator = $iclTranslationManagement->get_selected_translator(); $active_service = $this->active_service; $service_name = $this->service_name; if (current_user_can('list_users')) { add_filter('icl_translation_services_button', array($this, 'icl_local_add_translator_button')); add_filter('icl_translation_services_button', array('TranslationProxy', 'get_current_service_info')); $only_local_translators = $active_service && (!TranslationProxy_Service::is_authenticated($active_service) || $active_service && !$active_service->has_translator_selection); ?> <div id="icl-your-translators"> <?php if ($active_service && TranslationProxy::translator_selection_available()) { if ($only_local_translators) { $translation_dashboard_url = "admin.php?page=" . WPML_TM_FOLDER . "/menu/main.php&sm=dashboard"; $translation_dashboard_link = sprintf('<a href="%s">' . __('Translation Dashboard', 'wpml-translation-management') . '</a>', $translation_dashboard_url); $service_html = '<p>'; $service_html .= sprintf(__('This section is for selecting WPML (local) translators only. If you wish to use %s, please go to %s.'), '<strong>' . $service_name . '</strong>', $translation_dashboard_link); $service_html .= '</p>'; } else { $service_html = TranslationProxy::get_service_translators_info(); } ICL_AdminNotifier::display_instant_message($service_html); } if ($selected_translator && $selected_translator->ID) { // Edit form echo '<h3>' . __('Edit translator', 'wpml-translation-management') . '</h3>'; echo '<form id="icl_tm_adduser" method="post" action="">' . "\r\n"; echo $this->icl_local_edit_translator_form('edit', $selected_translator) . "\r\n"; echo '</form>' . "\r\n"; } else { // Services add translator form // Services hook $services_buttons = apply_filters('icl_translation_services_button', array()); if (!empty($services_buttons)) { if (!$only_local_translators) { // Toggle button echo '<input type="submit" class="button secondary" id="icl_add_translator_form_toggle" value="' . __('Add Translator', 'wpml-translation-management') . ' »" />' . "\r\n"; } // Toggle div start $form_classes = array('translator-form-wrapper'); if (!isset($_GET['service']) && !$only_local_translators) { $form_classes[] = 'hidden'; } echo '<div id="icl_add_translator_form_wrapper" class="' . implode(' ', $form_classes) . '">'; // Open form echo '<form id="icl_tm_adduser" method="post" action="">'; // 'From' and 'To' languages dropdowns $languages = $sitepress->get_active_languages(); $from = '<label>' . __('From language:', 'wpml-translation-management') . ' <select name="from_lang" id="edit-from">' . "\r\n" . '<option value="0">' . __('Choose', 'wpml-translation-management') . '</option>' . "\r\n"; $to = '<label>' . __('To language:', 'wpml-translation-management') . ' <select name="to_lang" id="edit-to">' . "\r\n" . '<option value="0">' . __('Choose', 'wpml-translation-management') . '</option>' . "\r\n"; foreach ($languages as $language) { // select language from request $selected_from = isset($_GET['icl_lng']) && $_GET['icl_lng'] == $language['code'] ? ' selected="selected"' : ''; $from .= '<option ' . $selected_from . ' value="' . $language['code'] . '"' . @strval($selected_from) . '>' . $language['display_name'] . '</option>' . "\r\n"; $to .= '<option value="' . $language['code'] . '"' . '>' . $language['display_name'] . '</option>' . "\r\n"; } echo $from . '</select></label>' . "\r\n"; echo $to . '</select></label>' . "\r\n"; if (!$only_local_translators) { // Services radio boxes echo '<h4 style="margin-bottom:5px;">' . __('Select translation service', 'wpml-translation-management') . '</h4>' . "\r\n"; } else { echo '<h4 style="margin-bottom:5px;">' . __('Select translators', 'wpml-translation-management') . '</h4>' . "\r\n"; } foreach ($services_buttons as $service => $button) { if ($only_local_translators && $service != 'local') { continue; } if (!isset($button['has_translator_selection']) || $button['has_translator_selection']) { $selected = $only_local_translators && $service == 'local' || isset($_GET['service']) && $_GET['service'] == $service ? ' checked="checked"' : ''; $title = array(); $has_translator_selection = isset($service['has_translator_selection']) ? $service['has_translator_selection'] : false; echo '<div style="margin-bottom:5px;">'; $display = $only_local_translators && $service == 'local' ? ' style="display:none;"' : ''; echo '<input type="radio" id="radio-' . $service . '" name="services" data-has_translator_selection="' . $has_translator_selection . '" value="' . $service . '"' . $selected . $display . ' />'; if (isset($button['name']) && $button['name']) { $title[] = '<label for="radio-' . $service . '"' . $display . '> ' . $button['name']; } if (isset($button['description']) && $button['description']) { $title[] = $button['description']; } if (isset($button['more_link']) && $button['more_link']) { $title[] = $button['more_link']; } echo implode(' - ', $title) . "\r\n"; echo '</label>'; echo isset($button['content']) && $button['content'] ? $button['content'] . "\r\n" : ''; echo isset($button['messages']) && $button['messages'] ? $button['messages'] . "\r\n" : ''; if (isset($button['setup_url']) && $button['setup_url']) { echo '<input type="hidden" id="' . $service . '_setup_url" name="' . $service . '_setup_url" value="' . $button['setup_url'] . '" />' . "\r\n"; } echo '</div>'; } } echo '<br style="clear:both;" />'; echo '<input id="icl_add_translator_submit" class="button-primary" type="submit" value="' . esc_attr(__('Add translator', 'wpml-translation-management')) . '" />' . "\r\n"; echo '</form>' . "\r\n"; echo '</div>' . "\r\n"; } else { _e('No add translator interface available', 'wpml-translation-management'); } } // Translators lists // Local translators $blog_users_t = $iclTranslationManagement->get_blog_translators(); if (TranslationProxy::translator_selection_available()) { $other_service_translators = TranslationProxy_Translator::translation_service_translators_list(); } ?> <?php if (!empty($blog_users_t) || !empty($other_service_translators)) { ?> <h3><?php _e('Current translators', 'wpml-translation-management'); ?> </h3> <table class="widefat fixed" cellspacing="0"> <thead> <?php $this->translators_head_foot_row(); ?> </thead> <tfoot> <?php $this->translators_head_foot_row(); ?> </tfoot> <tbody class="list:user user-list"> <?php if (!empty($blog_users_t)) { foreach ($blog_users_t as $bu) { ?> <?php if (!isset($trstyle) || $trstyle) { $trstyle = ''; } else { $trstyle = ' class="alternate"'; } if ($current_user->ID == $bu->ID) { $edit_link = 'profile.php'; } else { $edit_link = esc_url(add_query_arg('wp_http_referer', urlencode(esc_url(stripslashes($_SERVER['REQUEST_URI']))), "user-edit.php?user_id={$bu->ID}")); } $language_pairs = get_user_meta($bu->ID, $wpdb->prefix . 'language_pairs', true); ?> <tr<?php echo $trstyle; ?> > <td class="column-title"> <strong><a class="row-title" href="<?php echo $edit_link; ?> "><?php echo $bu->user_login; ?> </a></strong> <div class="row-actions"> <a class="edit" href="admin.php?page=<?php echo WPML_TM_FOLDER; ?> /menu/main.php&sm=translators&icl_tm_action=remove_translator&remove_translator_nonce=<?php echo wp_create_nonce('remove_translator'); ?> &user_id=<?php echo $bu->ID; ?> "><?php _e('Remove', 'wpml-translation-management'); ?> </a> | <a class="edit" href="admin.php?page=<?php echo WPML_TM_FOLDER; ?> /menu/main.php&sm=translators&icl_tm_action=edit&user_id=<?php echo $bu->ID; ?> "> <?php _e('Language pairs', 'wpml-translation-management'); ?> </a> </div> </td> <td> <?php $langs = $sitepress->get_active_languages(); ?> <ul> <?php foreach ($language_pairs as $from => $lp) { ?> <?php $tos = array(); foreach ($lp as $to => $null) { if (isset($langs[$to])) { $tos[] = $langs[$to]['display_name']; } elseif ($to) { $_lang = $sitepress->get_language_details($to); if ($_lang) { $tos[] = '<i>' . $_lang['display_name'] . __(' (inactive)', 'wpml-translation-management') . '</i>'; } } } ?> <li><?php @printf(__('%s to %s', 'wpml-translation-management'), $langs[$from]['display_name'], join(', ', $tos)); ?> </li> <?php } ?> </ul> </td> <td> Local </td> <td> <a href="admin.php?page=<?php echo WPML_TM_FOLDER; ?> /menu/main.php&sm=translators&icl_tm_action=edit&user_id=<?php echo $bu->ID; ?> "><?php _e('edit languages', 'wpml-translation-management'); ?> </a> </td> </tr> <?php } } ?> <?php if (!empty($other_service_translators)) { foreach ($other_service_translators as $rows) { ?> <?php if (!isset($trstyle) || $trstyle) { $trstyle = ''; } else { $trstyle = ' class="alternate"'; } $language_pairs = isset($rows['langs']) ? $rows['langs'] : ''; ?> <tr<?php echo $trstyle; ?> > <td class="column-title"> <strong><?php echo isset($rows['name']) ? $rows['name'] : ''; ?> </strong> <div class="row-actions"> <?php echo isset($rows['action']) ? $rows['action'] : ''; ?> </div> </td> <td> <?php $langs = $sitepress->get_active_languages(); if (is_array($language_pairs)) { ?> <ul> <?php foreach ($language_pairs as $from => $lp) { $from = isset($langs[$from]['display_name']) ? $langs[$from]['display_name'] : $from; $tos = array(); foreach ($lp as $to) { $tos[] = isset($langs[$to]['display_name']) ? $langs[$to]['display_name'] : $to; } ?> <li><?php printf(__('%s to %s', 'wpml-translation-management'), $from, join(', ', $tos)); ?> </li> <?php } ?> </ul> <?php } ?> </td> <td> <?php echo isset($rows['type']) ? icl_do_not_promote() ? __('Translation Service', 'sitepress') : $rows['type'] : ''; ?> </td> <td> <?php echo isset($rows['action']) ? $rows['action'] : ''; ?> </td> </tr> <?php } } ?> </tbody> </table> <?php } else { $message = __("You haven't added any translator accounts yet.", 'wpml-translation-management'); ICL_AdminNotifier::display_instant_message($message, 'warning'); } wp_nonce_field('get_users_not_trans_nonce', 'get_users_not_trans_nonce'); } //if ( current_user_can('list_users') ) ?> </div> <?php }
define('ICL_LANGUAGE_NOT_SUPPORTED', 3); global $wpdb, $sitepress; $target = filter_input(INPUT_GET, 'target', FILTER_SANITIZE_FULL_SPECIAL_CHARS); $auto_resize = filter_input(INPUT_GET, 'auto_resize', FILTER_VALIDATE_BOOLEAN | FILTER_NULL_ON_FAILURE); $unload_cb = filter_input(INPUT_GET, 'unload_cb', FILTER_SANITIZE_FULL_SPECIAL_CHARS | FILTER_NULL_ON_FAILURE); // Adding a translator if (preg_match('|^@select-translators;([^;]+);([^;]+)@|', $target, $matches)) { $source_language = $matches[1]; $target_language = $matches[2]; $project = TranslationProxy::get_current_project(); try { $lp_setting_index = 'language_pairs'; $language_pairs = $sitepress->get_setting($lp_setting_index, array()); if (!isset($language_pairs[$source_language][$target_language]) || $language_pairs[$source_language][$target_language] == 0) { $language_pairs[$source_language][$target_language] = 1; TranslationProxy_Translator::update_language_pairs($project, $language_pairs); $sitepress->set_setting($lp_setting_index, $language_pairs, true); } $target = $project->select_translator_iframe_url($source_language, $target_language); } catch (Exception $e) { if ($e->getCode() == ICL_LANGUAGE_NOT_SUPPORTED) { printf(__('<p>Requested languages are not supported by the translation service (%s). Please <a%s>contact us</a> for support. </p>', 'sitepress'), $e->getMessage(), ' target="_blank" href="http://wpml.org/?page_id=5255"'); } else { printf(__('<p>Could not add the requested languages. Please <a%s>contact us</a> for support. </p><p>Show <a%s>debug information</a>.</p>', 'sitepress'), ' target="_blank" href="http://wpml.org/?page_id=5255"', ' a href="admin.php?page=' . ICL_PLUGIN_FOLDER . '/menu/troubleshooting.php&icl_action=icl-connection-test' . '#icl-connection-test"'); } exit; } } $target .= strpos($target, '?') === false ? '?' : '&'; $target .= "lc=" . $sitepress->get_admin_language(); ?>
public static function translators_dropdown($args = array()) { $dropdown = ''; /** @var $from string|false */ /** @var $to string|false */ /** @var $classes string|false */ /** @var $id string|false */ /** @var $name string|false */ /** @var $selected bool */ /** @var $echo bool */ /** @var $add_label bool */ /** @var $services array */ /** @var $show_service bool */ /** @var $disabled bool */ /** @var $default_name bool|string */ /** @var $local_only bool */ //set default value for variables $from = false; $to = false; $id = 'translator_id'; $name = 'translator_id'; $selected = 0; $echo = true; $add_label = false; $services = array('local'); $show_service = true; $disabled = false; $default_name = false; $local_only = false; extract($args, EXTR_OVERWRITE); $translators = array(); try { $translation_service = TranslationProxy::get_current_service(); $translation_service_id = TranslationProxy::get_current_service_id(); $translation_service_name = TranslationProxy::get_current_service_name(); $is_service_authenticated = TranslationProxy::is_service_authenticated(); //if translation service does not support translators choice, always shows first available if (isset($translation_service->id) && !TranslationProxy::translator_selection_available() && $is_service_authenticated) { $translators[] = (object) array('ID' => TranslationProxy_Service::get_wpml_translator_id($translation_service->id), 'display_name' => __('First available', 'sitepress'), 'service' => $translation_service_name); } elseif (in_array($translation_service_id, $services) && $is_service_authenticated) { $lang_status = TranslationProxy_Translator::get_language_pairs(); if (empty($lang_status)) { $lang_status = array(); } foreach ((array) $lang_status as $language_pair) { if ($from && $from != $language_pair['from']) { continue; } if ($to && $to != $language_pair['to']) { continue; } if (!empty($language_pair['translators'])) { if (1 < count($language_pair['translators'])) { $translators[] = (object) array('ID' => TranslationProxy_Service::get_wpml_translator_id($translation_service->id), 'display_name' => __('First available', 'sitepress'), 'service' => $translation_service_name); } foreach ($language_pair['translators'] as $tr) { if (!isset($_icl_translators[$tr['id']])) { $translators[] = $_icl_translators[$tr['id']] = (object) array('ID' => TranslationProxy_Service::get_wpml_translator_id($translation_service->id, $tr['id']), 'display_name' => $tr['nickname'], 'service' => $translation_service_name); } } } } } if (in_array('local', $services)) { $translators[] = (object) array('ID' => 0, 'display_name' => __('First available', 'sitepress')); $translators = array_merge($translators, self::get_blog_translators(array('from' => $from, 'to' => $to))); } $translators = apply_filters('wpml_tm_translators_list', $translators); $dropdown .= '<select id="' . esc_attr($id) . '" name="' . esc_attr($name) . '" ' . ($disabled ? 'disabled="disabled"' : '') . '>'; if ($default_name) { $dropdown_selected = selected($selected, false, false); $dropdown .= '<option value="" ' . $dropdown_selected . '>'; $dropdown .= esc_html($default_name); $dropdown .= '</option>'; } foreach ($translators as $t) { if ($local_only && isset($t->service)) { continue; } $current_translator = $t->ID; $dropdown_selected = selected($selected, $current_translator, false); $dropdown .= '<option value="' . $current_translator . '" ' . $dropdown_selected . '>'; $dropdown .= esc_html($t->display_name); if ($show_service) { $dropdown .= ' ('; $dropdown .= isset($t->service) ? $t->service : __('Local', 'sitepress'); $dropdown .= ')'; } $dropdown .= '</option>'; } $dropdown .= '</select>'; } catch (TranslationProxy_Api_Error $ex) { $dropdown .= __('Translation Proxy error', 'sitepress') . ': ' . $ex->getMessage(); } catch (Exception $ex) { $dropdown .= __('Error', 'sitepress') . ': ' . $ex->getMessage(); } if ($add_label) { $dropdown = '<label for="' . esc_attr($id) . '">' . __('Translation jobs for:', 'wpml-translation-management') . '</label> ' . $dropdown; } if ($echo) { echo $dropdown; } return $dropdown; }
function create_icl_account() { global $sitepress; $site_id = false; $access_key = false; $user = $this->create_user_account(); require_once ICL_PLUGIN_PATH . '/lib/icl_api.php'; $icl_query = new ICanLocalizeQuery(); list($site_id, $access_key) = $icl_query->createAccount($user, TA_URL_ENDPOINT); if (!$site_id) { $user['pickup_type'] = ICL_PRO_TRANSLATION_PICKUP_POLLING; list($site_id, $access_key) = $icl_query->createAccount($user, TA_URL_ENDPOINT); } if ($site_id) { if ($user['pickup_type'] == ICL_PRO_TRANSLATION_PICKUP_POLLING) { $sitepress->set_setting('translation_pickup_method', ICL_PRO_TRANSLATION_PICKUP_POLLING); } $icl_query = new ICanLocalizeQuery($site_id, $access_key); $website_details = $icl_query->get_website_details(TA_URL_ENDPOINT); TranslationProxy_Translator::get_icl_translator_status($website_details); } return array($site_id, $access_key); }
function save_post_translation($translation_id, $translation) { global $wpdb, $sitepress_settings, $sitepress, $icl_adjust_id_url_filter_off; $icl_adjust_id_url_filter_off = true; $translation_info = $wpdb->get_row($wpdb->prepare("\n SELECT * FROM {$wpdb->prefix}icl_translations tr\n JOIN {$wpdb->prefix}icl_translation_status ts ON ts.translation_id = tr.translation_id\n WHERE tr.translation_id=%d", $translation_id)); $lang_code = $translation_info->language_code; $trid = $translation_info->trid; $original_post_details = $wpdb->get_row("\n SELECT p.post_author, p.post_type, p.post_status, p.comment_status, p.ping_status, p.post_parent, p.menu_order, p.post_date, t.language_code\n FROM {$wpdb->prefix}icl_translations t \n JOIN {$wpdb->posts} p ON t.element_id = p.ID AND CONCAT('post_',p.post_type) = t.element_type\n WHERE trid='{$trid}' AND p.ID = '{$translation['original_id']}'\n "); //is the original post a sticky post? $sticky_posts = get_option('sticky_posts'); $is_original_sticky = $original_post_details->post_type == 'post' && in_array($translation['original_id'], $sticky_posts); $this->_content_fix_image_paths_in_body($translation); $this->_content_fix_relative_link_paths_in_body($translation); $this->_content_decode_shortcodes($translation); // handle the page parent and set it to the translated parent if we have one. if ($original_post_details->post_parent) { $post_parent_trid = $wpdb->get_var($wpdb->prepare("\tSELECT trid\n\t\t\t\t\t\tFROM {$wpdb->prefix}icl_translations\n\t\t\t\t\t\tWHERE element_type= %s AND element_id = %d ", 'post_' . $original_post_details->post_type, $original_post_details->post_parent)); if ($post_parent_trid) { $parent_id = $wpdb->get_var($wpdb->prepare("SELECT element_id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM {$wpdb->prefix}icl_translations\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE element_type = %s\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t AND trid = %d\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t AND language_code = %s ", 'post_' . $original_post_details->post_type, $post_parent_trid, $lang_code)); } } // determine post id based on trid $post_id = $translation_info->element_id; if ($post_id) { // see if the post really exists - make sure it wasn't deleted while the plugin was if (!$wpdb->get_var($wpdb->prepare("SELECT ID FROM {$wpdb->posts} WHERE ID = %d ", $post_id))) { $is_update = false; $q = "DELETE FROM {$wpdb->prefix}icl_translations WHERE element_type=%s AND element_id=%d"; $q_prepared = $wpdb->prepare($q, array('post_' . $original_post_details->post_type, $post_id)); $wpdb->query($q_prepared); } else { $is_update = true; $postarr['ID'] = $_POST['post_ID'] = $post_id; } } else { $is_update = false; } $postarr['post_title'] = $translation['title']; if ($sitepress_settings['translated_document_page_url'] == 'translate' && isset($translation['URL'])) { $postarr['post_name'] = $translation['URL']; } $postarr['post_content'] = $translation['body']; if (isset($translation['excerpt']) && $translation['excerpt'] != "") { $postarr['post_excerpt'] = $translation['excerpt']; } if (isset($translated_taxonomies) && is_array($translated_taxonomies)) { foreach ($translated_taxonomies as $taxonomy => $values) { $postarr['tax_input'][$taxonomy] = join(',', (array) $values); } } $postarr['post_author'] = $original_post_details->post_author; $postarr['post_type'] = $original_post_details->post_type; if ($sitepress_settings['sync_comment_status']) { $postarr['comment_status'] = $original_post_details->comment_status; } if ($sitepress_settings['sync_ping_status']) { $postarr['ping_status'] = $original_post_details->ping_status; } if ($sitepress_settings['sync_page_ordering']) { $postarr['menu_order'] = $original_post_details->menu_order; } if ($sitepress_settings['sync_private_flag'] && $original_post_details->post_status == 'private') { $postarr['post_status'] = 'private'; } if (!$is_update) { $postarr['post_status'] = !$sitepress_settings['translated_document_status'] ? 'draft' : $original_post_details->post_status; } else { // set post_status to the current post status. $postarr['post_status'] = $wpdb->get_var($wpdb->prepare("SELECT post_status\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM {$wpdb->prefix}posts\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE ID = %d ", $post_id)); } if ($sitepress_settings['sync_post_date']) { $postarr['post_date'] = $original_post_details->post_date; } if (isset($parent_id) && $sitepress_settings['sync_page_parent']) { $_POST['post_parent'] = $postarr['post_parent'] = $parent_id; $_POST['parent_id'] = $postarr['parent_id'] = $parent_id; } if ($is_update) { $postarr['post_name'] = $wpdb->get_var($wpdb->prepare("SELECT post_name FROM {$wpdb->posts} WHERE ID=%d", $post_id)); } $_POST['trid'] = $trid; $_POST['lang'] = $lang_code; $_POST['skip_sitepress_actions'] = true; global $wp_rewrite; if (!isset($wp_rewrite)) { $wp_rewrite = new WP_Rewrite(); } kses_remove_filters(); $postarr = apply_filters('icl_pre_save_pro_translation', $postarr); $new_post_id = wp_insert_post($postarr); do_action('icl_pro_translation_saved', $new_post_id); // set stickiness if ($is_original_sticky && $sitepress_settings['sync_sticky_flag']) { stick_post($new_post_id); } else { if ($original_post_details->post_type == 'post' && $is_update) { unstick_post($new_post_id); //just in case - if this is an update and the original post stckiness has changed since the post was sent to translation } } foreach ((array) $sitepress_settings['translation-management']['custom_fields_translation'] as $cf => $op) { if ($op == 1) { $sitepress->_sync_custom_field($translation['original_id'], $new_post_id, $cf); } elseif ($op == 2 && isset($translation['field-' . $cf])) { $field_translation = $translation['field-' . $cf]; $field_type = $translation['field-' . $cf . '-type']; if ($field_type == 'custom_field') { $field_translation = str_replace('�A;', "\n", $field_translation); // always decode html entities eg decode & to & $field_translation = html_entity_decode($field_translation); update_post_meta($new_post_id, $cf, $field_translation); } } } // set specific custom fields $copied_custom_fields = array('_top_nav_excluded', '_cms_nav_minihome'); foreach ($copied_custom_fields as $ccf) { $val = get_post_meta($translation['original_id'], $ccf, true); update_post_meta($new_post_id, $ccf, $val); } // sync _wp_page_template if ($sitepress_settings['sync_page_template']) { $_wp_page_template = get_post_meta($translation['original_id'], '_wp_page_template', true); update_post_meta($new_post_id, '_wp_page_template', $_wp_page_template); } // sync post format if ($sitepress_settings['sync_post_format']) { $_wp_post_format = get_post_format($translation['original_id']); set_post_format($new_post_id, $_wp_post_format); } if (!$new_post_id) { return false; } if (!$is_update) { $wpdb->update($wpdb->prefix . 'icl_translations', array('element_id' => $new_post_id), array('translation_id' => $translation_id)); } update_post_meta($new_post_id, '_icl_translation', 1); TranslationManagement::set_page_url($new_post_id); global $iclTranslationManagement; $ts = array('status' => ICL_TM_COMPLETE, 'needs_update' => 0, 'translation_id' => $translation_id); $translator_id = $wpdb->get_var($wpdb->prepare("SELECT translator_id FROM {$wpdb->prefix}icl_translation_status WHERE translation_id=%d", $translation_id)); if (!$translator_id) { $lang_status = TranslationProxy_Translator::get_language_pairs(); foreach ($lang_status as $languages_pair) { if ($languages_pair['from'] == $original_post_details->language_code && $languages_pair['to'] == $lang_code && isset($languages_pair['translators'][0]['id'])) { $ts['translator_id'] = $languages_pair['translators'][0]['id']; break; } } } // update translation status $iclTranslationManagement->update_translation_status($ts); // add new translation job //$translation_package = $iclTranslationManagement->create_translation_package(get_post($translation['original_id'])); //$job_id = $iclTranslationManagement->add_translation_job($translation_info->rid, $translation_info->translator_id, $translation_package); $job_id = $iclTranslationManagement->get_translation_job_id($trid, $lang_code); // save the translation $iclTranslationManagement->mark_job_done($job_id); $parts = explode('_', $translation['original_id']); if ($parts[0] != 'external') { $iclTranslationManagement->save_job_fields_from_post($job_id, get_post($new_post_id)); $this->_content_fix_links_to_translated_content($new_post_id, $lang_code, "post_{$original_post_details->post_type}"); // Now try to fix links in other translated content that may link to this post. $sql = "SELECT\n tr.element_id\n FROM\n {$wpdb->prefix}icl_translations tr\n JOIN\n {$wpdb->prefix}icl_translation_status ts\n ON\n tr.translation_id = ts.translation_id\n WHERE\n ts.links_fixed = 0 AND tr.element_type = %s AND tr.language_code = %s AND tr.element_id IS NOT NULL"; $sql_prepared = $wpdb->prepare($sql, array('post_' . $original_post_details->post_type, $lang_code)); $needs_fixing = $wpdb->get_results($sql_prepared); foreach ($needs_fixing as $id) { if ($id->element_id != $new_post_id) { // fix all except the new_post_id. We have already done this. $this->_content_fix_links_to_translated_content($id->element_id, $lang_code, "post_{$original_post_details->post_type}"); } } // if this is a parent page then make sure it's children point to this. $this->fix_translated_children($translation['original_id'], $new_post_id, $lang_code); } WPML_Translation_Job_Terms::save_terms_from_job($job_id, $lang_code); do_action('icl_pro_translation_completed', $new_post_id); return true; }
private function service_has_accepted_translators() { $result = false; $icl_data = TranslationProxy_Translator::get_icl_translator_status(); if (isset($icl_data['icl_lang_status']) && is_array($icl_data['icl_lang_status'])) { foreach ($icl_data['icl_lang_status'] as $translator) { if (isset($translator['contract_id']) && $translator['contract_id'] != 0) { $result = true; break; } } } return $result; }
define('ICL_LANGUAGE_NOT_SUPPORTED', 3); global $wpdb, $sitepress; $target = filter_input(INPUT_GET, 'target', FILTER_SANITIZE_FULL_SPECIAL_CHARS); $auto_resize = filter_input(INPUT_GET, 'auto_resize', FILTER_VALIDATE_BOOLEAN | FILTER_NULL_ON_FAILURE); $unload_cb = filter_input(INPUT_GET, 'unload_cb', FILTER_SANITIZE_FULL_SPECIAL_CHARS | FILTER_NULL_ON_FAILURE); // Adding a translator if (preg_match('|^@select-translators;([^;]+);([^;]+)@|', $target, $matches)) { $source_language = $matches[1]; $target_language = $matches[2]; $project = TranslationProxy::get_current_project(); try { $iclsettings['language_pairs'] = $sitepress->get_setting('language_pairs', array()); if (!isset($iclsettings['language_pairs'][$source_language][$target_language]) || $iclsettings['language_pairs'][$source_language][$target_language] == 0) { $iclsettings['language_pairs'][$source_language][$target_language] = 1; TranslationProxy_Translator::update_language_pairs($project, $iclsettings['language_pairs']); $sitepress->save_settings($iclsettings); } } catch (Exception $e) { if ($e->getCode() == ICL_LANGUAGE_NOT_SUPPORTED) { printf(__('<p>Requested languages are not supported by the translation service (%s). Please <a%s>contact us</a> for support. </p>', 'sitepress'), $e->getMessage(), ' target="_blank" href="http://wpml.org/?page_id=5255"'); } else { printf(__('<p>Could not add the requested languages. Please <a%s>contact us</a> for support. </p><p>Show <a%s>debug information</a>.</p>', 'sitepress'), ' target="_blank" href="http://wpml.org/?page_id=5255"', ' a href="admin.php?page=' . ICL_PLUGIN_FOLDER . '/menu/troubleshooting.php&icl_action=icl-connection-test' . '#icl-connection-test"'); } exit; } $target = $project->select_translator_iframe_url($source_language, $target_language); } $target .= strpos($target, '?') === false ? '?' : '&'; $target .= "lc=" . $sitepress->get_admin_language(); ?>
/** * Handles the display of notices in the TM translators tab */ private function handle_notices() { global $sitepress; $lang_status = TranslationProxy_Translator::get_icl_translator_status(); if (!empty($lang_status)) { $sitepress->save_settings($lang_status); } if (!defined('DOING_AJAX')) { $this->service_incomplete_local_jobs_notice(); $this->service_authentication_notice(); } }
/** * Get all string jobs sent to remote translation service * This function takes the same input array as does $iclTranslationManagement->get_translation_jobs * 'from' should contain the language code for the source of the translation job * 'to' specifies the target language code * 'status' follows the same conventions as for normal jobs so 1 and 2 are waiting for translator and 10 is * complete. Other values are not supported for strings at this point and will lead to empty results * * @param array $args * @param bool $only_ids * * @return array Array of jobs, every job is object * @global object $wpdb * @global object $sitepress * */ public function get_strings_jobs($args = array(), $only_ids = false) { global $wpdb, $sitepress; $translator_id = ""; $from = ""; $to = ""; $status = ""; $service = false; extract($args, EXTR_OVERWRITE); $where = !empty($from) ? $wpdb->prepare(" AND sc.language = %s ", $from) : ''; $where .= !empty($to) ? $wpdb->prepare(" AND st.language = %s ", $to) : ''; $where .= $status ? $where .= $wpdb->prepare(" AND st.status = %d ", $status == ICL_TM_IN_PROGRESS ? ICL_TM_WAITING_FOR_TRANSLATOR : $status) : ''; $service = is_numeric($translator_id) ? 'local' : $service; $service = $service !== 'local' && strpos($translator_id, "ts-") !== false ? substr($translator_id, 3) : $service; $where .= $service === 'local' ? $wpdb->prepare(" AND st.translator_id = %s ", $translator_id) : ''; $where .= $service !== false ? $wpdb->prepare(" AND st.translation_service = %s ", $service) : ''; $cols = "st.id, tb.id AS batch_id" . ($only_ids === false ? ",\n s.language AS source_language_code,\n st.language AS language_code,\n st.status,\n st.string_id,\n s.name,\n s.value,\n tb.id AS batch_id,\n st.translation_service,\n st.translator_id,\n u.display_name as translator_name,\n COUNT( st.id ) as strings_count" : ""); $query = "\tSELECT\n\t\t\t\t\t{$cols}\n\t\t\t\t\tFROM {$wpdb->prefix}icl_string_translations AS st\n\t\t\t\t\tINNER JOIN {$wpdb->prefix}icl_strings AS s\n\t\t\t\t\t\tON st.string_id = s.id\n\t\t\t\t\tINNER JOIN {$wpdb->prefix}icl_translation_batches AS tb\n\t\t\t\t\t\tON tb.id = st.batch_id\n\t\t\t\t\tLEFT JOIN {$wpdb->users} u\n\t\t\t\t ON st.translator_id = u.ID\n\t\t\t\t\tWHERE 1 {$where}\n\t\t\t\t\tGROUP BY st.id, s.id"; $result = $wpdb->get_results($query); if ($only_ids === false) { foreach ($result as $num => $value) { $lang_from = $sitepress->get_language_details($value->source_language_code); $lang_to = $sitepress->get_language_details($value->language_code); $lang_text = $lang_from['display_name'] . ' » ' . $lang_to['display_name']; $result[$num]->lang_text = $lang_text; if ($value->translation_service == TranslationProxy::get_current_service_id()) { $result[$num]->translator_name = TranslationProxy_Translator::get_translator_name($value->translator_id); } } } return $result; }
/** * Return translator status array. * * @param bool $force * * @return array */ public function get_icl_translator_status($force = false) { return TranslationProxy_Translator::get_icl_translator_status($force); }
public function get_icl_translators() { remove_filter('otgs_translation_get_services', 'filter_tp_services'); $icl_data = TranslationProxy_Translator::get_icl_translator_status(); return isset($icl_data['icl_lang_status']) ? $icl_data['icl_lang_status'] : array(); }
$wpml_tm_menus = new WPML_TM_Menus(); } if (isset($wpml_tm_menus)) { $wpml_tm_menus->build_content_dashboard_fetch_translations_box(); } if (count($active_languages = $sitepress->get_active_languages()) > 1) { ?> <div><a href="javascript:void(0)" onclick="jQuery(this).parent().next('.wrapper').slideToggle();" style="display:block; padding:5px; border: 1px solid #eee; margin-bottom:2px; background-color: #F7F7F7;"><?php _e('Content translation', 'wpml-translation-management'); ?> </a> </div> <div class="wrapper" style="display:none; padding: 5px 10px; border: 1px solid #eee; border-top: 0px; margin:-11px 0 2px 0;"> <?php $your_translators = TranslationManagement::get_blog_translators(); $other_service_translators = TranslationProxy_Translator::translation_service_translators_list(); if (!empty($your_translators) || !empty($other_service_translators)) { echo '<p><strong>' . __('Your translators', 'wpml-translation-management') . '</strong></p><ul>'; if (!empty($your_translators)) { foreach ($your_translators as $your_translator) { echo '<li>'; if ($current_user->ID == $your_translator->ID) { $edit_link = 'profile.php'; } else { $edit_link = esc_url(add_query_arg('wp_http_referer', urlencode(esc_url(stripslashes($_SERVER['REQUEST_URI']))), "user-edit.php?user_id={$your_translator->ID}")); } echo '<a href="' . $edit_link . '"><strong>' . $your_translator->display_name . '</strong></a> - '; foreach ($your_translator->language_pairs as $from => $lp) { $tos = array(); foreach ($lp as $to => $null) { if (isset($active_languages[$to])) {