$basket_item ) { foreach ( $basket_item['to_langs'] as $language_code => $action ) { if ( is_numeric( $translators[ $language_code ] ) ) { $strings_local[ $language_code ][] = $basket_item_id; } else { $strings_remote[ $language_code ][] = $basket_item_id; } } } if ( $strings_remote ) { foreach ( $strings_remote as $target => $string_ids ) { $basket = new WPML_Translation_Basket( $wpdb ); $st_tp_job = new WPML_TP_String_Job( $wpdb, $basket, $wpml_translation_job_factory ); $result = $st_tp_job->send_strings_to_translation_service( $string_ids, $target, $translators[ $target ] ); if ( isset( $result['errors'] ) && count( $result['errors'] ) ) { foreach ( $result['errors'] as $error ) { $error_message = array( 'type' => 'error', 'text' => $error, ); $iclTranslationManagement->add_message( $error_message ); } } if ( ! $result ) { foreach ( $string_ids as $string_id ) { $default_string_language = $basket->get_source_language(); $string = icl_get_string_by_id( $string_id, $default_string_language ); $message = array( 'type' => 'error', 'text' => sprintf( __( 'String "%s" has not been sent.', 'wpml-translation-management' ), $string ), ); $iclTranslationManagement->add_message( $message ); } break; } } } foreach ( $strings_local as $target => $string_ids ) { self::translation_send_strings_local( $string_ids, $target, $translators[ $target ], $basket_name ); } } } public static function get_string_status_labels() { return array( ICL_TM_COMPLETE => __( 'Translation complete', 'wpml-translation-management' ), ICL_STRING_TRANSLATION_PARTIAL => __( 'Partial translation', 'wpml-translation-management' ), ICL_TM_NEEDS_UPDATE => __( 'Translation needs update', 'wpml-translation-management' ), ICL_TM_NOT_TRANSLATED => __( 'Not translated', 'wpml-translation-management' ), ICL_TM_WAITING_FOR_TRANSLATOR => __( 'Waiting for translator / In progress', 'wpml-translation-management' ), ICL_TM_IN_BASKET => __( 'Strings in the basket', 'wpml-translation-management' ), ); } public static function get_string_status_label( $status ) { $string_translation_states_enumeration = self::get_string_status_labels(); if ( isset( $string_translation_states_enumeration[ $status ] ) ) { return $string_translation_states_enumeration[ $status ]; } return false; } 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; } public static function translator_notification( $user, $source, $target ) { global $wpdb, $sitepress; $_ldetails = $sitepress->get_language_details( $source ); $source_en = $_ldetails['english_name']; $_ldetails = $sitepress->get_language_details( $target ); $target_en = $_ldetails['english_name']; $message = __( "You have been assigned to a new translation job from %s to %s. Start editing: %s You can view your other translation jobs here: %s This message was automatically sent by Translation Management running on WPML. To stop receiving these notifications contact the system administrator at %s. This email is not monitored for replies. - WPML team ", 'wpml-translation-management' ); $to = $user->user_email; $subject = sprintf( __( "You have been assigned to a new translation job on %s.", 'wpml-translation-management' ), get_bloginfo( 'name' ) ); $body = sprintf( $message, $source_en, $target_en, admin_url( 'admin.php?page=' . WPML_ST_FOLDER . '/menu/string-translation.php' ), admin_url( 'admin.php?page=' . WPML_TM_FOLDER . '/menu/translations-queue.php' ), home_url() ); wp_mail( $to, $subject, $body ); $meta = get_user_meta( $user->ID, $wpdb->prefix . 'strings_notification', 1 ); $meta[ $source ][ $target ] = 1; update_user_meta( $user->ID, $wpdb->prefix . 'strings_notification', $meta ); } public static function display_string_menu( $lang_filter ) { global $sitepress; $target_status = array(); $target_rate = array(); $lang_status = $sitepress->get_setting( 'icl_lang_status' ); $strings_target_languages = $sitepress->get_active_languages(); if ( $lang_status ) { foreach ( $lang_status as $lang ) { if ( $lang['from'] == $sitepress->get_current_language() ) { $target_status[ $lang['to'] ] = $lang['have_translators']; $target_rate[ $lang['to'] ] = $lang['max_rate']; } } } ?>
get_var( $wpdb->prepare( " SELECT translation_service FROM {$wpdb->prefix}icl_string_translations WHERE string_id = %d AND translation_service > 0 AND status IN (%d, %d) LIMIT 1 ", $string_id, ICL_TM_WAITING_FOR_TRANSLATOR, ICL_TM_IN_PROGRESS ) ); if ( $translation_service ) { $text = $text . " : " . sprintf( __( 'One or more strings sent to %s', 'wpml-translation-management' ), TranslationProxy::get_service_name( $translation_service ) ); } } return $text; } }