PluginProbe
Translate and Go multilingual – Automatic AI translation – wpLingua / 1.0.4
Translate and Go multilingual – Automatic AI translation – wpLingua v1.0.4
2.16.7 2.16.6 2.16.5 2.16.4 2.16.3 2.16.2 2.16.1 2.16.0 2.15.2 2.15.1 2.15.0 2.14.3 2.14.2 2.14.1 2.14.0 2.13.1 2.13.0 2.12.3 2.12.2 2.12.1 trunk 1.0.3 1.0.4 1.0.5 1.1.0 All 112 releases
wplingua / inc / ob-callback / list.php

list.php in Translate and Go multilingual – Automatic AI translation – wpLingua 1.0.4, at inc/ob-callback/list.php

372 lines 8.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 // If this file is called directly, abort.
4 if ( ! defined( 'WPINC' ) ) {
5 die;
6 }
7
8
9 /**
10 * wpLingua OB Callback function : On page translations list
11 *
12 * @param string $html
13 * @return void
14 */
15 function wplng_ob_callback_list( $html ) {
16
17 if ( empty( $html ) ) {
18 return $html;
19 }
20
21 $html = apply_filters( 'wplng_html_intercepted', $html );
22 $html_saved = $html;
23
24 /**
25 * Replace excluded HTML part by tag
26 */
27
28 $excluded = array();
29
30 $html = wplng_html_set_exclude_tag(
31 $html,
32 $excluded
33 );
34
35 /**
36 * Get all texts in HTML
37 */
38
39 $texts = wplng_parse_html( $html );
40
41 /**
42 * Get saved translation
43 */
44
45 $language_target_id = wplng_get_language_current_id();
46 $translations = array();
47
48 if ( ! empty( $texts ) ) {
49 $translations = wplng_get_translations_target( $language_target_id );
50 }
51
52 /**
53 * Get unknow texts
54 */
55
56 $texts_unknow = array();
57
58 foreach ( $texts as $text ) {
59
60 $is_in = false;
61
62 foreach ( $translations as $translation ) {
63 if ( $text === $translation['source'] ) {
64 $is_in = true;
65 break;
66 }
67 }
68
69 if ( ! $is_in ) {
70 $texts_unknow[] = $text;
71 }
72 }
73
74 $texts_unknow = array_splice(
75 $texts_unknow,
76 0,
77 WPLNG_MAX_TRANSLATIONS + 1
78 );
79
80 /**
81 * Get new translated text
82 */
83
84 $texts_unknow_translated = wplng_api_call_translate(
85 $texts_unknow,
86 false,
87 $language_target_id
88 );
89
90 /**
91 * Save new translation as wplng_translation CPT
92 */
93
94 $translations_new = array();
95
96 foreach ( $texts_unknow as $key => $text_source ) {
97 if ( isset( $texts_unknow_translated[ $key ] ) ) {
98 $translations_new[] = array(
99 'source' => $text_source,
100 'translation' => $texts_unknow_translated[ $key ],
101 );
102 }
103 }
104
105 $translations_new = wplng_save_translations(
106 $translations_new,
107 $language_target_id
108 );
109
110 /**
111 * Separate page translations
112 */
113
114 $translations_in_page = array();
115
116 foreach ( $translations as $translation ) {
117 foreach ( $texts as $text ) {
118 $text = wplng_text_esc( $text );
119 if ( ! empty( $translation['source'] )
120 && $translation['source'] === $text
121 ) {
122 $translations_in_page[] = $translation;
123 }
124 }
125 }
126
127 /**
128 * Merge know and new translations
129 */
130
131 $translations = array_merge(
132 $translations_in_page,
133 $translations_new
134 );
135
136 /**
137 * Place the modal HTML before body ending
138 */
139
140 $html_saved = str_replace(
141 '</body>',
142 wplng_get_editor_modal_html( $translations ) . '</body>',
143 $html_saved
144 );
145
146 /**
147 * Apply a filter before return $html
148 */
149
150 $html = apply_filters( 'wplng_html_translated', $html );
151
152 return $html_saved;
153 }
154
155
156 function wplng_get_editor_modal_html( $translations ) {
157
158 if ( empty( $translations ) ) {
159 return '';
160 }
161
162 /**
163 * Return button
164 */
165
166 $url = wplng_get_url_current();
167 $url_original = $url;
168 $url_original = remove_query_arg( 'wplingua-editor', $url_original );
169 $url_original = remove_query_arg( 'wplingua-list', $url_original );
170 $return_button = '';
171
172 if ( ! empty( $url_original ) ) {
173
174 $return_button .= '<a ';
175 $return_button .= 'href="' . esc_url( $url_original ) . '" ';
176 $return_button .= 'title="' . esc_attr__( 'Return on page', 'wplingua' ) . '" ';
177 $return_button .= 'class="wplng-button-icon wplng-button-return">';
178 $return_button .= '<span class="dashicons dashicons-no"></span>';
179 $return_button .= '</a>';
180
181 }
182
183 /**
184 * Modal
185 */
186
187 $html = '';
188 $html .= '<div id="wplng-modal-container">';
189 $html .= '<div id="wplng-modal">';
190
191 $html .= '<div id="wplng-modal-header">';
192 $html .= '<span class="dashicons dashicons-translation wplng-modal-header-icon"></span> ';
193 $html .= '<span id="wplng-modal-title">';
194 $html .= esc_html__( 'All translations on page', 'wplingua' );
195 $html .= '</span>';
196
197 $html .= '<div id="wplng-modal-list-switcher">';
198 $html .= wplng_get_modal_switcher_html();
199 $html .= '</div>';
200
201 $html .= $return_button;
202
203 $html .= '</div>';
204
205 $html .= '<div id="wplng-modal-items">';
206
207 foreach ( $translations as $translation ) {
208
209 $edit_link = '';
210 if ( empty( $translation['post_id'] )
211 || empty( $translation['source'] )
212 || empty( $translation['translation'] )
213 ) {
214 continue;
215 } else {
216 $edit_link = get_edit_post_link( $translation['post_id'] );
217 }
218
219 $html .= '<div class="wplng-modal-item">';
220 $html .= '<div class="wplng-item-text">';
221 $html .= '<div class="wplng-item-source">';
222 $html .= esc_attr( $translation['source'] );
223 $html .= '</div>'; // End .wplng-item-source
224 $html .= '<div class="wplng-item-translation">';
225 $html .= esc_attr( $translation['translation'] );
226 $html .= '</div>'; // End .wplng-item-translation
227 $html .= '</div>'; // End .wplng-item-text
228 $html .= '<div class="wplng-item-edit">';
229 $html .= '<a href="' . esc_url( $edit_link ) . '" ';
230 $html .= 'title="' . esc_attr__( 'Edit this translation', 'wplingua' ) . '" ';
231 $html .= 'class="wplng-button-icon" target="_blank">';
232 $html .= '<span class="dashicons dashicons-edit"></span></a>';
233 $html .= '</a>';
234 $html .= '</div>'; // End .wplng-item-edit
235 $html .= '</div>'; // ENd .wplng-modal-item
236 }
237
238 $html .= '</div>'; // End #wplng-modal-items
239 $html .= '</div>'; // End #wplng-modal
240 $html .= '</div>'; // End #wplng-modal-container
241
242 return $html;
243 }
244
245
246 /**
247 * Print HTML of switcher for translations list modal
248 *
249 * @return string
250 */
251 function wplng_get_modal_switcher_html() {
252
253 if ( ! wplng_url_is_translatable() && ! is_admin() ) {
254 return '';
255 }
256
257 $language_website = wplng_get_language_website();
258 $language_current_id = wplng_get_language_current_id();
259 $languages_target = wplng_get_languages_target();
260
261 if ( empty( $languages_target ) ) {
262 return '';
263 }
264
265 $class = wplng_get_switcher_class(
266 array(
267 'theme' => 'grey-simple-smooth',
268 'style' => 'dropdown',
269 'flags' => 'rectangular',
270 'title' => 'name',
271 )
272 );
273
274 /**
275 * Create the switcher HTML
276 */
277
278 $html = '<div class="' . esc_attr( 'wplng-switcher ' . $class ) . '">';
279 $html .= '<div class="switcher-content">';
280
281 $html .= '<div class="wplng-languages">';
282
283 // Create link for each target languages
284 foreach ( $languages_target as $language_target ) {
285
286 $url = wplng_get_url_current_for_language( $language_target['id'] );
287
288 if ( $language_target['id'] === $language_current_id ) {
289
290 continue;
291
292 } else {
293
294 $html .= '<a ';
295 $html .= 'class="wplng-language" ';
296 $html .= 'href="' . esc_url( $url ) . '">';
297
298 }
299
300 if ( ! empty( $language_website['flag'] ) ) {
301 $html .= '<img ';
302 $html .= 'src="' . esc_url( $language_target['flag'] ) . '" ';
303 $html .= 'alt="' . esc_attr( $language_target['name'] ) . '">';
304 }
305
306 $html .= '<span class="language-name">';
307 $html .= esc_html( $language_target['name'] );
308 $html .= '</span>';
309
310 $html .= '</a>';
311 }
312
313 $html .= '</div>'; // End .wplng-languages
314
315 // Create link for current language
316 if ( $language_website['id'] === $language_current_id ) {
317
318 $url = wplng_get_url_original();
319
320 $html .= '<a class="wplng-language wplng-language-current" ';
321 $html .= 'href="' . esc_url( $url ) . '" ';
322 $html .= 'onclick="event.preventDefault();">';
323
324 if ( ! empty( $language_website['flag'] ) ) {
325 $html .= '<img ';
326 $html .= 'src="' . esc_url( $language_website['flag'] ) . '" ';
327 $html .= 'alt="' . esc_attr( $language_website['name'] ) . '">';
328 }
329
330 $html .= '<span class="language-name">';
331 $html .= esc_html( $language_website['name'] );
332 $html .= '</span>';
333
334 $html .= '</a>';
335
336 } else {
337
338 foreach ( $languages_target as $language_target ) {
339
340 if ( $language_target['id'] !== $language_current_id ) {
341 continue;
342 }
343
344 $url = wplng_get_url_current_for_language( $language_target['id'] );
345
346 $html .= '<a ';
347 $html .= 'class="wplng-language wplng-language-current" ';
348 $html .= 'href="' . esc_url( $url ) . '" ';
349 $html .= 'onclick="event.preventDefault();">';
350
351 if ( ! empty( $language_target['flag'] ) ) {
352 $html .= '<img ';
353 $html .= 'src="' . esc_url( $language_target['flag'] ) . '" ';
354 $html .= 'alt="' . esc_attr( $language_target['name'] ) . '">';
355 }
356
357 $html .= '<span class="language-name">';
358 $html .= esc_html( $language_target['name'] );
359 $html .= '</span>';
360
361 $html .= '</a>';
362
363 break;
364 }
365 }
366
367 $html .= '</div>'; // End .switcher-content
368 $html .= '</div>'; // End .wplng-switcher
369
370 return $html;
371 }
372