Strings.php
1.82 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
<?php
namespace WPML\TM\Jobs\Dispatch;
use WPML\FP\Lst;
use WPML\FP\Obj;
use WPML\LIB\WP\User;
use function WPML\Container\make;
class Strings {
/**
* @param callable $sendBatch
* @param \WPML\TM\Jobs\Dispatch\Messages $messages
* @param callable $buildBatch
* @param $stringIds
* @param $sourceLanguage
* @param $targetLanguages
*/
public static function dispatch(
callable $sendBatch,
Messages $messages,
callable $buildBatch,
$stringIds,
$sourceLanguage,
$targetLanguages
) {
$stringsForTranslation = self::filterStringsForTranslation( $messages, $stringIds, $targetLanguages );
$translators = array_fill_keys( $targetLanguages, User::getCurrentId() );
$batch = $buildBatch( $stringsForTranslation, $sourceLanguage, $translators );
$batch && $sendBatch( $messages, $batch );
}
private static function filterStringsForTranslation( Messages $messages, $stringIds, $targetLanguages ) {
$stringsToTranslation = [];
$ignoredStringsMessages = [];
/** @var \WPML_ST_String_Factory $stringFactory */
$stringFactory = make( \WPML_ST_String_Factory::class );
foreach ( $stringIds as $stringId ) {
$stringsToTranslation[ $stringId ] = [];
$string = $stringFactory->find_by_id( $stringId );
$statuses = wpml_collect( $string->get_translation_statuses() )->keyBy( 'language' )->map( Obj::prop( 'status' ) );
foreach ( $targetLanguages as $language ) {
if ( (int) Obj::prop( $language, $statuses ) === ICL_TM_WAITING_FOR_TRANSLATOR ) {
$ignoredStringsMessages[] = $messages->ignoreInProgressStringMessage( $string, $language );
} else {
$stringsToTranslation[ $stringId ] [] = $language;
}
}
}
$messages->showForStrings( $ignoredStringsMessages, 'information' );
/** @phpstan-ignore-next-line */
return array_filter( $stringsToTranslation, Lst::length() );
}
}