class-wpml-pb-string-translation.php
2.72 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
<?php
class WPML_PB_String_Translation {
/** @var wpdb $wpdb */
protected $wpdb;
public function __construct( wpdb $wpdb ) {
$this->wpdb = $wpdb;
}
/**
* @param array $package_data
*
* @return array
*/
public function get_package_strings( array $package_data ) {
$strings = array();
$package_id = $this->get_package_id( $package_data );
if ( $package_id ) {
$sql_to_get_strings_with_package_id = $this->wpdb->prepare( "SELECT *
FROM {$this->wpdb->prefix}icl_strings s
WHERE s.string_package_id=%d",
$package_id );
$package_strings = $this->wpdb->get_results( $sql_to_get_strings_with_package_id );
if ( ! empty( $package_strings ) ) {
foreach ( $package_strings as $string ) {
$strings[ $this->get_string_hash( $string->value ) ] = array(
'value' => $string->value,
'context' => $string->context,
'name' => $string->name,
'id' => $string->id,
'package_id' => $package_id,
'location' => $string->location,
);
}
}
}
return $strings;
}
public function remove_string( array $string_data ) {
icl_unregister_string( $string_data['context'], $string_data['name'] );
$field_type = 'package-string-' . $string_data['package_id'] . '-' . $string_data['id'];
$job_id = $this->get_job_id( $field_type );
if ( ! $job_id || ! $this->is_job_in_progress( $job_id ) ) {
$this->wpdb->delete( $this->wpdb->prefix . 'icl_translate', array( 'field_type' => $field_type ), array( '%s' ) );
}
}
/**
* @param string $field_type
*
* @return string|null
*/
private function get_job_id( $field_type ) {
return $this->wpdb->get_var( $this->wpdb->prepare( "SELECT MAX(job_id) FROM {$this->wpdb->prefix}icl_translate WHERE field_type = %s", $field_type ) );
}
/**
* @param int $job_id
*
* @return bool
*/
private function is_job_in_progress( $job_id ) {
return ! (bool) $this->wpdb->get_var( $this->wpdb->prepare( "SELECT translated FROM {$this->wpdb->prefix}icl_translate_job WHERE job_id = %d", $job_id ) );
}
/**
* @param array $package_data
*
* @return bool
*/
private function get_package_id( array $package_data ) {
$package_id = false;
$sql_to_get_package_id = $this->wpdb->prepare( "SELECT s.ID
FROM {$this->wpdb->prefix}icl_string_packages s
WHERE s.kind=%s AND s.name=%s AND s.title=%s AND s.post_id=%s",
$package_data['kind'], $package_data['name'], $package_data['title'], $package_data['post_id'] );
$result = $this->wpdb->get_row( $sql_to_get_package_id );
if ( isset( $result->ID ) ) {
$package_id = $result->ID;
}
return $package_id;
}
/**
* @param string $string_value
*
* @return string
*/
public function get_string_hash( $string_value ) {
return md5( $string_value );
}
}