class-wpml-tm-jobs-list-translators.php
1.58 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
<?php
use \WPML\FP\Fns;
use \WPML\FP\Lst;
use \WPML\Element\API\Languages;
use function \WPML\FP\flip;
use function \WPML\FP\curryN;
class WPML_TM_Jobs_List_Translators {
/** @var WPML_Translator_Records */
private $translator_records;
/**
* @param WPML_Translator_Records $translator_records
*/
public function __construct( WPML_Translator_Records $translator_records ) {
$this->translator_records = $translator_records;
}
public function get() {
$translators = $this->translator_records->get_users_with_capability();
return array_map( [ $this, 'getTranslatorData' ], $translators );
}
private function getTranslatorData( $translator ) {
return [
'value' => $translator->ID,
'label' => $translator->display_name,
'languagePairs' => $this->getLanguagePairs( $translator ),
];
}
private function getLanguagePairs( $translator ) {
/** @var callable $isValidLanguage */
$isValidLanguage = Lst::includes( Fns::__, Lst::pluck( 'code', Languages::getAll() ) );
$sourceIsValidLanguage = flip( $isValidLanguage );
$getValidTargets = Fns::filter( $isValidLanguage );
$makePair = curryN(
2,
function ( $source, $target ) {
return [
'source' => $source,
'target' => $target,
];
}
);
$getAsPair = curryN(
3,
function ( $makePair, $targets, $source ) {
return Fns::map( $makePair( $source ), $targets );
}
);
return \wpml_collect( $translator->language_pairs )
->filter( $sourceIsValidLanguage )
->map( $getValidTargets )
->map( $getAsPair( $makePair ) )
->flatten( 1 )
->toArray();
}
}