Passed
Push — develop ( 0cc231...3902ed )
by Felipe
05:42
created

Translations::__construct()   D

Complexity

Conditions 20
Paths 28

Size

Total Lines 81
Code Lines 48

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 81
rs 4.9645
c 0
b 0
f 0
cc 20
eloc 48
nc 28
nop 1

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/**
4
 * PHPPgAdmin v6.0.0-beta.44
5
 */
6
7
namespace PHPPgAdmin;
8
9
/**
10
 * Class for translations.
11
 */
12
class Translations
13
{
14
    // List of language files, and encoded language name.
15
16
    public $appLangFiles = [
17
        'afrikaans'          => 'Afrikaans',
18
        'arabic'             => '&#1593;&#1585;&#1576;&#1610;',
19
        'catalan'            => 'Catal&#224;',
20
        'chinese-tr'         => '&#32321;&#39636;&#20013;&#25991;',
21
        'chinese-sim'        => '&#31616;&#20307;&#20013;&#25991;',
22
        'chinese-utf8-zh_TW' => '&#27491;&#39636;&#20013;&#25991;&#65288;UTF-8&#65289;',
23
        'chinese-utf8-zh_CN' => '&#31616;&#20307;&#20013;&#25991;&#65288;UTF-8&#65289;',
24
        'czech'              => '&#268;esky',
25
        'danish'             => 'Danish',
26
        'dutch'              => 'Nederlands',
27
        'english'            => 'English',
28
        'french'             => 'Français',
29
        'galician'           => 'Galego',
30
        'german'             => 'Deutsch',
31
        'greek'              => '&#917;&#955;&#955;&#951;&#957;&#953;&#954;&#940;',
32
        'hebrew'             => 'Hebrew',
33
        'hungarian'          => 'Magyar',
34
        'italian'            => 'Italiano',
35
        'japanese'           => '&#26085;&#26412;&#35486;',
36
        'lithuanian'         => 'Lietuvi&#371;',
37
        'mongol'             => 'Mongolian',
38
        'polish'             => 'Polski',
39
        'portuguese-br'      => 'Portugu&ecirc;s-Brasileiro',
40
        'portuguese-pt'      => 'Portugu&ecirc;s',
41
        'romanian'           => 'Rom&acirc;n&#259;',
42
        'russian-utf8'       => '&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081; (UTF-8)',
43
        'russian'            => '&#1056;&#1091;&#1089;&#1089;&#1082;&#1080;&#1081;',
44
        'slovak'             => 'Slovensky',
45
        'spanish'            => 'Espa&ntilde;ol',
46
        'swedish'            => 'Svenska',
47
        'turkish'            => 'T&uuml;rk&ccedil;e',
48
        'ukrainian'          => '&#1059;&#1082;&#1088;&#1072;&#9558;&#1085;&#1089;&#1100;&#1082;&#1072;',
49
    ];
50
51
    public $appClasses = [
52
        'afrikaans'          => 'Afrikaans',
53
        'arabic'             => 'Arabic',
54
        'catalan'            => 'Catalan',
55
        'chinese-tr'         => 'ChineseTr',
56
        'chinese-sim'        => 'ChineseSim',
57
        'chinese-utf8-zh_TW' => 'ChineseUtf8ZhTw',
58
        'chinese-utf8-zh_CN' => 'ChineseUtf8ZhCn',
59
        'czech'              => 'Czech',
60
        'danish'             => 'Danish',
61
        'dutch'              => 'Dutch',
62
        'english'            => 'English',
63
        'french'             => 'French',
64
        'galician'           => 'Galician',
65
        'german'             => 'German',
66
        'greek'              => 'Greek',
67
        'hebrew'             => 'Hebrew',
68
        'hungarian'          => 'Hungarian',
69
        'italian'            => 'Italian',
70
        'japanese'           => 'Japanese',
71
        'lithuanian'         => 'Lithuanian',
72
        'mongol'             => 'Mongol',
73
        'polish'             => 'Polish',
74
        'portuguese-br'      => 'PortugueseBr',
75
        'portuguese-pt'      => 'PortuguesePt',
76
        'romanian'           => 'Romanian',
77
        'russian-utf8'       => 'RussianUtf8',
78
        'russian'            => 'Russian',
79
        'slovak'             => 'Slovak',
80
        'spanish'            => 'Spanish',
81
        'swedish'            => 'Swedish',
82
        'turkish'            => 'Turkish',
83
        'ukrainian'          => 'Ukrainian',
84
    ];
85
86
    private $_language;
87
88
    /**
89
     * ISO639 language code to language file mapping.
90
     * See http://www.w3.org/WAI/ER/IG/ert/iso639.htm for language codes
91
     * If it's available 'language-country', but not general
92
     * 'language' translation (eg. 'portuguese-br', but not 'portuguese')
93
     * specify both 'la' => 'language-country' and 'la-co' => 'language-country'.
94
     */
95
    public $availableLanguages = [
96
        'af'         => 'afrikaans',
97
        'ar'         => 'arabic',
98
        'ca'         => 'catalan',
99
        'zh'         => 'chinese-tr',
100
        'zh-cn'      => 'chinese-sim',
101
        'utf8-zh-cn' => 'chinese-utf8-zh_TW',
102
        'utf8-zh-tw' => 'chinese-utf8-zh_CN',
103
        'cs'         => 'czech',
104
        'da'         => 'danish',
105
        'nl'         => 'dutch',
106
        'en'         => 'english',
107
        'fr'         => 'french',
108
        'gl'         => 'galician',
109
        'de'         => 'german',
110
        'el'         => 'greek',
111
        'he'         => 'hebrew',
112
        'hu'         => 'hungarian',
113
        'it'         => 'italian',
114
        'ja'         => 'japanese',
115
        'lt'         => 'lithuanian',
116
        'mn'         => 'mongol',
117
        'pl'         => 'polish',
118
        'pt-br'      => 'portuguese-br',
119
        'pt'         => 'portuguese-pt',
120
        'ro'         => 'romanian',
121
        'ru'         => 'russian',
122
        'ru'         => 'russian',
123
        'sk'         => 'slovak',
124
        'es'         => 'spanish',
125
        'sv'         => 'swedish',
126
        'tr'         => 'turkish',
127
        'uk'         => 'ukrainian',
128
    ];
129
130
    public $languages_iso_code = [
131
        'afrikaans'          => 'af',
132
        'arabic'             => 'ar',
133
        'catalan'            => 'ca',
134
        'chinese-tr'         => 'zh-CN',
135
        'chinese-sim'        => 'zh-CN',
136
        'chinese-utf8-zh_TW' => 'zh-TW',
137
        'chinese-utf8-zh_CN' => 'zh-CN',
138
        'czech'              => 'cs',
139
        'danish'             => 'da',
140
        'dutch'              => 'nl',
141
        'english'            => 'en',
142
        'french'             => 'fr',
143
        'galician'           => 'gl',
144
        'german'             => 'de',
145
        'greek'              => 'el',
146
        'hebrew'             => 'he',
147
        'hungarian'          => 'hu',
148
        'italian'            => 'it',
149
        'japanese'           => 'ja',
150
        'lithuanian'         => 'lt',
151
        'mongol'             => 'mn',
152
        'polish'             => 'pl',
153
        'portuguese-br'      => 'pt-BR',
154
        'portuguese-pt'      => 'pt',
155
        'romanian'           => 'ro',
156
        'russian'            => 'ru',
157
        'russian'            => 'ru',
158
        'slovak'             => 'sk',
159
        'spanish'            => 'es',
160
        'swedish'            => 'sv',
161
        'turkish'            => 'tr',
162
        'ukrainian'          => 'uk',
163
    ];
164
165
    public function __construct($container)
166
    {
167
        $availableLanguages = $this->availableLanguages;
168
        $appLangFiles       = $this->appLangFiles;
169
        $appClasses         = $this->appClasses;
170
        $_language          = $this->_language;
171
        $conf               = $container->conf;
172
173
        $languages_iso_code = $this->languages_iso_code;
174
175
        if (!isset($conf['default_lang'])) {
176
            $conf['default_lang'] = 'english';
177
        }
178
179
        // 1. Check for the language from a request var
180
        if (isset($_REQUEST['language'], $appLangFiles[$_REQUEST['language']])) {
181
            /* save the selected language in cookie for a year */
182
            setcookie('webdbLanguage', $_REQUEST['language'], time() + 31536000);
183
            $_language = $_REQUEST['language'];
184
        } elseif (!isset($_language) && isset($_SESSION['webdbLanguage'], $appLangFiles[$_SESSION['webdbLanguage']])) {
185
            // 2. Check for language session var
186
            $_language = $_SESSION['webdbLanguage'];
187
        } elseif (!isset($_language) && isset($_COOKIE['webdbLanguage'], $appLangFiles[$_COOKIE['webdbLanguage']])) {
188
            // 3. Check for language in cookie var
189
            $_language = $_COOKIE['webdbLanguage'];
190
        } elseif (!isset($_language) && $conf['default_lang'] == 'auto' && isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
191
            // 4. Check for acceptable languages in HTTP_ACCEPT_LANGUAGE var
192
            // extract acceptable language tags
193
            // (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.4)
194
            preg_match_all(
195
                '/\s*([a-z]{1,8}(?:-[a-z]{1,8})*)(?:;q=([01](?:.[0-9]{0,3})?))?\s*(?:,|$)/',
196
                strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']),
197
                $_m,
198
                PREG_SET_ORDER
199
            );
200
            foreach ($_m as $_l) {
201
                // $_l[1] = language tag, [2] = quality
202
                if (!isset($_l[2])) {
203
                    $_l[2] = 1;
204
                }
205
                // Default quality to 1
206
                if ($_l[2] > 0 && $_l[2] <= 1 && isset($availableLanguages[$_l[1]])) {
207
                    // Build up array of (quality => language_file)
208
                    $_acceptLang[$_l[2]] = $availableLanguages[$_l[1]];
209
                }
210
            }
211
            unset($_m, $_l);
212
213
            if (isset($_acceptLang)) {
214
                // Sort acceptable languages by quality
215
                krsort($_acceptLang, SORT_NUMERIC);
216
                $_language = reset($_acceptLang);
217
                unset($_acceptLang);
218
            }
219
        } elseif (!isset($_language) && $conf['default_lang'] != 'auto' && isset($appLangFiles[$conf['default_lang']])) {
220
            // 5. Otherwise resort to the default set in the config file
221
            $_language = $conf['default_lang'];
222
        } else {
223
            // 6. Otherwise, default to english.
224
            $_language = 'english';
225
        }
226
227
        $_type = '\PHPPgAdmin\Translations\\' . $appClasses[$_language];
228
229
        $langClass = new $_type();
230
231
        $_SESSION['webdbLanguage'] = $_language;
232
233
        if (array_key_exists($_language, $languages_iso_code)) {
234
            $_isolang = $languages_iso_code[$_language];
235
        } else {
236
            $_isolang = 'en';
237
        }
238
        $_SESSION['isolang'] = $_isolang;
239
240
        $container->offsetSet('appLangFiles', $appLangFiles);
241
        $container->offsetSet('language', $_language);
242
        $container->offsetSet('isolang', $_isolang);
243
244
        $this->lang            = $langClass->getLang();
245
        $this->lang['isolang'] = $_isolang;
246
    }
247
}
248