Пример #1
0
 public function edit_translator_action($user, $language_pairs)
 {
     $user_id = $this->get_user_id($user);
     if (is_numeric($user_id)) {
         $this->TranslationManagement->edit_translator($user_id, $language_pairs);
     }
 }
 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;
 }
    private function render_current_element_diff()
    {
        if (!$this->current_element->field_finished && !empty($this->job->prev_version)) {
            $prev_value = '';
            foreach ($this->job->prev_version->elements as $pel) {
                if ($this->current_element->field_type == $pel->field_type) {
                    $prev_value = $this->tm_instance->decode_field_data($pel->field_data, $pel->field_format);
                }
            }
            if ($this->current_element->field_format != 'csv_base64') {
                $diff = wp_text_diff($prev_value, $this->tm_instance->decode_field_data($this->current_element->field_data, $this->current_element->field_format));
            }
            if (!empty($diff)) {
                ?>
				<div class="wpml_diff_wrapper">
					<p><a href="#" class="wpml_diff_toggle"><?php 
                _e('Show Changes', 'sitepress');
                ?>
</a></p>

					<div class="wpml_diff">
						<?php 
                echo $diff;
                ?>
					</div>
				</div>
			<?php 
            }
        }
    }
Пример #4
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();
     }
 }
Пример #5
0
 public function get_batch_name()
 {
     if ($this->name == false) {
         $this->name = TranslationManagement::get_batch_name($this->get_id());
     }
     return $this->name;
 }
 /**
  * @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;
 }
 /**
  * Sets up the menu items for non-admin translators pointing at the TM
  * and ST translators interfaces
  */
 function menu()
 {
     if ($this->sitepress->setup()) {
         $wp_api = $this->sitepress->get_wp_api();
         if ($wp_api->current_user_can('wpml_manage_translation_management')) {
             $wp_api->add_submenu_page(apply_filters('icl_menu_main_page', ICL_PLUGIN_FOLDER . '/menu/languages.php'), __('Translations', 'wpml-translation-management'), __('Translations', 'wpml-translation-management'), 'wpml_manage_translation_management', WPML_TM_FOLDER . '/menu/translations-queue.php', array($this, 'translation_queue_page'));
         } elseif ((bool) $this->tm_instance->get_current_translator()->language_pairs === true) {
             $wp_api->add_menu_page(__('Translation interface', 'wpml-translation-management'), __('Translation interface', 'wpml-translation-management'), 'translate', WPML_TM_FOLDER . '/menu/translations-queue.php', array($this, 'translation_queue_page'), ICL_PLUGIN_URL . '/res/img/icon16.png');
         }
     }
 }
 private function update_tm_settings(array $config)
 {
     $section_singular = $this->index_singular;
     $config = array_filter($config);
     $config[$section_singular] = isset($config[$section_singular]) ? $config[$section_singular] : array();
     $this->sync_settings($config);
     // taxonomies - check what's been removed
     if (!empty($this->tm_instance->settings[$this->index_ro])) {
         $config_values = array();
         foreach ($config[$section_singular] as $config_value) {
             $config_values[$config_value['value']] = $config_value['attr']['translate'];
         }
         foreach ($this->tm_instance->settings[$this->index_ro] as $key => $translation_option) {
             if (!isset($config_values[$key])) {
                 unset($this->tm_instance->settings[$this->index_ro][$key]);
             }
         }
         $this->tm_instance->save_settings();
     }
 }
Пример #9
0
function icl_get_blog_users_not_translators()
{
    $translator_drop_down_options = array();
    $nonce = filter_input(INPUT_POST, 'get_users_not_trans_nonce');
    if (!wp_verify_nonce($nonce, 'get_users_not_trans_nonce')) {
        die('Wrong Nonce');
    }
    $blog_users_nt = TranslationManagement::get_blog_not_translators();
    foreach ((array) $blog_users_nt as $u) {
        $label = $u->display_name . ' (' . $u->user_login . ')';
        $value = esc_attr($u->display_name);
        $translator_drop_down_options[] = array('label' => $label, 'value' => $value, 'id' => $u->ID);
    }
    wp_send_json_success($translator_drop_down_options);
}
 /**
  * Sends all jobs from basket in batch mode to translation proxy
  *
  * @param string $basket_name
  * @param array  $batch
  * @param array  $translators
  *
  * @return bool false in case of errors (read from TranslationManagement::get_messages('error') to get errors details)
  */
 private function send_all_jobs(array $batch, array $translators, $basket_name)
 {
     $basket_name_saved = $this->basket->get_name();
     $basket_name = $basket_name_saved ? $basket_name_saved : $basket_name;
     if ($basket_name) {
         $this->basket->set_name($basket_name);
     }
     $valid_jobs = $this->get_valid_jobs_from_basket($batch);
     $this->basket->set_remote_target_languages($this->generate_remote_target_langs($translators, $valid_jobs));
     $basket_items_types = $this->basket->get_item_types();
     foreach ($basket_items_types as $item_type_name => $item_type) {
         $type_basket_items = isset($valid_jobs[$item_type_name]) ? $valid_jobs[$item_type_name] : array();
         do_action('wpml_tm_send_' . $item_type_name . '_jobs', $item_type_name, $item_type, $type_basket_items, $translators, $basket_name);
     }
     // check if there were no errors
     return !$this->tm_instance->messages_by_type('error');
 }
Пример #11
0
function icl_get_job_original_field_content()
{
    global $iclTranslationManagement;
    $error_msg = false;
    $job_id = false;
    $nonce = filter_input(INPUT_POST, 'tm_editor_copy_nonce');
    if (!wp_verify_nonce($nonce, 'icl_copy_from_original_nonce')) {
        die('Wrong Nonce');
    }
    $request_post_tm_editor_job_id = filter_input(INPUT_POST, 'tm_editor_job_id', FILTER_SANITIZE_NUMBER_INT, FILTER_NULL_ON_FAILURE);
    $request_post_tm_editor_field_id = filter_input(INPUT_POST, 'tm_editor_job_field');
    if ($request_post_tm_editor_job_id) {
        $job_id = $request_post_tm_editor_job_id;
    } else {
        $error_msg = "No job id provided.";
    }
    if (!$error_msg && $request_post_tm_editor_job_id) {
        $field = $request_post_tm_editor_field_id;
    } else {
        $error_msg = "No field provided.";
    }
    if (!$error_msg && $job_id && isset($field)) {
        $job = $iclTranslationManagement->get_translation_job($job_id);
        if (isset($job->elements)) {
            foreach ($job->elements as $element) {
                if (sanitize_title($element->field_type) === $field) {
                    // if we find a field by that name we need to decode its contents according to its format
                    $field_contents = TranslationManagement::decode_field_data($element->field_data, $element->field_format);
                    wp_send_json_success($field_contents);
                }
            }
        } elseif (!$job) {
            $error_msg = __("No translation job found: it might have been just cancelled.", 'wpml-translation-management');
        } else {
            $error_msg = __("No fields found in this translation job.", 'wpml-translation-management');
        }
    }
    if (!$error_msg) {
        $error_msg = __("No such field found in the job.", 'wpml-translation-management');
    }
    wp_send_json_error($error_msg);
}
function icl_get_job_original_field_content()
{
    global $iclTranslationManagement;
    $error_msg = false;
    $job_id = false;
    if (isset($_POST['tm_editor_job_id'])) {
        $job_id = $_POST['tm_editor_job_id'];
    } else {
        $error_msg = "No job id provided.";
    }
    if (!$error_msg && isset($_POST['tm_editor_job_id'])) {
        $field = $_POST['tm_editor_job_field'];
    } else {
        $error_msg = "No field provided.";
    }
    if (!$error_msg && $job_id && isset($field)) {
        $job = $iclTranslationManagement->get_translation_job($job_id);
        if (isset($job->elements)) {
            foreach ($job->elements as $element) {
                if (sanitize_title($element->field_type) == $field) {
                    // if we find a field by that name we need to decode its contents according to its format
                    $field_contents = TranslationManagement::decode_field_data($element->field_data, $element->field_format);
                    wp_send_json_success($field_contents);
                }
            }
        } elseif (!$job) {
            $error_msg = _("No translation job found: it might have been just cancelled.", 'wpml-translation-management');
        } else {
            $error_msg = _("No fields found in this translation job.", 'wpml-translation-management');
        }
    }
    if (!$error_msg) {
        $error_msg = _("No such field found in the job.", 'wpml-translation-management');
    }
    wp_send_json_error($error_msg);
}
 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();
     }
 }
