class-wpml-tp-string-job.php
3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
<?php
class WPML_TP_String_Job extends WPML_WPDB_User {
/** @var WPML_Translation_Basket $basket */
private $basket;
/** @var WPML_Translation_Job_Factory $job_factory */
private $job_factory;
/**
* WPML_TP_String_Job constructor.
*
* @param wpdb $wpdb
* @param WPML_Translation_Basket $basket
* @param WPML_Translation_Job_Factory $job_factory
*/
public function __construct( &$wpdb, &$basket, &$job_factory ) {
parent::__construct( $wpdb );
$this->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;
}
}