-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTranslatorFront.php
82 lines (62 loc) · 2.57 KB
/
TranslatorFront.php
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
82
<?php
namespace Src\Module\Translator;
use Src\Module\Translator\Entity\TranslatorEntity;
use Src\Module\Translator\Enum\EntityType;
use Src\Module\Translator\Service\TranslatorEntityService;
use Src\Module\Translator\Service\TranslatorStateService;
class TranslatorFront {
public function __construct(
private readonly TranslatorStateService $translatorService,
private readonly TranslatorEntityService $translatorEntityService
) {
}
public function init(): void {
$this->translatorService->changeState();
add_filter('body_class', function($classes){
return $this->filterBodyClasses($classes);
});
add_filter( 'theme_mod_nav_menu_locations', function ( array $menuLocations ) {
return $this->modifyMenuLocations( $menuLocations );
}, 10 );
}
private function filterBodyClasses(array $classes): array {
if($this->translatorService->getState()->getCurrentLanguage()->isRtl){
$classes[] = 'rtl';
}
if($this->translatorService->getState()->isChanged()){
$classes[] = 'language-changed';
}
return $classes;
}
private function modifyMenuLocations( array $menuLocations ): array {
if ( empty( $menuLocations ) ) {
return $menuLocations;
}
return $this->modifyMenuLocationsForCurrentLanguage( $menuLocations );
}
private function modifyMenuLocationsForCurrentLanguage( array $menuLocations ): array {
$entities = $this->translatorEntityService->getPairsEntitiesWithCurrentAndDefaultLanguages( $menuLocations, EntityType::Tax );
if ( ! $entities ) {
return $menuLocations;
}
$entityLocations = [];
foreach ( $menuLocations as $location => $menuId ) {
/** @var TranslatorEntity $entity */
foreach ( $entities as $entity ) {
if ( $entity->getEntityId() === $menuId ) {
$entityLocations[ $location ] = $entity;
}
}
}
$currentLangCode = $this->translatorService->getState()->getCurrentLanguage()->code;
foreach ( $entityLocations as $location => $menuEntity ) {
/** @var TranslatorEntity $entity */
foreach ( $entities as $entity ) {
if ( $entity->getGroupId() === $menuEntity->getGroupId() && $entity->getCodeLang() === $currentLangCode ) {
$menuLocations[ $location ] = $entity->getEntityId();
}
}
}
return $menuLocations;
}
}