PluginProbe
Translate and boost SEO – Automatic AI translation – wpLingua / 3.0.0
Translate and boost SEO – Automatic AI translation – wpLingua v3.0.0
3.0.0 2.16.8 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 All 114 releases
wplingua / inc / args.php

args.php in Translate and boost SEO – Automatic AI translation – wpLingua 3.0.0, at inc/args.php

447 lines 8.9 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 * Setup the arguments
11 *
12 * @param array $args
13 * @return void
14 */
15 function wplng_args_setup( &$args ) {
16
17 $args_clear = array();
18
19 /**
20 * Check language website ID
21 */
22
23 if ( empty( $args['language_source'] )
24 || ! wplng_is_valid_language_id( $args['language_source'] )
25 ) {
26 $args_clear['language_source'] = wplng_get_language_website_id();
27 } else {
28 $args_clear['language_source'] = $args['language_source'];
29 }
30
31 /**
32 * Check language website DIR
33 */
34
35 if ( empty( $args['language_source_dir'] ) ) {
36
37 $language = wplng_get_language_by_id( $args_clear['language_source'] );
38
39 $args_clear['language_source_dir'] = $language['dir'];
40
41 } else {
42 $args_clear['language_source_dir'] = $args['language_source_dir'];
43 }
44
45 /**
46 * Check language target ID
47 */
48
49 if ( empty( $args['language_target'] )
50 || ! wplng_is_valid_language_id( $args['language_target'] )
51 ) {
52 $args_clear['language_target'] = wplng_get_language_current_id();
53 } else {
54 $args_clear['language_target'] = $args['language_target'];
55 }
56
57 /**
58 * Check language target DIR
59 */
60
61 if ( empty( $args['language_target_dir'] ) ) {
62
63 $language = wplng_get_language_by_id( $args_clear['language_target'] );
64
65 $args_clear['language_target_dir'] = $language['dir'];
66
67 } else {
68 $args_clear['language_target_dir'] = $args['language_target_dir'];
69 }
70
71 /**
72 * Get count_texts
73 */
74
75 if ( ! isset( $args['count_texts'] )
76 || ! is_int( $args['count_texts'] )
77 ) {
78 $args_clear['count_texts'] = 0;
79 } else {
80 $args_clear['count_texts'] = $args['count_texts'];
81 }
82
83 if ( ! isset( $args['count_texts_unknow'] )
84 || ! is_int( $args['count_texts_unknow'] )
85 ) {
86 $args_clear['count_texts_unknow'] = 0;
87 } else {
88 $args_clear['count_texts_unknow'] = $args['count_texts_unknow'];
89 }
90
91 /**
92 * Get overloaded
93 */
94
95 $args_clear['overloaded'] = isset( $args['overloaded'] ) && ! empty( $args['overloaded'] );
96
97 /**
98 * Get mode (vanilla/editor/list)
99 */
100
101 if ( isset( $args['mode'] )
102 && (
103 'editor' === $args['mode']
104 || 'list' === $args['mode']
105 )
106 ) {
107
108 $args_clear['mode'] = $args['mode'];
109
110 } else {
111
112 $args_clear['mode'] = 'vanilla';
113
114 }
115
116 /**
117 * Get load mode (enabled/progress/disabled)
118 */
119
120 if ( isset( $args['load'] )
121 && (
122 'enabled' === $args['load']
123 || 'progress' === $args['load']
124 || 'translated' === $args['load']
125 )
126 ) {
127 $args_clear['load'] = $args['load'];
128 } else {
129 $args_clear['load'] = 'disabled';
130 }
131
132 /**
133 * Check current URL
134 */
135
136 if ( empty( $args['url_current'] ) ) {
137 $args_clear['url_current'] = remove_query_arg(
138 array(
139 'wplng-mode',
140 'wplng-load',
141 'nocache',
142 ),
143 wp_make_link_relative(
144 wplng_get_url_current()
145 )
146 );
147 } else {
148 $args_clear['url_current'] = $args['url_current'];
149 }
150
151 /**
152 * Check translated URL
153 */
154
155 if ( empty( $args['url_original'] ) ) {
156 $args_clear['url_original'] = remove_query_arg(
157 array(
158 'wplng-mode',
159 'wplng-load',
160 'nocache',
161 ),
162 wp_make_link_relative(
163 wplng_get_url_original()
164 )
165 );
166 } else {
167 $args_clear['url_original'] = $args['url_original'];
168 }
169
170 /**
171 * Get parents (Use by JSON)
172 */
173
174 if ( empty( $args['parents'] )
175 || ! is_array( $args['parents'] )
176 ) {
177 $args_clear['parents'] = array();
178 } else {
179 $args_clear['parents'] = $args['parents'];
180 }
181
182 /**
183 * Check translations array
184 */
185
186 if ( empty( $args['translations'] )
187 || ! is_array( $args['translations'] )
188 ) {
189 $args_clear['translations'] = array();
190 } else {
191 $args_clear['translations'] = $args['translations'];
192 }
193
194 /**
195 * Check texts unknow array
196 */
197
198 if ( empty( $args['texts_unknow'] )
199 || ! is_array( $args['texts_unknow'] )
200 ) {
201 $args_clear['texts_unknow'] = array();
202 } else {
203 $args_clear['texts_unknow'] = $args['texts_unknow'];
204 }
205
206 /**
207 * Ckeck "save_translations"
208 */
209
210 $args_clear['save_translations'] = true;
211
212 if ( isset( $args['save_translations'] )
213 && is_bool( $args['save_translations'] )
214 ) {
215 $args_clear['save_translations'] = $args['save_translations'];
216 }
217
218 $args = $args_clear;
219 }
220
221
222 /**
223 * Return a translations array from a texts array
224 * If text is unknow, call API and save it
225 *
226 * @param array $texts
227 * @param array $args
228 * @return void
229 */
230 function wplng_args_update_from_texts( &$args, $texts ) {
231
232 if ( empty( $texts ) ) {
233 $args['translations'] = array();
234 return;
235 }
236
237 /**
238 * Texts: Sanitize and clear duplicated
239 */
240
241 $texts_clear = array();
242
243 foreach ( $texts as $key => $text ) {
244
245 if ( ! is_string( $text ) ) {
246 continue;
247 }
248
249 $text = wplng_text_esc( $text );
250
251 if ( '' !== $text ) {
252 $texts_clear[] = $text;
253 }
254 }
255
256 $texts = array_unique( $texts_clear ); // Remove duplicate
257
258 /**
259 * Update args
260 */
261
262 wplng_args_setup( $args );
263
264 /**
265 * Get all translations for all languages
266 */
267
268 $translations_all_languages = wplng_get_translations();
269
270 /**
271 * Get unknow texts & Separate page translations
272 */
273
274 $texts_unknow = array();
275 $translations_in_page = array();
276 $detection = wplng_api_feature_is_allow( 'detection' );
277
278 foreach ( $texts as $text ) {
279
280 $is_in = false;
281
282 $array_index = (string) mb_substr( $text, 0, 1 );
283 $array_index .= (string) strlen( $text );
284
285 if ( ! empty( $translations_all_languages[ $array_index ] ) ) {
286 foreach ( $translations_all_languages[ $array_index ] as $translation ) {
287
288 if ( $text === $translation['source']
289 && isset( $translation['translations'][ $args['language_target'] ] )
290 && is_string( $translation['translations'][ $args['language_target'] ] )
291 && isset( $translation['review'] )
292 && is_array( $translation['review'] )
293 && isset( $translation['post_id'] )
294 && is_int( $translation['post_id'] )
295 ) {
296
297 $is_in = true;
298
299 $review = in_array(
300 $args['language_target'],
301 $translation['review'],
302 true
303 );
304
305 $translated_text = wplng_text_esc(
306 $translation['translations'][ $args['language_target'] ]
307 );
308
309 $translations_in_page[] = array(
310 'source' => $text,
311 'post_id' => $translation['post_id'],
312 'review' => $review,
313 'translation' => $translated_text,
314 );
315
316 break;
317 }
318 }
319 }
320
321 if ( ! $is_in && $detection ) {
322 $texts_unknow[] = $text;
323 }
324 }
325
326 $args['texts_unknow'] = $texts_unknow;
327
328 /**
329 * Limit $texts_unknow for a total of 4200 char
330 */
331
332 $current_length = 0;
333 $texts_unknow_limited = array();
334
335 foreach ( $texts_unknow as $text ) {
336 $text_length = strlen( $text );
337 if ( $current_length + $text_length > WPLNG_MAX_TRANSLATIONS_CHAR ) {
338 break;
339 }
340 $texts_unknow_limited[] = $text;
341 $current_length += $text_length + 8;
342 }
343
344 /**
345 * Get count_texts
346 */
347
348 $args['count_texts'] = count( $texts );
349 $args['count_texts_unknow'] = count( $texts_unknow );
350
351 /**
352 * Check if the current page is overloaded
353 */
354
355 $api_data = wplng_get_api_data();
356
357 $args['overloaded'] = (
358 wplng_get_api_overloaded()
359 && ! empty( $args['count_texts_unknow'] )
360 ) || ! empty( $api_data['expired'] );
361
362 /**
363 * Define $max_translations
364 */
365
366 $max_translations = WPLNG_MAX_TRANSLATIONS_STR + 1;
367
368 if ( $args['load'] === 'translated' ) {
369
370 /**
371 * This is the page reloaded after "Load in progress" was complete
372 */
373
374 $max_translations = 0;
375
376 wplng_clear_website_cache();
377
378 } elseif ( $args['load'] === 'enabled'
379 && $args['count_texts_unknow'] > 10
380 && ! $args['overloaded']
381 && $detection
382 && current_user_can( 'edit_posts' )
383 ) {
384
385 /**
386 * Current page identified as requiring "in progress" mode
387 */
388
389 $args['load'] = 'progress';
390 $max_translations = 0;
391
392 } else {
393 $args['load'] = 'disabled';
394 }
395
396 $texts_unknow_limited = array_splice(
397 $texts_unknow_limited,
398 0,
399 $max_translations
400 );
401
402 /**
403 * Get new translated text
404 */
405
406 $texts_translated = wplng_api_call_translate(
407 $texts_unknow_limited,
408 $args['language_source'],
409 $args['language_target']
410 );
411
412 $texts_unknow = array_diff_assoc( $texts_unknow, $texts_unknow_limited );
413
414 $args['texts_unknow'] = $texts_unknow;
415
416 /**
417 * Save new translation as wplng_translation CPT
418 */
419
420 $translations_new = array();
421
422 foreach ( $texts_unknow_limited as $key => $text_source ) {
423 if ( isset( $texts_translated[ $key ] ) ) {
424 $translations_new[] = array(
425 'source' => $text_source,
426 'translation' => $texts_translated[ $key ],
427 );
428 }
429 }
430
431 if ( $args['save_translations'] === true ) {
432 $translations_new = wplng_save_translations(
433 $translations_new,
434 $args['language_target']
435 );
436 }
437
438 /**
439 * Merge know and new translations
440 */
441
442 $args['translations'] = array_merge(
443 $translations_in_page,
444 $translations_new
445 );
446 }
447