Пример #1
0
 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') . ' &raquo;" />' . "\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') . '&nbsp;<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') . '&nbsp;<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 . '>&nbsp;' . $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&amp;sm=translators&amp;icl_tm_action=remove_translator&amp;remove_translator_nonce=<?php 
                        echo wp_create_nonce('remove_translator');
                        ?>
&amp;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&amp;sm=translators&icl_tm_action=edit&amp;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&amp;sm=translators&icl_tm_action=edit&amp;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>&nbsp;' . $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);
 }
Пример #8
0
 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('&#0A;', "\n", $field_translation);
                 // always decode html entities  eg decode &amp; 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;
 }
Пример #10
0
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'] . ' &raquo; ' . $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])) {