public static function translation_send_strings_local($string_ids, $target, $translator = null, $basket_name = null)
 {
     global $wpdb;
     static $site_translators;
     if (!isset($site_translators)) {
         $site_translators = TranslationManagement::get_blog_translators();
     }
     $mkey = $wpdb->prefix . 'strings_notification';
     $lkey = $wpdb->prefix . 'language_pairs';
     $slang = TranslationProxy_Basket::get_source_language();
     foreach ($string_ids as $string_id) {
         $batch_id = TranslationProxy_Batch::update_translation_batch($basket_name);
         $added = icl_add_string_translation($string_id, $target, null, ICL_TM_WAITING_FOR_TRANSLATOR, $translator, 'local', $batch_id);
         if ($added) {
             foreach ($site_translators as $key => $st) {
                 $ulangs = isset($st->{$lkey}) ? $st->{$lkey} : false;
                 if (!empty($ulangs) && !empty($ulangs[$slang][$target])) {
                     $enot = isset($st->{$mkey}) ? $st->{$mkey} : false;
                     if (empty($enot[$slang][$target])) {
                         self::translator_notification($st, $slang, $target);
                         $enot[$slang][$target] = 1;
                         $site_translators[$key]->{$mkey} = $enot;
                         update_option($wpdb->prefix . 'icl_translators_cached', $site_translators);
                     }
                 }
             }
         }
     }
     return 1;
 }
Пример #2
0
 function new_job_any($job_id)
 {
     global $iclTranslationManagement, $sitepress, $wpdb;
     $job = $iclTranslationManagement->get_translation_job($job_id);
     $translators = TranslationManagement::get_blog_translators(array('to' => $job->language_code));
     $edit_url = apply_filters('icl_job_edit_url', admin_url('admin.php?page=' . WPML_TM_FOLDER . '/menu/translations-queue.php&job_id=' . $job_id), $job_id);
     foreach ($translators as $t) {
         if ($job->manager_id == $t->ID) {
             continue;
         }
         // get current user admin language
         $user_language = $sitepress->get_user_admin_language($t->ID);
         // override locale
         $sitepress->switch_locale($user_language);
         $lang_from = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", $job->source_language_code, $user_language));
         $lang_to = $wpdb->get_var($wpdb->prepare("SELECT name FROM {$wpdb->prefix}icl_languages_translations WHERE language_code='%s' AND display_language_code='%s'", $job->language_code, $user_language));
         $post_link = $iclTranslationManagement->tm_post_permalink($job->original_doc_id);
         if ($post_link != "") {
             $post_link = sprintf(__("\nView the original document in %s here: %s\n", 'sitepress'), $lang_from, $post_link);
         }
         $mail['to'] = $t->display_name . ' <' . $t->user_email . '>';
         //$mail['to'] = $t->user_email;
         $mail['subject'] = sprintf(__('New translation job from %s', 'sitepress'), get_bloginfo('name'));
         $mail['body'] = sprintf(__("New job available from %s to %s.\n%s\nStart editing: %s", 'sitepress'), $lang_from, $lang_to, $post_link, $edit_url);
         $mail['type'] = 'translator';
         $this->send_mail($mail, $user_language);
         //restore locale
         $sitepress->switch_locale();
     }
 }
 /**
  * @param array $args
  *
  * @return array
  */
 function get_blog_translators($args = array())
 {
     $translators = TranslationManagement::get_blog_translators($args);
     foreach ($translators as $key => $user) {
         $translators[$key] = isset($user->data) ? $user->data : $user;
     }
     return $translators;
 }
 public function new_job_notification_mail($job_id)
 {
     global $iclTranslationManagement, $sitepress, $wpdb;
     $job = $iclTranslationManagement->get_translation_job(array($job_id));
     if (isset($job->language_code)) {
         $translators = TranslationManagement::get_blog_translators(array('to' => $job->language_code));
     } else {
         $translators = array();
     }
     $edit_url = apply_filters('icl_job_edit_url', admin_url('admin.php?page=' . WPML_TM_FOLDER . '/menu/translations-queue.php&job_id=' . $job_id), $job_id);
     foreach ($translators as $t) {
         if (isset($job->manager_id) && isset($t->ID) && $job->manager_id == $t->ID) {
             continue;
         }
         if (!isset($job->source_language_code) || !isset($job->language_code) || !isset($t->language_pairs) || !isset($t->language_pairs[$job->source_language_code][$job->language_code])) {
             continue;
         }
         // get current user admin language
         $user_language = $sitepress->get_user_admin_language($t->ID);
         // override locale
         $sitepress->switch_locale($user_language);
         list($lang_from, $lang_to) = $this->get_lang_to_from($job, $user_language);
         $post_link = $iclTranslationManagement->tm_post_permalink($job->original_doc_id);
         if ($post_link != "") {
             $post_link = sprintf(__("\nView the original document in %s here: %s\n", 'sitepress'), $lang_from, $post_link);
         }
         $mail['to'] = $t->display_name . ' <' . $t->user_email . '>';
         //$mail['to'] = $t->user_email;
         $mail['subject'] = sprintf(__('New translation job from %s', 'sitepress'), get_bloginfo('name'));
         $mail['body'] = sprintf(__("New job available from %s to %s.\n%s\nStart editing: %s", 'sitepress'), $lang_from, $lang_to, $post_link, $edit_url);
         $mail['type'] = 'translator';
         $this->enqueue_mail($mail, $user_language);
         //restore locale
         $sitepress->switch_locale();
     }
 }
        <?php 
