AddLanguages.php
1.54 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
<?php
namespace WPML\Setup\Endpoint;
use WPML\Ajax\IHandler;
use WPML\Collect\Support\Collection;
use WPML\Element\API\Languages;
use WPML\FP\Either;
use WPML\FP\Fns;
use WPML\FP\Obj;
use WPML\FP\Str;
use WPML\Element\API\Entity\LanguageMapping;
use WPML\Setup\Option;
class AddLanguages implements IHandler {
public function run( Collection $data ) {
$languages = $data->get( 'languages' );
$create = function ( $language ) {
$id = Languages::add(
$language['code'],
$language['name'],
$language['locale'],
0,
0,
(int) $language['encode_url'],
$language['hreflang'],
Obj::prop('country', $language)
);
if ( $id ) {
$flag = Obj::prop( 'flag', $language );
if ( $flag ) {
Languages::setFlag(
$language['code'],
Obj::propOr( '', 'name', $flag ),
(bool) Obj::propOr( false, 'fromTemplate', $flag )
);
}
/** @phpstan-ignore-next-line */
$this->saveMapping( $language, $id );
}
return [ $language['code'], $id ];
};
$result = Either::right( Fns::map( $create, $languages ) );
icl_cache_clear( false );
return $result;
}
/**
* @param array $language
* @param int $id
*/
private function saveMapping( $language, $id ) {
$languageMapping = Obj::prop( 'mapping', $language );
if ( $id && $languageMapping ) {
$languageMapping = Str::split( '_', $languageMapping );
Option::addLanguageMapping( new LanguageMapping(
$language['code'],
$language['name'],
$languageMapping[0],
Obj::prop( 1, $languageMapping ) )
);
}
}
}