wpml-st-slug.php
2.52 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
120
121
122
<?php
class WPML_ST_Slug {
/** @var int $original_id */
private $original_id;
/** @var string $original_lang */
private $original_lang;
/** @var string $original_value */
private $original_value;
/** @var array $langs */
private $langs = array();
/** @param stdClass $data */
public function set_lang_data( stdClass $data ) {
if ( isset( $data->language ) ) {
$this->langs[ $data->language ] = $data;
}
// Case of original string language
if ( isset( $data->id ) ) {
$this->original_id = $data->id;
$this->original_lang = $data->language;
$this->original_value = $data->value;
}
}
/** @return string */
public function get_original_lang() {
return $this->original_lang;
}
/** @return string */
public function get_original_value() {
return $this->original_value;
}
/** @return int */
public function get_original_id() {
return (int) $this->original_id;
}
/**
* @param string $lang
*
* @return string
*/
public function get_value( $lang ) {
if ( isset( $this->langs[ $lang ]->value ) ) {
return $this->langs[ $lang ]->value;
}
return $this->get_original_value();
}
/**
* @param string $lang
*
* @return int
*/
public function get_status( $lang ) {
if ( isset( $this->langs[ $lang ]->status ) ) {
return (int) $this->langs[ $lang ]->status;
}
return ICL_TM_NOT_TRANSLATED;
}
/**
* @param string $lang
*
* @return bool
*/
public function is_translation_complete( $lang ) {
return ICL_TM_COMPLETE === $this->get_status( $lang );
}
/** @return string|null */
public function get_context() {
if ( isset( $this->langs[ $this->original_lang ]->context ) ) {
return $this->langs[ $this->original_lang ]->context;
}
return null;
}
/** @return string|null */
public function get_name() {
if ( isset( $this->langs[ $this->original_lang ]->name ) ) {
return $this->langs[ $this->original_lang ]->name;
}
return null;
}
/** @return array */
public function get_language_codes() {
return array_keys( $this->langs );
}
/**
* This method is used as a filter which returns the initial `$slug_value`
* if no better value was found.
*
* @param string|false $slug_value
* @param string $lang
*
* @return string
*/
public function filter_value( $slug_value, $lang ) {
if ( $this->original_lang === $lang ) {
return $this->original_value;
} elseif ( in_array( $lang, $this->get_language_codes(), true ) && $this->is_translation_complete( $lang ) ) {
return $this->get_value( $lang );
}
return $slug_value;
}
}