class-wpml-page-builders-media-translate.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
class WPML_Page_Builders_Media_Translate {
/** @var WPML_Translation_Element_Factory $element_factory */
private $element_factory;
/** @var WPML_Media_Image_Translate $image_translate */
protected $image_translate;
/** @var array $translated_urls */
protected $translated_urls = array();
/** @var (WP_Post|null)[] $translated_posts */
protected $translated_posts = array();
/** @var array $translated_ids */
private $translated_ids = array();
public function __construct(
WPML_Translation_Element_Factory $element_factory,
WPML_Media_Image_Translate $image_translate
) {
$this->element_factory = $element_factory;
$this->image_translate = $image_translate;
}
/**
* @param string $url
* @param string $lang
* @param string $source_lang
*
* @return string
*/
public function translate_image_url( $url, $lang, $source_lang ) {
$key = $url . $lang . $source_lang;
if ( ! array_key_exists( $key, $this->translated_urls ) ) {
$this->translated_urls[ $key ] = $url;
$attachment_id = $this->image_translate->get_attachment_id_by_url( $url, $source_lang );
if ( $attachment_id ) {
$this->add_translated_id( $attachment_id );
$translated_url = $this->image_translate->get_translated_image_by_url( $url, $source_lang, $lang );
$this->translated_urls[ $key ] = $url;
if ( $translated_url ) {
$this->translated_urls[ $key ] = $translated_url;
}
}
}
return $this->translated_urls[ $key ];
}
/**
* @param int $id
* @param string $lang
*
* @return int
*/
public function translate_id( $id, $lang ) {
if ( (int) $id < 1 ) {
return $id;
}
$this->add_translated_id( $id );
$translated_attachment = $this->get_translated_attachment( $id, $lang );
if ( isset( $translated_attachment->ID ) ) {
return $translated_attachment->ID;
}
return $id;
}
/**
* @param int $id
* @param string $lang
*
* @return WP_Post|null
*/
private function get_translated_attachment( $id, $lang ) {
$key = $id . $lang;
if ( ! array_key_exists( $key, $this->translated_posts ) ) {
$this->translated_posts[ $key ] = null;
$element = $this->element_factory->create_post( $id );
$translation = $element->get_translation( $lang );
if ( $translation ) {
$this->translated_posts[ $key ] = $translation->get_wp_object();
}
}
return $this->translated_posts[ $key ];
}
/** @param int $id */
private function add_translated_id( $id ) {
if ( ! in_array( $id, $this->translated_ids, true ) ) {
$this->translated_ids[] = $id;
}
}
public function reset_translated_ids() {
$this->translated_ids = array();
}
/** @return array */
public function get_translated_ids() {
return $this->translated_ids;
}
}