1<?php
2/* Copyright (c) 1998-2015 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4require_once 'Services/Language/interfaces/interface.ilLanguageDetector.php';
5
6/**
7 * Class ilHttpRequestsLanguageDetector
8 * @author Michael Jansen <mjansen@databay.de>
9 * @ingroup Services/Language
10 */
11class ilHttpRequestsLanguageDetector implements ilLanguageDetector
12{
13    /**
14     * @var string
15     */
16    protected $header_value;
17
18    /**
19     * @param array $header_value
20     */
21    public function __construct($header_value)
22    {
23        $this->header_value = $header_value;
24    }
25
26    /**
27     * Returns the detected ISO2 language code
28     * @throws ilLanguageException
29     * @return string
30     */
31    public function getIso2LanguageCode()
32    {
33        if (strlen($this->header_value)) {
34            $matches = array();
35            // Format: de,de-DE;q=0.8,en-US;q=0.6,en;q=0.4
36            preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $this->header_value, $matches);
37            if (count($matches[1])) {
38                $langs = array_combine($matches[1], $matches[4]);
39                foreach ($langs as $lang => $val) {
40                    if ($val === '') {
41                        $langs[$lang] = 1;
42                    }
43                }
44
45                arsort($langs, SORT_NUMERIC);
46
47                $keys = array_keys($langs);
48                if (isset($keys[0])) {
49                    return substr($keys[0], 0, 2);
50                }
51            }
52        }
53
54        require_once 'Services/Language/exceptions/class.ilLanguageException.php';
55        throw new ilLanguageException('Could not extract any language information from request.');
56    }
57}
58