MediaTranslationEditorLayout.php
2.53 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
<?php
namespace WPML\MediaTranslation;
use WPML\Media\Option;
class MediaTranslationEditorLayout implements \IWPML_Action {
public function add_hooks() {
if ( Option::getTranslateMediaLibraryTexts() ) {
add_filter( 'wpml_tm_job_layout', [ $this, 'group_media_fields' ] );
add_filter( 'wpml_tm_adjust_translation_fields', [ $this, 'set_custom_labels' ] );
}
}
public function group_media_fields( $fields ) {
$media_fields = [];
foreach ( $fields as $k => $field ) {
$media_field = $this->is_media_field( $field );
if ( $media_field ) {
unset( $fields[ $k ] );
$media_fields[ $media_field['attachment_id'] ][] = $field;
}
}
if ( $media_fields ) {
$media_section_field = [
'field_type' => 'tm-section',
'title' => __( 'Media', 'wpml-media' ),
'fields' => [],
'empty' => false,
'empty_message' => '',
'sub_title' => '',
];
foreach ( $media_fields as $attachment_id => $media_field ) {
$media_group_field = [
'title' => '',
'divider' => false,
'field_type' => 'tm-group',
'fields' => $media_field,
];
$image = wp_get_attachment_image_src( (int) $attachment_id, [ 100, 100 ] );
$image_field = [
'field_type' => 'wcml-image',
'divider' => $media_field !== end( $media_fields ),
'image_src' => $image[0],
'fields' => [ $media_group_field ],
];
$media_section_field['fields'][] = $image_field;
}
$fields[] = $media_section_field;
}
return array_values( $fields );
}
private function is_media_field( $field ) {
$media_field = [];
if ( is_string( $field ) && preg_match( '/^media_([0-9]+)_([a-z_]+)/', $field, $match ) ) {
$media_field = [
'attachment_id' => (int) $match[1],
'label' => $match[2],
];
}
return $media_field;
}
public function set_custom_labels( $fields ) {
foreach ( $fields as $k => $field ) {
$media_field = $this->is_media_field( $field['field_type'] );
if ( $media_field ) {
$fields[ $k ]['title'] = $this->get_field_label( $media_field );
}
}
return $fields;
}
private function get_field_label( $media_field ) {
switch ( $media_field['label'] ) {
case 'title':
$label = __( 'Title', 'wpml-media' );
break;
case 'caption':
$label = __( 'Caption', 'wpml-media' );
break;
case 'description':
$label = __( 'Description', 'wpml-media' );
break;
case 'alt_text':
$label = __( 'Alt Text', 'wpml-media' );
break;
default:
$label = '';
}
return $label;
}
}