basket = &$basket; $this->job_factory = &$job_factory; } function send_strings_to_translation_service( $string_ids, $target_language, $translator_id ) { /** @var WPML_String_Translation $WPML_String_Translation */ global $WPML_String_Translation; if ( sizeof( $string_ids ) > 0 ) { $project = $this->basket->get_project(); $strings = array(); $word_count = 0; $source_language = $this->basket->get_source_language(); foreach ( $string_ids as $string_id ) { $string_data_query = "SELECT id, context, name, value FROM {$this->wpdb->prefix}icl_strings WHERE id=%d"; $string_data_prepare = $this->wpdb->prepare( $string_data_query, $string_id ); $string_data = $this->wpdb->get_row( $string_data_prepare ); $word_count += $WPML_String_Translation->estimate_word_count( $string_data->value, $source_language ); $strings[] = $string_data; } $xliff = new WPML_TM_Xliff_Writer( $this->job_factory ); try { $tp_job_id = $project->send_to_translation_batch_mode( $xliff->get_strings_xliff_file( $strings, $source_language, $target_language ), 'String Translations', '', '', $source_language, $target_language, $word_count ); } catch ( Exception $e ) { return [ 'errors' => [ $e->getMessage() ] ]; } if ( $tp_job_id ) { foreach ( $strings as $string_data ) { $translation_service = TranslationProxy_Service::get_translator_data_from_wpml( $translator_id ); $string_translation_id = icl_add_string_translation( $string_data->id, $target_language, null, ICL_TM_IN_PROGRESS, $translation_service['translator_id'], $translation_service['translation_service'], TranslationProxy_Batch::update_translation_batch( $this->basket->get_name() ) ); if ( $string_translation_id ) { $data = array( 'rid' => $tp_job_id, 'string_translation_id' => $string_translation_id, 'timestamp' => date( 'Y-m-d H:i:s' ), 'md5' => md5( $string_data->value ), ); $current_rid = $this->wpdb->get_var( $this->wpdb->prepare( "SELECT rid FROM {$this->wpdb->prefix}icl_string_status WHERE string_translation_id=%d", $string_translation_id ) ); if ( $current_rid ) { $this->wpdb->update( $this->wpdb->prefix . 'icl_string_status', $data, array( 'rid' => $current_rid ) ); } else { $this->wpdb->insert( $this->wpdb->prefix . 'icl_string_status', $data ); // insert rid } } } $data = array( 'rid' => $tp_job_id, 'module' => '', 'origin' => $source_language, 'target' => $target_language, 'status' => ICL_TM_IN_PROGRESS, ); if ( ! empty( $current_rid ) ) { $data['ts_status'] = null; $this->wpdb->update( $this->wpdb->prefix . 'icl_core_status', $data, array( 'rid' => $current_rid ) ); } else { $this->wpdb->insert( $this->wpdb->prefix . 'icl_core_status', $data ); } if ( $project->errors && count( $project->errors ) ) { $tp_job_id['errors'] = $project->errors; } return $tp_job_id; } } return 0; } }