TranslationServices.php
2.39 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
<?php
namespace WPML\Setup\Endpoint;
use WPML\Ajax\IHandler;
use WPML\Collect\Support\Collection;
use WPML\FP\Either;
use WPML\FP\Fns;
use WPML\FP\Relation;
use WPML\LIB\WP\Http;
use WPML\TM\Geolocalization;
use WPML\TM\Menu\TranslationServices\ActiveServiceRepository;
use WPML\TM\Menu\TranslationServices\ServiceMapper;
use WPML\TM\Menu\TranslationServices\ServicesRetriever;
use function WPML\Container\make;
use function WPML\FP\partialRight;
class TranslationServices implements IHandler {
public function run( Collection $data ) {
$tpApi = make( \WPML_TP_Client_Factory::class )->create()->services();
$serviceMapperFunction = partialRight(
[ ServiceMapper::class, 'map' ],
[ ActiveServiceRepository::class, 'getId' ]
);
$services = ServicesRetriever::get(
$tpApi,
Geolocalization::getCountryByIp( Http::post() ),
$serviceMapperFunction
);
$preferredServiceSUID = \TranslationProxy::get_tp_default_suid();
$preferredService = false;
if ( $preferredServiceSUID ) {
$services = self::filterByPreferred( $services, $preferredServiceSUID );
$preferredServiceData = \TranslationProxy_Service::get_service_by_suid( $preferredServiceSUID );
$preferredService = new \WPML_TP_Service( $preferredServiceData );
$preferredService->set_custom_fields_data();
$preferredService = $serviceMapperFunction( $preferredService );
}
return Either::of( [
'services' => $services,
'preferredService' => $preferredService,
'logoPlaceholder' => WPML_TM_URL . '/res/img/lsp-logo-placeholder.png',
] );
}
/**
* @param array $services
* @param string $preferredServiceSUID
* @return array
*/
private static function filterByPreferred( $services, $preferredServiceSUID ) {
$preferredService = \TranslationProxy_Service::get_service_by_suid( $preferredServiceSUID );
if ( $preferredService ) {
foreach ( $services as $key => $serviceGroup ) {
$services[ $key ] = self::filterServices( $serviceGroup, $preferredService->id );
if ( empty( $services[ $key ]['services'] ) ) {
unset( $services[ $key ] );
}
}
}
return array_values( $services );
}
/**
* @param array $serviceGroup
* @param int $serviceId
* @return array
*/
public static function filterServices( $serviceGroup, $serviceId ) {
$serviceGroup['services'] = Fns::filter( Relation::propEq( 'id', $serviceId ), $serviceGroup['services'] );
return $serviceGroup;
}
}