Пример #14
0
 function save_post_translation($translation_id, $translation)
 {
     global $wpdb, $sitepress_settings, $sitepress, $wp_taxonomies, $icl_adjust_id_url_filter_off;
     $icl_adjust_id_url_filter_off = true;
     $taxonomies = array_diff(array_keys((array) $wp_taxonomies), array('post_tag', 'category'));
     $tinfo = $wpdb->get_row($wpdb->prepare("\r\n                SELECT * FROM {$wpdb->prefix}icl_translations tr\r\n                    JOIN {$wpdb->prefix}icl_translation_status ts ON ts.translation_id = tr.translation_id\r\n                WHERE tr.translation_id=%d", $translation_id));
     $lang_code = $tinfo->language_code;
     $trid = $tinfo->trid;
     $original_post_details = $wpdb->get_row("\r\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\r\n            FROM {$wpdb->prefix}icl_translations t \r\n            JOIN {$wpdb->posts} p ON t.element_id = p.ID AND CONCAT('post_',p.post_type) = t.element_type\r\n            WHERE trid='{$trid}' AND p.ID = '{$translation['original_id']}'\r\n        ");
     //is the original post a sticky post?
     remove_filter('option_sticky_posts', array($sitepress, 'option_sticky_posts'));
     // remove filter used to get language relevant stickies. get them all
     $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);
     // deal with tags
     if (isset($translation['tags'])) {
         $translated_tags = $translation['tags'];
         $translated_tag_ids = explode(',', $translation['tag_ids']);
         foreach ($translated_tags as $k => $v) {
             $tag_trid = $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_id='{$translated_tag_ids[$k]}' AND element_type='tax_post_tag'");
             // before adding the new term make sure that another tag with the same name doesn't exist. If it does append @lang
             // same term name exists in a different language?
             $term_different_language = $wpdb->get_var("\r\n                    SELECT tm.term_id \r\n                    FROM {$wpdb->term_taxonomy} tx\r\n                        JOIN {$wpdb->terms} tm ON tx.term_id = tm.term_id \r\n                        JOIN {$wpdb->prefix}icl_translations tr ON tx.term_taxonomy_id = tr.element_id\r\n                    WHERE tm.name='" . $wpdb->escape($v) . "' AND tr.element_type LIKE 'tax\\_%' AND tr.language_code <> '{$lang_code}'\r\n                ");
             if ($term_different_language) {
                 $v .= ' @' . $lang_code;
             }
             //tag exists? (in the current language)
             $etag = get_term_by('name', htmlspecialchars($v), 'post_tag');
             if (!$etag) {
                 $etag = get_term_by('name', htmlspecialchars($v) . ' @' . $lang_code, 'post_tag');
             }
             if (!$etag) {
                 $tmp = wp_insert_term($v, 'post_tag');
                 if (!is_wp_error($tmp) && isset($tmp['term_taxonomy_id'])) {
                     $wpdb->update($wpdb->prefix . 'icl_translations', array('language_code' => $lang_code, 'trid' => $tag_trid, 'source_language_code' => $original_post_details->language_code), array('element_type' => 'tax_post_tag', 'element_id' => $tmp['term_taxonomy_id']));
                 }
             } else {
                 $term_taxonomy_id = $etag->term_taxonomy_id;
                 // check whether we have an orphan translation - the same trid and language but a different element id
                 $__translation_id = $wpdb->get_var("\r\n                        SELECT translation_id FROM {$wpdb->prefix}icl_translations \r\n                        WHERE   trid = '{$tag_trid}' \r\n                            AND language_code = '{$lang_code}' \r\n                            AND element_id <> '{$term_taxonomy_id}'\r\n                    ");
                 if ($__translation_id) {
                     $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id={$__translation_id}");
                 }
                 $tag_translation_id = $wpdb->get_var("SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE element_id={$term_taxonomy_id} AND element_type='tax_post_tag'");
                 if ($tag_translation_id) {
                     $wpdb->update($wpdb->prefix . 'icl_translations', array('language_code' => $lang_code, 'trid' => $tag_trid, 'source_language_code' => $original_post_details->language_code), array('element_type' => 'tax_post_tag', 'translation_id' => $tag_translation_id));
                 } else {
                     $wpdb->insert($wpdb->prefix . 'icl_translations', array('language_code' => $lang_code, 'trid' => $tag_trid, 'element_type' => 'tax_post_tag', 'element_id' => $term_taxonomy_id, 'source_language_code' => $original_post_details->language_code));
                 }
             }
         }
     }
     $original_post_tags = array();
     foreach (wp_get_object_terms($translation['original_id'], 'post_tag') as $t) {
         $original_post_tags[] = $t->term_taxonomy_id;
     }
     if ($original_post_tags) {
         $tag_trids = $wpdb->get_col("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_post_tag' AND element_id IN (" . join(',', $original_post_tags) . ")");
         if (!empty($tag_trids)) {
             $tag_tr_tts = $wpdb->get_col("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_post_tag' AND language_code='{$lang_code}' AND trid IN (" . join(',', $tag_trids) . ")");
         }
         if (!empty($tag_tr_tts)) {
             $translated_tags = $wpdb->get_col("SELECT t.name FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} tx ON tx.term_id = t.term_id WHERE tx.taxonomy='post_tag' AND tx.term_taxonomy_id IN (" . join(',', $tag_tr_tts) . ")");
         }
     }
     // deal with categories
     if (isset($translation['categories'])) {
         $translated_cats = $translation['categories'];
         $translated_cats_ids = explode(',', $translation['category_ids']);
         foreach ($translated_cats as $k => $v) {
             //$v = trim(str_replace('<p>', '', $v));
             $cat_trid = $wpdb->get_var("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_id='{$translated_cats_ids[$k]}' AND element_type='tax_category'");
             // before adding the new term make sure that another tag with the same name doesn't exist. If it does append @lang
             // same term name exists in a different language?
             $term_different_language = $wpdb->get_var("\r\n                    SELECT tm.term_id \r\n                    FROM {$wpdb->term_taxonomy} tx\r\n                        JOIN {$wpdb->terms} tm ON tx.term_id = tm.term_id \r\n                        JOIN {$wpdb->prefix}icl_translations tr ON tx.term_taxonomy_id = tr.element_id\r\n                    WHERE tm.name='" . $wpdb->escape($v) . "' AND tr.element_type LIKE 'tax\\_%' AND tr.language_code <> '{$lang_code}'\r\n                ");
             if ($term_different_language) {
                 $v .= ' @' . $lang_code;
             }
             //cat exists?
             $ecat = get_term_by('name', htmlspecialchars($v), 'category');
             if (!$ecat) {
                 $ecat = get_term_by('name', htmlspecialchars($v) . ' @' . $lang_code, 'category');
             }
             if (!$ecat) {
                 // get original category parent id
                 $original_category_parent_id = $wpdb->get_var($wpdb->prepare("SELECT parent FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d", $translated_cats_ids[$k]));
                 if ($original_category_parent_id) {
                     $_op_tax_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy='category' AND term_id=%d", $original_category_parent_id));
                     $_op_trid = $wpdb->get_var($wpdb->prepare("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_category' AND element_id=%d", $_op_tax_id));
                     // get id of the translated category parent
                     $_tp_tax_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE language_code='{$lang_code}' AND trid=%d", $_op_trid));
                     if ($_tp_tax_id) {
                         $category_parent_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy='category' AND term_taxonomy_id=%d", $_tp_tax_id));
                     } else {
                         $category_parent_id = 0;
                     }
                 } else {
                     $category_parent_id = 0;
                 }
                 $tmp = wp_insert_term($v, 'category', array('parent' => $category_parent_id));
                 if (!is_wp_error($tmp) && isset($tmp['term_taxonomy_id'])) {
                     $wpdb->update($wpdb->prefix . 'icl_translations', array('language_code' => $lang_code, 'trid' => $cat_trid, 'source_language_code' => $original_post_details->language_code), array('element_type' => 'tax_category', 'element_id' => $tmp['term_taxonomy_id']));
                     // if this is a parent category, make sure that nesting is correct for all translations
                     $orig_cat_tax_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND source_language_code IS NULL", $cat_trid));
                     $orig_cat_term_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d AND taxonomy='category'", $orig_cat_tax_id));
                     $orig_cat_children = $wpdb->get_col($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE parent=%d", $orig_cat_term_id));
                     if (!empty($orig_cat_children)) {
                         foreach ($orig_cat_children as $ch) {
                             $_tr_child = icl_object_id($ch, 'category', false, $lang_code);
                             if ($_tr_child) {
                                 $wpdb->update($wpdb->term_taxonomy, array('parent' => $tmp['term_id']), array('taxonomy' => 'category', 'term_id' => $_tr_child));
                             }
                         }
                     }
                     delete_option('category_children');
                 }
             } else {
                 $term_taxonomy_id = $ecat->term_taxonomy_id;
                 // check whether we have an orphan translation - the same trid and language but a different element id
                 $__translation_id = $wpdb->get_var("\r\n                        SELECT translation_id FROM {$wpdb->prefix}icl_translations \r\n                        WHERE   trid = '{$cat_trid}' \r\n                            AND language_code = '{$lang_code}' \r\n                            AND element_id <> '{$term_taxonomy_id}'\r\n                    ");
                 if ($__translation_id) {
                     $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id={$__translation_id}");
                 }
                 $cat_translation_id = $wpdb->get_var("SELECT translation_id FROM {$wpdb->prefix}icl_translations WHERE element_id={$term_taxonomy_id} AND element_type='tax_category'");
                 if ($cat_translation_id) {
                     $wpdb->update($wpdb->prefix . 'icl_translations', array('language_code' => $lang_code, 'trid' => $cat_trid, 'source_language_code' => $original_post_details->language_code), array('element_type' => 'tax_category', 'translation_id' => $cat_translation_id));
                 } else {
                     $wpdb->insert($wpdb->prefix . 'icl_translations', array('language_code' => $lang_code, 'trid' => $cat_trid, 'element_type' => 'tax_category', 'element_id' => $term_taxonomy_id, 'source_language_code' => $original_post_details->language_code));
                 }
             }
         }
     }
     $original_post_cats = array();
     foreach (wp_get_object_terms($translation['original_id'], 'category') as $t) {
         $original_post_cats[] = $t->term_taxonomy_id;
     }
     if ($original_post_cats) {
         $cat_trids = $wpdb->get_col("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_category' AND element_id IN (" . join(',', $original_post_cats) . ")");
         if (!empty($cat_trids)) {
             $cat_tr_tts = $wpdb->get_col("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_category' AND language_code='{$lang_code}' AND trid IN (" . join(',', $cat_trids) . ")");
         }
         if (!empty($cat_tr_tts)) {
             $translated_cats_ids = $wpdb->get_col("SELECT t.term_id FROM {$wpdb->terms} t JOIN {$wpdb->term_taxonomy} tx ON tx.term_id = t.term_id WHERE tx.taxonomy='category' AND tx.term_taxonomy_id IN (" . join(',', $cat_tr_tts) . ")");
         }
     }
     // deal with custom taxonomies
     if (!empty($sitepress_settings['taxonomies_sync_option'])) {
         foreach ($sitepress_settings['taxonomies_sync_option'] as $taxonomy => $value) {
             if ($value == 1 && isset($translation[$taxonomy])) {
                 $translated_taxs[$taxonomy] = $translation[$taxonomy];
                 $translated_tax_ids[$taxonomy] = explode(',', $translation[$taxonomy . '_ids']);
                 foreach ($translated_taxs[$taxonomy] as $k => $v) {
                     $tax_trid = $wpdb->get_var("\r\n                                SELECT trid FROM {$wpdb->prefix}icl_translations \r\n                                WHERE element_id='{$translated_tax_ids[$taxonomy][$k]}' AND element_type='tax_{$taxonomy}'");
                     // before adding the new term make sure that another tag with the same name doesn't exist. If it does append @lang
                     // same term name exists in a different language?
                     $term_different_language = $wpdb->get_var("\r\n                                SELECT tm.term_id \r\n                                FROM {$wpdb->term_taxonomy} tx\r\n                                    JOIN {$wpdb->terms} tm ON tx.term_id = tm.term_id \r\n                                    JOIN {$wpdb->prefix}icl_translations tr ON tx.term_taxonomy_id = tr.element_id\r\n                                WHERE tm.name='" . $wpdb->escape($v) . "' AND tr.element_type LIKE 'tax\\_%' AND tr.language_code <> '{$lang_code}'\r\n                            ");
                     if ($term_different_language) {
                         $v .= ' @' . $lang_code;
                     }
                     //tax exists? (in the current language)
                     $etag = get_term_by('name', htmlspecialchars($v), $taxonomy);
                     if (!$etag) {
                         $etag = get_term_by('name', htmlspecialchars($v) . ' @' . $lang_code, $taxonomy);
                     }
                     if (!$etag) {
                         // get original category parent id
                         $original_t_parent_id = $wpdb->get_var($wpdb->prepare("SELECT parent FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d", $translated_tax_ids[$taxonomy][$k]));
                         if ($original_t_parent_id) {
                             $_op_tax_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy='category' AND term_id=%d", $original_t_parent_id));
                             $_op_trid = $wpdb->get_var($wpdb->prepare("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='tax_category' AND element_id=%d", $_op_tax_id));
                             // get id of the translated category parent
                             $_tp_tax_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE language_code='{$lang_code}' AND trid=%d", $_op_trid));
                             if ($_tp_tax_id) {
                                 $t_parent_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE taxonomy='category' AND term_taxonomy_id=%d", $_tp_tax_id));
                             } else {
                                 $t_parent_id = 0;
                             }
                         } else {
                             $t_parent_id = 0;
                         }
                         $tmp = wp_insert_term($v, $taxonomy);
                         if (!is_wp_error($tmp) && isset($tmp['term_taxonomy_id'])) {
                             $wpdb->update($wpdb->prefix . 'icl_translations', array('language_code' => $lang_code, 'trid' => $tax_trid, 'source_language_code' => $original_post_details->language_code), array('element_type' => 'tax_' . $taxonomy, 'element_id' => $tmp['term_taxonomy_id']));
                             // if this is a parent category, make sure that nesting is correct for all translations
                             $orig_tax_id = $wpdb->get_var($wpdb->prepare("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE trid=%d AND source_language_code IS NULL", $tax_trid));
                             $orig_term_id = $wpdb->get_var($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id=%d AND taxonomy='{$taxonomy}'", $orig_tax_id));
                             $orig_tax_children = $wpdb->get_col($wpdb->prepare("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE parent=%d", $orig_term_id));
                             if (!empty($orig_tax_children)) {
                                 foreach ($orig_tax_children as $ch) {
                                     $_tr_child = icl_object_id($ch, $taxonomy, false, $lang_code);
                                     if ($_tr_child) {
                                         $wpdb->update($wpdb->term_taxonomy, array('parent' => $tmp['term_id']), array('taxonomy' => $taxonomy, 'term_id' => $_tr_child));
                                     }
                                 }
                             }
                             delete_option($taxonomy . '_children');
                         }
                     } else {
                         $term_taxonomy_id = $etag->term_taxonomy_id;
                         // check whether we have an orphan translation - the same trid and language but a different element id
                         $__translation_id = $wpdb->get_var("\r\n                                SELECT translation_id FROM {$wpdb->prefix}icl_translations \r\n                                WHERE   trid = '{$tax_trid}' \r\n                                    AND language_code = '{$lang_code}' \r\n                                    AND element_id <> '{$term_taxonomy_id}'\r\n                            ");
                         if ($__translation_id) {
                             $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE translation_id={$__translation_id}");
                         }
                         $tax_translation_id = $wpdb->get_var("\r\n                                SELECT translation_id FROM {$wpdb->prefix}icl_translations \r\n                                WHERE element_id={$term_taxonomy_id} AND element_type='tax_{$taxonomy}'");
                         if ($tax_translation_id) {
                             $wpdb->update($wpdb->prefix . 'icl_translations', array('language_code' => $lang_code, 'trid' => $tax_trid, 'source_language_code' => $original_post_details->language_code), array('element_type' => 'tax_' . $taxonomy, 'translation_id' => $tax_translation_id));
                         } else {
                             $wpdb->insert($wpdb->prefix . 'icl_translations', array('language_code' => $lang_code, 'trid' => $tax_trid, 'element_type' => 'tax_' . $taxonomy, 'element_id' => $term_taxonomy_id, 'source_language_code' => $original_post_details->language_code));
                         }
                     }
                 }
             }
             $oterms = wp_get_object_terms($translation['original_id'], $taxonomy);
             if (!is_wp_error($oterms)) {
                 foreach ($oterms as $t) {
                     $original_post_taxs[$taxonomy][] = $t->term_taxonomy_id;
                 }
             }
             if (!empty($original_post_taxs[$taxonomy])) {
                 $tax_trids = $wpdb->get_col("SELECT trid FROM {$wpdb->prefix}icl_translations \r\n                        WHERE element_type='tax_{$taxonomy}' AND element_id IN (" . join(',', $original_post_taxs[$taxonomy]) . ")");
                 if (!empty($tax_trids)) {
                     $tax_tr_tts = $wpdb->get_col("SELECT element_id FROM {$wpdb->prefix}icl_translations \r\n                            WHERE element_type='tax_{$taxonomy}' AND language_code='{$lang_code}' AND trid IN (" . join(',', $tax_trids) . ")");
                 }
                 if (!empty($tax_tr_tts)) {
                     if ($wp_taxonomies[$taxonomy]->hierarchical) {
                         $translated_tax_ids[$taxonomy] = $wpdb->get_col("SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id IN (" . join(',', $tax_tr_tts) . ")");
                     } else {
                         $translated_taxs[$taxonomy] = $wpdb->get_col("SELECT t.name FROM {$wpdb->terms} t \r\n                                JOIN {$wpdb->term_taxonomy} tx ON tx.term_id = t.term_id \r\n                                WHERE tx.taxonomy='{$taxonomy}' AND tx.term_taxonomy_id IN (" . join(',', $tax_tr_tts) . ")");
                     }
                 }
             }
         }
     }
     // 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("SELECT trid FROM {$wpdb->prefix}icl_translations WHERE element_type='post_{$original_post_details->post_type}' AND element_id='{$original_post_details->post_parent}'");
         if ($post_parent_trid) {
             $parent_id = $wpdb->get_var("SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type='post_{$original_post_details->post_type}' AND trid='{$post_parent_trid}' AND language_code='{$lang_code}'");
         }
     }
     // determine post id based on trid
     $post_id = $tinfo->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("SELECT ID FROM {$wpdb->posts} WHERE ID={$post_id}")) {
             $is_update = false;
             $wpdb->query("DELETE FROM {$wpdb->prefix}icl_translations WHERE element_type='post_{$original_post_details->post_type}' AND element_id={$post_id}");
         } 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 (@is_array($translated_tags)) {
         $postarr['tags_input'] = join(',', (array) $translated_tags);
     }
     if (@is_array($translated_taxs)) {
         foreach ($translated_taxs as $taxonomy => $values) {
             $postarr['tax_input'][$taxonomy] = join(',', (array) $values);
         }
     }
     if (@is_array($translated_tax_ids)) {
         $postarr['tax_input'] = $translated_tax_ids;
     }
     if (isset($translated_cats_ids)) {
         $postarr['post_category'] = $translated_cats_ids;
     }
     $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("SELECT post_status FROM {$wpdb->prefix}posts WHERE ID = " . $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);
     // associate custom taxonomies by hand
     if (!empty($postarr['tax_input'])) {
         foreach ($postarr['tax_input'] as $taxonomy => $tags) {
             if ($wp_taxonomies[$taxonomy]->hierarchical) {
                 wp_set_post_terms($new_post_id, $tags, $taxonomy);
             } else {
                 wp_set_post_terms($new_post_id, $translated_taxs[$taxonomy], $taxonomy);
             }
         }
     }
     // 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);
     }
     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) {
         foreach ($sitepress_settings['icl_lang_status'] as $lpair) {
             if ($lpair['from'] == $original_post_details->language_code && $lpair['to'] == $lang_code && isset($lpair['translators'][0]['id'])) {
                 $ts['translator_id'] = $lpair['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($tinfo->rid, $tinfo->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}");
         if (function_exists('icl_st_fix_links_in_strings')) {
             icl_st_fix_links_in_strings($new_post_id);
         }
         // Now try to fix links in other translated content that may link to this post.
         $sql = "SELECT\r\n                        tr.element_id\r\n                    FROM\r\n                        {$wpdb->prefix}icl_translations tr\r\n                    JOIN\r\n                        {$wpdb->prefix}icl_translation_status ts\r\n                    ON\r\n                        tr.translation_id = ts.translation_id\r\n                    WHERE\r\n                        ts.links_fixed = 0 AND tr.element_type = 'post_{$original_post_details->post_type}' AND tr.language_code = '{$lang_code}' AND tr.element_id IS NOT NULL";
         $needs_fixing = $wpdb->get_results($sql);
         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);
     }
     return true;
 }
Пример #15
0
/**
 * Build or update duplicated posts from a master post.
 *
 * @param  string                $master_post_id The ID of the post to duplicate from. Master post doesn't need to be in the default language.
 *
 * @uses SitePress
 * @uses TranslationManagement
 */
function icl_makes_duplicates($master_post_id)
{
    $post = get_post($master_post_id);
    $post_type = $post->post_type;
    if ($post->post_status == 'auto-draft' || $post->post_type == 'revision') {
        return;
    }
    global $sitepress, $iclTranslationManagement;
    if (!isset($iclTranslationManagement)) {
        $iclTranslationManagement = new TranslationManagement();
    }
    if ($sitepress->is_translated_post_type($post_type)) {
        $iclTranslationManagement->make_duplicates_all($master_post_id);
    }
}
    /**
     * Add/edit local translator form
     *
     * @param string $action add|edit
     * @param int|object $selected_translator
     *
     * @global object $sitepress
     * @return mixed
     */
    private function icl_local_edit_translator_form($action = 'add', $selected_translator = 0)
    {
        global $sitepress;
        $blog_users_nt = TranslationManagement::get_blog_not_translators();
        $output = '';
        $return['name'] = __('Local', 'wpml-translation-management');
        $return['description'] = __('Your own translators', 'wpml-translation-management');
        if ($action == 'add' && empty($blog_users_nt)) {
            $alert_message = '<p>';
            $alert_message .= __('All WordPress users are already translators. To add more translators, first create accounts for them.', 'wpml-translation-management');
            $alert_message .= '</p>';
            $return['content'] = '';
            $return['messages'] = ICL_AdminNotifier::display_instant_message($alert_message, 'information', false, true);
            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', 'wpml-translation-management') . '" />';
            $output .= '&nbsp;<span id="icl_user_src_nf"></span>';
            $output .= '<img style="display:none;margin-left:3px;" src="' . esc_url(admin_url('images/wpspin_light.gif')) . '" class="waiting" alt="" />';
            $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>';
            $languages = $sitepress->get_active_languages();
            foreach ($languages as $from_lang) {
                $lang_from_selected = false;
                if ($selected_translator && 0 < @count($selected_translator->language_pairs[$from_lang['code']])) {
                    $lang_from_selected = true;
                }
                $output .= '<li class="js-icl-tm-lang-from';
                if ($lang_from_selected) {
                    $output .= ' js-lang-from-selected';
                }
                $output .= '">';
                $output .= '<label><input class="icl_tm_from_lang" type="checkbox"';
                if ($lang_from_selected) {
                    $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;
                    }
                    $lang_selected = false;
                    if ($selected_translator->ID && isset($selected_translator->language_pairs[$from_lang['code']][$to_lang['code']])) {
                        $lang_selected = true;
                    }
                    $output .= '<li class="js-icl-tm-lang-pair';
                    if ($lang_selected) {
                        $output .= ' js-lang-pair-selected';
                    }
                    $output .= '">
                      <label><input class="icl_tm_to_lang" type="checkbox" name="lang_pairs[' . $from_lang['code'] . '][' . $to_lang['code'] . ']" value="1"';
                    if ($lang_selected) {
                        $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;
    }
Пример #17
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;
}
Пример #18
0
    ?>
" />
                            
                            <?php 
    if (!$element->field_finished && !empty($job->prev_version)) {
        ?>
                            
                                <?php 
        $prev_value = '';
        foreach ($job->prev_version->elements as $pel) {
            if ($element->field_type == $pel->field_type) {
                $prev_value = TranslationManagement::decode_field_data($pel->field_data, $pel->field_format);
            }
        }
        if ($element->field_format != 'csv_base64') {
            $diff = wp_text_diff($prev_value, TranslationManagement::decode_field_data($element->field_data, $element->field_format));
        }
        if (!empty($diff)) {
            ?>
                                        <p><a href="#" onclick="jQuery(this).parent().next().slideToggle();return false;"><?php 
            _e('Show Changes', 'sitepress');
            ?>
</a></p>
                                        <div class="icl_tm_diff">
                                            <?php 
            echo $diff;
            ?>
                                        </div>
                                        <?php 
        }
        ?>
 public static function get_job_status_string($status_id, $needs_update = false)
 {
     $job_status_text = TranslationManagement::status2text($status_id);
     if ($needs_update) {
         $job_status_text .= __(' - (needs update)', 'wpml-translation-management');
     }
     return $job_status_text;
 }
Пример #20
0
            ?>
" name="icl_translation_id[]" />
                <?php 
        } else {
            ?>
                &nbsp;
                <?php 
        }
        ?>
            </td>            
            <td width="60"><?php 
        echo $job->job_id;
        ?>
</td>
            <td><?php 
        echo TranslationManagement::tm_post_link($job->original_doc_id, $job->post_title);
        ?>
</td>
            <td><?php 
        echo $job->lang_text;
        ?>
</td>            
            <td><span id="icl_tj_job_status_<?php 
        echo $job->job_id;
        ?>
"><?php 
        echo $iclTranslationManagement->status2text($job->status);
        ?>
</span>
                <?php 
        if ($job->needs_update) {
Пример #21
0
        ?>
>
                <td scope="row">
                    <input type="checkbox" value="<?php 
        echo $doc->post_id;
        ?>
" name="iclpost[]" <?php 
        if (isset($_GET['post_id']) || is_array($icl_selected_posts) && in_array($doc->post_id, $icl_selected_posts)) {
            echo 'checked="checked"';
        }
        ?>
 />                    
                </td>
                <td scope="row" class="post-title column-title">
                    <?php 
        echo TranslationManagement::tm_post_link($doc->post_id);
        ?>
                    <?php 
        $wc = $iclTranslationManagement->estimate_word_count($doc, $icl_translation_filter['from_lang']);
        $wc += $iclTranslationManagement->estimate_custom_field_word_count($doc->post_id, $icl_translation_filter['from_lang']);
        ?>
                    <span id="icl-cw-<?php 
        echo $doc->post_id;
        ?>
" style="display:none"><?php 
        echo $wc;
        $wctotal += $wc;
        ?>
</span>
                    <span class="icl-tr-details">&nbsp;</span>
                    <div class="icl_post_note" id="icl_post_note_<?php 
    public function display($odd_row)
    {
        global $iclTranslationManagement;
        $alternate = $odd_row ? 'class="alternate"' : '';
        $current_document = $this->data;
        $count = $this->get_word_count();
        $post_actions = array();
        $post_actions_link = "";
        $element_type = $this->get_type_prefix();
        $check_field_name = $element_type;
        $post_title = $this->get_title();
        $post_view_link = '';
        $post_edit_link = '';
        if (!$this->is_external_type()) {
            $post_view_link = TranslationManagement::tm_post_link($current_document->ID, __('View', 'wpml-translation-management'), true);
            $post_edit_link = TranslationManagement::tm_post_link($current_document->ID, __('Edit', 'wpml-translation-management'), true, true, true, true);
        }
        $post_view_link = apply_filters('wpml_document_view_item_link', $post_view_link, __('View', 'wpml-translation-management'), $current_document, $element_type, $this->get_type());
        if ($post_view_link) {
            $post_actions[] = "<span class='view'>" . $post_view_link . "</span>";
        }
        $post_edit_link = apply_filters('wpml_document_edit_item_link', $post_edit_link, __('Edit', 'wpml-translation-management'), $current_document, $element_type, $this->get_type());
        if ($post_edit_link) {
            $post_actions[] = "<span class='edit'>" . $post_edit_link . "</span>";
        }
        if ($post_actions) {
            $post_actions_link .= '<div class="row-actions">' . implode(' | ', $post_actions) . '</div>';
        }
        ?>
		<tr id="row_<?php 
        echo sanitize_html_class($current_document->ID);
        ?>
" data-word_count="<?php 
        echo $count;
        ?>
" <?php 
        echo $alternate;
        ?>
>
			<td scope="row">
				<?php 
        $checked = checked(true, isset($_GET['post_id']) || $this->selected, false);
        ?>
				<input type="checkbox" value="<?php 
        echo $current_document->ID;
        ?>
" name="<?php 
        echo $check_field_name;
        ?>
[<?php 
        echo $current_document->ID;
        ?>
][checked]" <?php 
        echo $checked;
        ?>
 />
				<input type="hidden" value="<?php 
        echo $element_type;
        ?>
" name="<?php 
        echo $check_field_name;
        ?>
[<?php 
        echo $current_document->ID;
        ?>
][type]"/>
			</td>
			<td scope="row" class="post-title column-title">
				<?php 
        echo esc_html($post_title);
        echo $post_actions_link;
        ?>
				<div class="icl_post_note" id="icl_post_note_<?php 
        echo $current_document->ID;
        ?>
">
					<?php 
        $note = '';
        if (!$current_document->is_translation) {
            $note = get_post_meta($current_document->ID, '_icl_translator_note', true);
            $this->note_text = '';
            if ($note) {
                $this->note_text = __('Edit note for the translators', 'wpml-translation-management');
                $this->note_icon = 'edit_translation.png';
            } else {
                $this->note_text = __('Add note for the translators', 'wpml-translation-management');
                $this->note_icon = 'add_translation.png';
            }
        }
        ?>
					<label for="post_note_<?php 
        echo $current_document->ID;
        ?>
">
						<?php 
        _e('Note for the translators', 'wpml-translation-management');
        ?>
					</label>
                    <textarea id="post_note_<?php 
        echo $current_document->ID;
        ?>
" rows="5"><?php 
        echo $note;
        ?>
</textarea>
					<table width="100%">
						<tr>
							<td style="border-bottom:none">
								<input type="button" class="icl_tn_clear button" value="<?php 
        _e('Clear', 'wpml-translation-management');
        ?>
" <?php 
        if (!$note) {
            ?>
disabled="disabled"<?php 
        }
        ?>
 />
								<input class="icl_tn_post_id" type="hidden" value="<?php 
        echo $current_document->ID;
        ?>
"/>
							</td>
							<td align="right" style="border-bottom:none">
								<input type="button" class="icl_tn_save button-primary" value="<?php 
        _e('Save', 'wpml-translation-management');
        ?>
"/>
							</td>
						</tr>
					</table>
				</div>
			</td>
			<td scope="row" class="post-date column-date">
				<?php 
        $element_date = $this->get_date();
        if ($element_date) {
            echo date('Y-m-d', strtotime($element_date));
        }
        ?>
			</td>
			<td scope="row" class="icl_tn_link" id="icl_tn_link_<?php 
        echo $current_document->ID;
        ?>
">
				<?php 
        if (!$current_document->is_translation) {
            ?>
					<a title="<?php 
            echo $this->note_text;
            ?>
" href="#">
						<img src="<?php 
            echo WPML_TM_URL;
            ?>
/res/img/<?php 
            echo $this->note_icon;
            ?>
" width="16" height="16"/>
					</a>
				<?php 
        }
        ?>
			</td>
			<td scope="row" class="manage-column column-date">
				<?php 
        if (isset($this->post_types[$this->get_type()])) {
            $custom_post_type_labels = $this->post_types[$this->get_type()]->labels;
            if ($custom_post_type_labels->singular_name != "") {
                echo $custom_post_type_labels->singular_name;
            } else {
                echo $custom_post_type_labels->name;
            }
        } else {
            echo $this->get_type();
        }
        ?>
			</td>
			<td scope="row" class="manage-column column-date">
				<?php 
        echo $this->get_general_status();
        ?>
			</td>
			<td scope="row" class="manage-column column-active-languages">
				<?php 
        foreach ($this->active_languages as $code => $lang) {
            if ($code == $this->data->language_code) {
                continue;
            }
            $status = $this->get_status_in_lang($code);
            switch ($status) {
                case ICL_TM_NOT_TRANSLATED:
                    $translation_status_text = esc_attr(__('Not translated', 'wpml-translation-management'));
                    break;
                case ICL_TM_WAITING_FOR_TRANSLATOR:
                    $translation_status_text = esc_attr(__('Waiting for translator', 'wpml-translation-management'));
                    break;
                case ICL_TM_IN_BASKET:
                    $translation_status_text = esc_attr(__('In basket', 'wpml-translation-management'));
                    break;
                case ICL_TM_IN_PROGRESS:
                    $translation_status_text = esc_attr(__('In progress', 'wpml-translation-management'));
                    break;
                case ICL_TM_DUPLICATE:
                    $translation_status_text = esc_attr(__('Duplicate', 'wpml-translation-management'));
                    break;
                case ICL_TM_COMPLETE:
                    $translation_status_text = esc_attr(__('Complete', 'wpml-translation-management'));
                    break;
                case ICL_TM_NEEDS_UPDATE:
                    $translation_status_text = ' - ' . esc_attr(__('needs update', 'wpml-translation-management'));
                    break;
                default:
                    $translation_status_text = '';
            }
            $status_image_file_name = $iclTranslationManagement->status2img_filename($status, ICL_TM_NEEDS_UPDATE === (int) $status);
            ?>

					<span data-document_status="<?php 
            echo $status;
            ?>
" style="padding-top:4px;">
                    <img title="<?php 
            echo $lang['display_name'];
            ?>
: <?php 
            echo $translation_status_text;
            ?>
"
                         src="<?php 
            echo WPML_TM_URL;
            ?>
/res/img/<?php 
            echo $status_image_file_name;
            ?>
"
                         width="16"
                         height="16"
                         alt="<?php 
            echo $lang['display_name'];
            ?>
: <?php 
            echo $translation_status_text;
            ?>
"/>
                </span>
				<?php 
        }
        ?>
			</td>
		</tr>
	<?php 
    }
 protected function get_translator_html($job)
 {
     $job = (object) $job;
     $current_service_name = TranslationProxy::get_current_service_name();
     $translation_services = array('local', TranslationProxy::get_current_service_id());
     $translator = '';
     if ($job->translation_service && $job->translation_service !== 'local') {
         try {
             $project = TranslationProxy::get_current_project();
             if ($project) {
                 if ($project->service->has_translator_selection) {
                     $translator_contact_iframe_url = $project->translator_contact_iframe_url($job->translator_id);
                     $iframe_args = array('title' => __('Contact the translator', 'wpml-translation-management'), 'unload_cb' => 'icl_thickbox_refresh');
                     $translator .= TranslationProxy_Popup::get_link($translator_contact_iframe_url, $iframe_args);
                     $translator .= esc_html($job->translator_name);
                     $translator .= "</a> (" . $current_service_name . ")";
                 } else {
                     $translator .= $current_service_name;
                 }
             } else {
                 $translator .= esc_html($job->translator_name);
             }
         } catch (Exception $e) {
             // Just doesn't create the output
         }
     } elseif ($job->status == ICL_TM_COMPLETE) {
         $translator_data = get_userdata($job->translator_id);
         $translator_name = $translator_data ? $translator_data->display_name : "";
         $translator = '<span class="icl-finished-local-name">' . $translator_name . '</span>';
     } else {
         $translator .= '<span class="icl_tj_select_translator">';
         $selected_translator = isset($job->translator_id) ? $job->translator_id : false;
         $disabled = false;
         if ($job->translation_service && $job->translation_service !== 'local' && is_numeric($job->translation_service)) {
             $selected_translator = TranslationProxy_Service::get_wpml_translator_id($job->translation_service, $job->translator_id);
             $disabled = true;
         }
         $job_id = isset($job->job_id) ? $job->job_id : $job->id;
         $local_only = isset($job->local_only) ? $job->local_only : true;
         $args = array('id' => 'icl_tj_translator_for_' . $job_id, 'name' => 'icl_tj_translator_for_' . $job_id, 'from' => $job->source_language_code, 'to' => $job->language_code, 'selected' => $selected_translator, 'services' => $translation_services, 'disabled' => $disabled, 'echo' => false, 'local_only' => $local_only);
         $translator .= TranslationManagement::translators_dropdown($args);
         $translator .= '<input type="hidden" id="icl_tj_ov_' . $job_id . '" value="' . (int) $job->translator_id . '" />';
         $translator .= '<input type="hidden" id="icl_tj_ty_' . $job_id . '" value="' . strtolower($this->get_type()) . '" />';
         $translator .= '<span class="icl_tj_select_translator_controls" id="icl_tj_tc_' . $job_id . '">';
         $translator .= '<input type="button" class="button-secondary icl_tj_ok" value="' . __('Send', 'wpml-translation-management') . '" />&nbsp;';
         $translator .= '<input type="button" class="button-secondary icl_tj_cancel" value="' . __('Cancel', 'wpml-translation-management') . '" />';
         $translator .= '</span>';
     }
     return $translator;
 }
Пример #24
0
            echo $job->lang_text;
            ?>
</td>
                <td nowrap="nowrap">
                    <?php 
            if ($job->original_doc_id) {
                ?>
						<a class="button-secondary" href="<?php 
                echo apply_filters('icl_job_edit_url', admin_url('admin.php?page=' . WPML_TM_FOLDER . '/menu/translations-queue.php&job_id=' . $job->job_id), $job->job_id);
                ?>
"><?php 
                _e('edit', 'wpml-translation-management');
                ?>
</a>
					<?php 
                echo TranslationManagement::tm_post_link($job->original_doc_id, __('View original', 'wpml-translation-management'), true);
            }
            ?>
                </td>
                <td><?php 
            if ($job->translator_id && $job->status == ICL_TM_WAITING_FOR_TRANSLATOR) {
                ?>
<div class="icl_tj_your_job" title="<?php 
                echo esc_html(__('This job is assigned specifically to you.', 'wpml-translation-management'));
                ?>
">!</div><?php 
            }
            ?>
</td>
                <td><?php 
            echo $iclTranslationManagement->status2text($job->status);
Пример #25
0
        echo $doc->post_id;
        ?>
" name="iclpost[]" <?php 
        if (isset($_GET['post_id']) || is_array($icl_selected_posts) && in_array($doc->post_id, $icl_selected_posts)) {
            echo 'checked="checked"';
        }
        ?>
 />
                </td>
                <td scope="row" class="post-title column-title">
                    <?php 
        echo TranslationManagement::tm_post_link($doc->post_id);
        ?>
                    <?php 
        $wc = TranslationManagement::estimate_word_count($doc, $icl_translation_filter['from_lang']);
        $wc += TranslationManagement::estimate_custom_field_word_count($doc->post_id, $icl_translation_filter['from_lang']);
        ?>
                    <span id="icl-cw-<?php 
        echo $doc->post_id;
        ?>
" style="display:none"><?php 
        echo $wc;
        $wctotal += $wc;
        ?>
</span>
                    <span class="icl-tr-details">&nbsp;</span>
                    <div class="icl_post_note" id="icl_post_note_<?php 
        echo $doc->post_id;
        ?>
">
                        <?php 
    public function build_content_translation_jobs()
    {
        ?>

		<span class="spinner waiting-1" style="display: inline-block; float:none; visibility: visible"></span>

		<fieldset class="filter-row"></fieldset>
		<div class="listing-table wpml-translation-management-jobs" id="icl-tm-jobs-form" style="display: none;">
			<h3><?php 
        _e('Jobs', 'wpml-translation-management');
        ?>
</h3>
			<table id="icl-translation-jobs" class="wp-list-table widefat fixed">
				<thead>
				<tr>
					<th scope="col" id="cb" class="manage-column check-column" style="">
						<label class="screen-reader-text" for="bulk-select-top"><?php 
        _e('Select All', 'wpml-translation-management');
        ?>
</label>
						<input id="bulk-select-top" class="bulk-select-checkbox" type="checkbox">
					</th>
					<th scope="col" id="job_id" class="manage-column column-job_id" style="">
						<?php 
        _e('Job ID', 'wpml-translation-management');
        ?>
					</th>
					<th scope="col" id="title" class="manage-column column-title" style="">
						<?php 
        _e('Title', 'wpml-translation-management');
        ?>
					</th>
					<th scope="col" id="language" class="manage-column column-language" style="">
						<?php 
        _e('Language', 'wpml-translation-management');
        ?>
					</th>
					<th scope="col" id="status" class="manage-column column-status" style="">
						<?php 
        _e('Status', 'wpml-translation-management');
        ?>
					</th>
					<th scope="col" id="translator" class="manage-column column-translator" style="">
						<?php 
        _e('Translator', 'wpml-translation-management');
        ?>
					</th>
				</tr>
                </thead>
                <tfoot>
				<tr>
					<th scope="col" id="cb" class="manage-column check-column" style="">
						<label class="screen-reader-text" for="bulk-select-bottom"><?php 
        _e('Select All', 'wpml-translation-management');
        ?>
</label>
						<input id="bulk-select-bottom" class="bulk-select-checkbox" type="checkbox">
					</th>
					<th scope="col" id="job_id" class="manage-column column-job_id" style="">
						<?php 
        _e('Job ID', 'wpml-translation-management');
        ?>
					</th>
					<th scope="col" id="title" class="manage-column column-title" style="">
						<?php 
        _e('Title', 'wpml-translation-management');
        ?>
					</th>
					<th scope="col" id="language" class="manage-column column-language" style="">
						<?php 
        _e('Language', 'wpml-translation-management');
        ?>
					</th>
					<th scope="col" id="status" class="manage-column column-status" style="">
						<?php 
        _e('Status', 'wpml-translation-management');
        ?>
					</th>
					<th scope="col" id="translator" class="manage-column column-translator" style="">
						<?php 
        _e('Translator', 'wpml-translation-management');
        ?>
					</th>
				</tr>
				</tfoot>
                <tbody class="groups"></tbody>
            </table>

			<br/>

			<?php 
        wp_nonce_field('assign_translator_nonce', '_icl_nonce_at');
        ?>
			<input type="hidden" name="icl_tm_action" value=""/>
			<input id="icl-tm-jobs-cancel-but" name="icl-tm-jobs-cancel-but" class="button-primary" type="submit" value="<?php 
        _e('Cancel selected', 'wpml-translation-management');
        ?>
" disabled="disabled"/>
			<span id="icl-tm-jobs-cancel-msg" style="display: none"><?php 
        _e('Are you sure you want to cancel these jobs?', 'wpml-translation-management');
        ?>
</span>
			<span id="icl-tm-jobs-cancel-msg-2" style="display: none"><?php 
        _e('WARNING: %s job(s) are currently being translated.', 'wpml-translation-management');
        ?>
</span>
			<span id="icl-tm-jobs-cancel-msg-3" style="display: none"><?php 
        _e('Are you sure you want to abort this translation?', 'wpml-translation-management');
        ?>
</span>

			<span class="navigator"></span>

			<span class="spinner waiting-2" style="display: none; float:none; visibility: visible"></span>

			<?php 
        wp_nonce_field('icl_cancel_translation_jobs_nonce', 'icl_cancel_translation_jobs_nonce');
        ?>
			<?php 
        wp_nonce_field('icl_get_jobs_table_data_nonce', 'icl_get_jobs_table_data_nonce');
        ?>
		</div>

		<?php 
        TranslationManagement::include_underscore_templates('listing');
    }
// 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) {
                        $tos[] = $active_languages[$to]['display_name'];
Пример #28
0
function icl_upgrade_2_0_0_steps($step, $stepper)
{
    global $wpdb, $sitepress, $wp_post_types, $sitepress_settings;
    if (!isset($sitepress)) {
        $sitepress = new SitePress();
    }
    $TranslationManagement = new TranslationManagement();
    $default_language = $sitepress->get_default_language();
    define('ICL_TM_DISABLE_ALL_NOTIFICATIONS', true);
    // make sure no notifications are being sent
    //if(defined('icl_upgrade_2_0_0_runonce')){
    //  return;
    //}
    //define('icl_upgrade_2_0_0_runonce', true);
    // fix source_language_code
    // assume that the lowest element_id is the source language
    ini_set('max_execution_time', 300);
    $post_types = array_keys($wp_post_types);
    foreach ($post_types as $pt) {
        $types[] = 'post_' . $pt;
    }
    $temp_upgrade_data = get_option('icl_temp_upgrade_data', array('step' => 0, 'offset' => 0));
    switch ($step) {
        case 1:
            // if the tables are missing, call the plugin activation routine
            $table_name = $wpdb->prefix . 'icl_translation_status';
            if ($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") != $table_name) {
                icl_sitepress_activate();
            }
            $wpdb->query("ALTER TABLE `{$wpdb->prefix}icl_translations` CHANGE `element_type` `element_type` VARCHAR( 32 ) NOT NULL DEFAULT 'post_post'");
            $wpdb->query("ALTER TABLE `{$wpdb->prefix}icl_translations` CHANGE `element_id` `element_id` BIGINT( 20 ) NULL DEFAULT NULL ");
            // fix source_language_code
            // all source documents must have null
            if (isset($types)) {
                $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translations SET source_language_code = NULL\n\t\t\t\t\tWHERE element_type IN('" . join("','", $types) . "') AND source_language_code = '' AND language_code=%s", $default_language));
                // get translated documents with missing source language
                $res = $wpdb->get_results($wpdb->prepare("\n\t\t\t\t\tSELECT translation_id, trid, language_code\n\t\t\t\t\tFROM {$wpdb->prefix}icl_translations\n\t\t\t\t\tWHERE (source_language_code = '' OR source_language_code IS NULL)\n\t\t\t\t\t\tAND element_type IN('" . join("','", $types) . "')\n\t\t\t\t\t\tAND language_code <> %s\n\t\t\t\t\t\t", $default_language));
                foreach ($res as $row) {
                    $wpdb->query($wpdb->prepare("UPDATE {$wpdb->prefix}icl_translations SET source_language_code = %s WHERE translation_id=%d", $default_language, $row->translation_id));
                }
            }
            $temp_upgrade_data['step'] = 2;
            update_option('icl_temp_upgrade_data', $temp_upgrade_data);
            return array('message' => __('Processing translations...', 'sitepress'));
            break;
        case 2:
            $limit = 100;
            $offset = $temp_upgrade_data['offset'];
            $processing = FALSE;
            //loop existing translations
            if (isset($types)) {
                $res = $wpdb->get_results($wpdb->prepare("SELECT * FROM {$wpdb->prefix}icl_translations\n                                 WHERE element_type IN(" . wpml_prepare_in($types) . " )\n                                    AND source_language_code IS NULL LIMIT %d  OFFSET %d", array($limit, $offset)));
                foreach ($res as $row) {
                    $processing = TRUE;
                    // grab translations
                    $translations = $sitepress->get_element_translations($row->trid, $row->element_type);
                    $md5 = 0;
                    $table_name = $wpdb->prefix . 'icl_node';
                    if ($wpdb->get_var("SHOW TABLES LIKE '{$table_name}'") == $table_name) {
                        list($md5, $links_fixed) = $wpdb->get_row($wpdb->prepare("\n\t\t\t\t\t\t\tSELECT md5, links_fixed FROM {$wpdb->prefix}icl_node\n\t\t\t\t\t\t\tWHERE nid = %d\n\t\t\t\t\t\t", $row->element_id), ARRAY_N);
                    }
                    if (!$md5) {
                        $md5 = $TranslationManagement->post_md5($row->element_id);
                    }
                    $translation_package = $TranslationManagement->create_translation_package($row->element_id);
                    foreach ($translations as $lang => $t) {
                        if (!$t->original) {
                            // determine service and status
                            $service = 'local';
                            $needs_update = 0;
                            list($rid, $status, $current_md5) = $wpdb->get_row($wpdb->prepare("\n\t\t\t\t\t\t\t\tSELECT c.rid, n.status , c.md5\n\t\t\t\t\t\t\t\tFROM {$wpdb->prefix}icl_content_status c\n\t\t\t\t\t\t\t\t\tJOIN {$wpdb->prefix}icl_core_status n ON c.rid = n.rid\n\t\t\t\t\t\t\t\tWHERE c.nid = %d AND target = %s\n\t\t\t\t\t\t\t\tORDER BY rid DESC\n\t\t\t\t\t\t\t\tLIMIT 1\n\t\t\t\t\t\t\t", $row->element_id, $lang), ARRAY_N);
                            $translator_id = false;
                            if ($rid) {
                                if ($current_md5 != $md5) {
                                    $needs_update = 1;
                                }
                                if ($status == 3) {
                                    $status = 10;
                                } else {
                                    $status = 2;
                                }
                                $service = 'icanlocalize';
                                foreach ($sitepress_settings['icl_lang_status'] as $lpair) {
                                    if ($lpair['from'] == $row->language_code && $lpair['to'] == $lang && isset($lpair['translators'][0]['id'])) {
                                        $translator_id = $lpair['translators'][0]['id'];
                                        break;
                                    }
                                }
                            } else {
                                $status = 10;
                                $translator_id = $wpdb->get_var($wpdb->prepare("SELECT post_author FROM {$wpdb->posts} WHERE ID=%d", $t->element_id));
                                $tlp = get_user_meta($translator_id, $wpdb->prefix . 'language_pairs', true);
                                $tlp[$row->language_code][$lang] = 1;
                                $TranslationManagement->edit_translator($translator_id, $tlp);
                            }
                            // add translation_status record
                            list($newrid) = $TranslationManagement->update_translation_status(array('translation_id' => $t->translation_id, 'status' => $status, 'translator_id' => $translator_id, 'needs_update' => $needs_update, 'md5' => $md5, 'translation_service' => $service, 'translation_package' => serialize($translation_package), 'links_fixed' => intval(isset($links_fixed) ? $links_fixed : 0)));
                            $job_id = $TranslationManagement->add_translation_job($newrid, $translator_id, $translation_package);
                            if ($job_id && $status == 10) {
                                $post = get_post($t->element_id);
                                $TranslationManagement->save_job_fields_from_post($job_id, $post);
                            }
                        }
                    }
                }
            }
            if ($processing) {
                update_option('icl_temp_upgrade_data', array('step' => 2, 'offset' => intval($offset + 100)));
                $stepper->setNextStep(2);
            } else {
                update_option('icl_temp_upgrade_data', array('step' => 3, 'offset' => 1.0E+20));
            }
            $message = $processing ? __('Processing translations...', 'sitepress') : __('Finalizing upgrade...', 'sitepress');
            return array('message' => $message);
            break;
        case 3:
            // removing the plugins text table; importing data into a Sitepress setting
            $results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}icl_plugins_texts");
            if (!empty($results)) {
                foreach ($results as $row) {
                    $cft[$row->attribute_name] = $row->translate + 1;
                }
                if (isset($cft)) {
                    $iclsettings['translation-management']['custom_fields_translation'] = $cft;
                    $sitepress->save_settings($iclsettings);
                }
                $wpdb->query("DROP TABLE {$wpdb->prefix}icl_plugins_texts");
            }
            $iclsettings['language_selector_initialized'] = 1;
            if (get_option('_force_mp_post_http')) {
                $iclsettings['troubleshooting_options']['http_communication'] = intval(get_option('_force_mp_post_http'));
                delete_option('_force_mp_post_http');
            }
            // set default translators
            if (isset($sitepress_settings['icl_lang_status'])) {
                foreach ($sitepress_settings['icl_lang_status'] as $lpair) {
                    if (!empty($lpair['translators'])) {
                        $iclsettings['default_translators'][$lpair['from']][$lpair['to']] = array('id' => $lpair['translators'][0]['id'], 'type' => 'icanlocalize');
                    }
                }
            }
            $sitepress->save_settings($iclsettings);
            $iclsettings['migrated_2_0_0'] = 1;
            $sitepress->save_settings($iclsettings);
            delete_option('icl_temp_upgrade_data');
            return array('message' => __('Done', 'sitepress'), 'completed' => 1);
            break;
        default:
            return array('error' => __('Missing step', 'sitepress'), 'stop' => 1);
    }
}
 private function is_external_element()
 {
     return $this->tm_instance->is_external_type($this->job->element_type_prefix);
 }
Пример #30
0
    ?>
><?php 
    echo TranslationManagement::status2text(ICL_TM_COMPLETE);
    ?>
</option>
                            <option value="<?php 
    echo ICL_TM_IN_PROGRESS;
    ?>
" <?php 
    if (@intval($icl_translation_filter['status']) == ICL_TM_IN_PROGRESS) {
        ?>
selected="selected"<?php 
    }
    ?>
><?php 
    echo TranslationManagement::status2text(ICL_TM_IN_PROGRESS);
    ?>
</option>
                            <option value="<?php 
    echo ICL_TM_WAITING_FOR_TRANSLATOR;
    ?>
" <?php 
    if (@intval($icl_translation_filter['status']) && $icl_translation_filter['status'] == ICL_TM_WAITING_FOR_TRANSLATOR) {
        ?>
selected="selected"<?php 
    }
    ?>
><?php 
    _e('Available to translate', 'wpml-translation-management');
    ?>
</option>