// shows only when translation polling is on and there are translations in progress
$ICL_Pro_Translation->get_icl_manually_tranlations_box('icl_cyan_box');
?>
        <?php 
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 = TranslationManagement::icanlocalize_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) {
Пример #6
0
function _icl_translation_send_strings_local($string_ids, $target)
{
    global $wpdb, $sitepress_settings;
    static $site_translators;
    $site_translators = TranslationManagement::get_blog_translators();
    $mkey = $wpdb->prefix . 'strings_notification';
    $lkey = $wpdb->prefix . 'language_pairs';
    $slang =& $sitepress_settings['st']['strings_language'];
    foreach ($string_ids as $string_id) {
        $added = icl_add_string_translation($string_id, $target, NULL, ICL_STRING_TRANSLATION_WAITING_FOR_TRANSLATOR);
        if ($added) {
            foreach ($site_translators as $key => $st) {
                $ulangs = isset($st->{$lkey}) ? $st->{$lkey} : false;
                if (!empty($ulangs) && !empty($ulangs[$slang][$target])) {
                    $enot = isset($st->{$mkey}) ? $st->{$mkey} : false;
                    if (empty($enot[$sitepress_settings['st']['strings_language']][$target])) {
                        _icl_st_translator_notification($st, $sitepress_settings['st']['strings_language'], $target);
                        $enot[$sitepress_settings['st']['strings_language']][$target] = 1;
                        $site_translators[$key]->{$mkey} = $enot;
                        update_option($wpdb->prefix . 'icl_translators_cached', $site_translators);
                        //printf("Notify %d for %s -> %s <br />", $st->ID, $sitepress_settings['st']['strings_language'], $target);
                    } else {
                        //printf("Already notified %d for %s -> %s <br />", $st->ID, $sitepress_settings['st']['strings_language'], $target);
                    }
                }
            }
        }
    }
    return 1;
}
Пример #7
0
/**
 * Add/edit local translator form
 *
 * @global object $sitepress
 * @param string $action add|edit
 * @param object $selected_translator
 * @return mixed
 */
function icl_local_edit_translator_form($action = 'add', $selected_translator = 0)
{
    global $sitepress, $iclTranslationManagement;
    $blog_users_nt = TranslationManagement::get_blog_not_translators();
    $blog_users_t = TranslationManagement::get_blog_translators();
    $output = '';
    $return['name'] = __('Local', 'wpml-translation-management');
    $return['description'] = __('Your own translators', 'wpml-translation-management');
    if ($action == 'add' && empty($blog_users_nt)) {
        $output .= '<span class="updated fade" style="padding:4px">' . __('All WordPress users are already translators. To add more translators, first create accounts for them.', 'wpml-translation-management') . '</span>';
        $return['content'] = $output;
        return $return;
    }
    $output .= '<div id="icl_tm_add_user_errors">
        <span class="icl_tm_no_to">' . __('Select user.', 'wpml-translation-management') . '</span>
    </div>
    <input type="hidden" name="icl_tm_action" value="' . $action . '_translator" />' . wp_nonce_field($action . '_translator', $action . '_translator_nonce', true, false);
    if (!$selected_translator) {
        $output .= '<input type="hidden" id="icl_tm_selected_user" name="user_id" />';
        $output .= '<input type="text" id="icl_quick_src_users" placeholder="' . esc_attr__('search', 'sitepress') . '" />';
        $output .= '<img style="display:none;margin-left:3px;" src="' . esc_url(admin_url('images/wpspin_light.gif')) . '" class="waiting" alt="" />';
        if (count($blog_users_nt) <= 10) {
            $cssheight = 20 * count($blog_users_nt) + 5;
            $output .= '<select size="10" class="icl_tm_auto_suggest_dd" style="visibility:hidden;height:' . $cssheight . 'px">';
            foreach ($blog_users_nt as $u) {
                $output .= '<option value="' . $u->ID . '|' . esc_attr($u->display_name) . '">' . $u->display_name . ' (' . $u->user_login . ')' . '</option>';
            }
            $output .= '</select>';
        }
        $output .= '<p>' . __('To add translators, they must first have accounts in WordPress. Translators can have any editing privileges, including subscriber.') . '</p>';
    } else {
        $output .= '<span class="updated fade" style="padding:4px">' . sprintf(__('Editing language pairs for <strong>%s</strong>', 'wpml-translation-management'), esc_html($selected_translator->display_name) . ' (' . $selected_translator->user_login . ')') . '</span>';
        $output .= '<input type="hidden" name="user_id" value="' . $selected_translator->ID . '" />';
    }
    if ($selected_translator) {
        $output .= '<br />

      <div class="icl_tm_lang_pairs"';
        if ($selected_translator) {
            $output .= ' style="display:block"';
        }
        $output .= '>
          <ul>';
        foreach ($sitepress->get_active_languages() as $from_lang) {
            $output .= '<li>
              <label><input class="icl_tm_from_lang" type="checkbox"';
            if ($selected_translator && 0 < @count($selected_translator->language_pairs[$from_lang['code']])) {
                $output .= ' checked="checked"';
            }
            $output .= ' />&nbsp;';
            $output .= sprintf(__('From %s', 'wpml-translation-management'), $from_lang['display_name']) . '</label>
              <div class="icl_tm_lang_pairs_to"';
            if ($selected_translator && 0 < @count($selected_translator->language_pairs[$from_lang['code']])) {
                $output .= ' style="display:block"';
            }
            $output .= '>
                  <small>' . __('to', 'wpml-translation-management') . '</small>
                  <ul>';
            foreach ($sitepress->get_active_languages() as $to_lang) {
                if ($from_lang['code'] == $to_lang['code']) {
                    continue;
                }
                $output .= '<li>
                      <label><input class="icl_tm_to_lang" type="checkbox" name="lang_pairs[' . $from_lang['code'] . '][' . $to_lang['code'] . ']" value="1"';
                if ($selected_translator->ID && isset($selected_translator->language_pairs[$from_lang['code']][$to_lang['code']])) {
                    $output .= ' checked="checked"';
                }
                $output .= ' />&nbsp;';
                $output .= $to_lang['display_name'] . '</label>&nbsp;
                      </li>';
            }
            $output .= '</ul>
              </div>
              </li>';
        }
        $output .= '</ul>';
        $output .= '
      <input class="button-primary" type="submit" value="';
        $output .= $selected_translator ? esc_attr(__('Update', 'wpml-translation-management')) : esc_attr(__('Add as translator', 'wpml-translation-management'));
        $output .= '" />&nbsp;<input type="submit" value="' . __('Cancel', 'wpml-translation-management') . '" name="cancel" class="button-secondary" onclick="history.go(-1); return false;" />';
    }
    $return['content'] = $output;
    return $action == 'edit' ? $output : $return;
}
    public function build_content_translators()
    {
        global $current_user;
        $selected_translator = $this->tm_instance->get_selected_translator();
        $active_service = $this->active_service;
        $service_name = $this->service_name;
        if (current_user_can('list_users') || current_user_can('manage_options')) {
            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="">';
                    $languages = $this->get_translation_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 = '';
                            if (count($services_buttons) == 1 || $only_local_translators && $service == 'local' || isset($_GET['service']) && $_GET['service'] == $service) {
                                $selected = ' checked="checked"';
                            }
                            if (!$only_local_translators && $service != 'local') {
                                $selected = ' 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 = TranslationManagement::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, $this->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 = $this->get_translation_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 = $this->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 = $this->get_translation_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 
    }
Пример #9
0
                    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_nt = TranslationManagement::get_blog_not_translators();
    $blog_users_t = TranslationManagement::get_blog_translators();
    $other_service_translators = TranslationManagement::icanlocalize_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>
            <tr class="thead">
                <th><?php 
        _e('Name', 'wpml-translation-management');
 /**
  * @param array $args
  *
  * @return string
  */
 public function render($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();
     $id .= $from ? '_' . $from . ($to ? '_' . $to : '') : '';
     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', 'wpml-translation-management'), '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', 'wpml-translation-management'), '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', 'wpml-translation-management'));
             $translators = array_merge($translators, TranslationManagement::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', 'wpml-translation-management');
                 $dropdown .= ')';
             }
             $dropdown .= '</option>';
         }
         $dropdown .= '</select>';
     } catch (TranslationProxy_Api_Error $ex) {
         $dropdown .= __('Translation Proxy error', 'wpml-translation-management') . ': ' . $ex->getMessage();
     } catch (Exception $ex) {
         $dropdown .= __('Error', 'wpml-translation-management') . ': ' . $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;
 }
 private function regenerate_wrong_service_data()
 {
     global $wpdb;
     remove_filter('otgs_translation_get_services', 'filter_tp_services');
     TranslationProxy::services(true);
     $translators = $this->get_icl_translators();
     $local_translators = TranslationManagement::get_blog_translators();
     $icl_translator_ids = array();
     $local_translator_ids = array();
     foreach ($translators as $translator) {
         $icl_translator_ids[] = $translator['id'];
     }
     foreach ($local_translators as $translator) {
         $local_translator_ids[] = $translator->ID;
     }
     if ((bool) $icl_translator_ids === true) {
         $icl_translators_snippet = " AND translator_id IN (" . wpml_prepare_in($icl_translator_ids) . ") ";
         $local_translators_snippet = (bool) $local_translator_ids === true ? " AND translator_id NOT IN (" . wpml_prepare_in($local_translator_ids) . ') ' : '';
         $wpdb->query($wpdb->prepare("\tUPDATE {$wpdb->prefix}icl_translation_status s\n\t\t\t\t\t\t\t\t\t\tSET s.translation_service = 'icl'\n\t\t\t\t\t\t\t\t\t\tWHERE s.status = %d\n\t\t\t\t\t\t\t\t\t\t\tAND s.translation_service != %d\n\t\t\t\t\t\t\t\t\t\t\t{$icl_translators_snippet}\n\t\t\t\t\t\t\t\t\t\t\t{$local_translators_snippet}", ICL_TM_IN_PROGRESS, $this->get_icl_service_id()));
     }
 }