Completed
Push — siteaccessaware-layer-only ( dccca4...65e0ca )
by André
15:44
created

LanguageResolver   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 99
Duplicated Lines 0 %

Coupling/Cohesion

Components 2
Dependencies 0

Importance

Changes 0
Metric Value
dl 0
loc 99
rs 10
c 0
b 0
f 0
wmc 11
lcom 2
cbo 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A setConfigLanguages() 0 4 1
A setContextLanguage() 0 4 1
A getPrioritizedLanguages() 0 20 4
A setUseAlwaysAvailable() 0 4 1
A getUseAlwaysAvailable() 0 12 3
1
<?php
2
3
namespace eZ\Publish\Core\Repository\Helper;
4
5
/**
6
 * Resolves language settings for use in SiteAccess aware Repository.
7
 *
8
 * @todo Take useAlwaysAvailable from setting so it can be configured to false on frontend.
9
 */
10
class LanguageResolver
11
{
12
    private $configLanguages;
13
    private $useAlwaysAvailable;
14
    private $contextLanguage;
15
16
    public function __construct(array $configLanguages, $useAlwaysAvailable = null)
17
    {
18
        $this->configLanguages = $configLanguages;
19
        $this->useAlwaysAvailable = $useAlwaysAvailable;
20
    }
21
22
    /**
23
     * For use by event listening to config resolver scope changes (or other event changing configured languages)
24
     *
25
     * @param array $configLanguages
26
     */
27
    public function setConfigLanguages(array $configLanguages)
28
    {
29
        $this->configLanguages = $configLanguages;
30
    }
31
32
    /**
33
     * For use by custom events / logic setting language for all retrieved objects from repository.
34
     *
35
     * User language will, if set, will have prepended before configured languages. But in cases PHP API consumer
36
     * specifies languages to retrieve repository objects in it will instead be appended as a fallback.
37
     *
38
     * @param string|null $contextLanguage
39
     */
40
    public function setContextLanguage($contextLanguage)
41
    {
42
        $this->contextLanguage = $contextLanguage;
43
    }
44
45
    /**
46
     * Get prioritized languages taking into account argument, config and context languages.
47
     *
48
     *
49
     * @param array|null $forcedLanguages Optional, if not empty will be used instead of configured languages, typically
50
     *        arguments provided to API.
51
     *
52
     * @return array
53
     */
54
    public function getPrioritizedLanguages(array $forcedLanguages = null)
55
    {
56
        $languages = empty($forceLanguages)
0 ignored issues
show
Bug introduced by
The variable $forceLanguages does not exist. Did you mean $forcedLanguages?

This check looks for variables that are accessed but have not been defined. It raises an issue if it finds another variable that has a similar name.

The variable may have been renamed without also renaming all references.

Loading history...
57
            ? $this->configLanguages
58
            : $forcedLanguages;
59
60
        if ($this->contextLanguage === null) {
61
            return $languages;
62
        }
63
64
        // prepend context language (highest priority) if languages came from config, but append (as fallback)
65
        // if api user provided languages
66
        if (empty($forcedLanguages)) {
67
            array_unshift($languages, $this->contextLanguage);
68
        } else {
69
            $languages[] = $this->contextLanguage;
70
        }
71
72
        return $languages;
73
    }
74
75
    /**
76
     * For use by event listening to config resolver scope changes (or other event changing configured languages).
77
     *
78
     * By default this is not set and hence default in API will be used instead.
79
     *
80
     * @param bool $useAlwaysAvailable
81
     */
82
    public function setUseAlwaysAvailable($useAlwaysAvailable)
83
    {
84
        $this->useAlwaysAvailable = $useAlwaysAvailable;
85
    }
86
87
    /**
88
     * Get currently set UseAlwaysAvailable.
89
     *
90
     * @param bool|null $forcedUseAlwaysAvailable Optional, if set will be used instead of configured balue,
91
     *        typically arguments provided to API.
92
     * @param bool $defaultUseAlwaysAvailable
93
     *
94
     * @return bool
95
     */
96
    public function getUseAlwaysAvailable($forcedUseAlwaysAvailable = null, $defaultUseAlwaysAvailable = true)
97
    {
98
        if ($forcedUseAlwaysAvailable !== null) {
99
            return $forcedUseAlwaysAvailable;
100
        }
101
102
        if ($this->useAlwaysAvailable !== null) {
103
            return $this->useAlwaysAvailable;
104
        }
105
106
        return $defaultUseAlwaysAvailable;
107
    }
108
}
109