Passed
Pull Request — master (#1412)
by Jakob
03:19
created
Labels
Severity
1
<?php
2
3
/**
4
 * Use Composer autoloader to automatically load library classes.
5
 */
6
try {
7
    if (!file_exists('./vendor/autoload.php')) {
8
        throw new Exception('Dependencies managed by Composer missing. Please run "php composer.phar install".');
9
    }
10
    require_once 'vendor/autoload.php';
11
} catch (Exception $e) {
12
    echo "Error: " . $e->getMessage();
13
    return;
14
}
15
16
$config = new GlobalConfig();
17
$model = new Model($config);
18
$controller = new WebController($model);
19
$request = new Request($model);
20
21
// PATH_INFO, for example "/ysa/fi"
22
$path = $request->getServerConstant('PATH_INFO') ? $request->getServerConstant('PATH_INFO') : '';
23
$parts = explode('/', $path);
0 ignored issues
show
It seems like $path can also be of type null; however, parameter $string of explode() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

23
$parts = explode('/', /** @scrutinizer ignore-type */ $path);
Loading history...
24
25
26
if (sizeof($parts) <= 2) {
27
    // if language code missing, redirect to guessed language
28
    // in any case, redirect to <lang>/
29
    $lang = sizeof($parts) == 2 && $parts[1] !== '' ? $parts[1] : $controller->guessLanguage();
30
    header("Location: " . $lang . "/");
31
} else {
32
  if (array_key_exists($parts[1], $config->getLanguages())) { // global pages
33
        $request->setLang($parts[1]);
34
        $content_lang = $request->getQueryParam('clang');
35
        $request->setContentLang($content_lang);
36
        ($parts[2] == 'about' || $parts[2] == 'feedback' || $parts[2] == 'search') ? $request->setPage($parts[2]) : $request->setPage('');
37
        if ($request->getPage() == '') {
38
            $controller->invokeVocabularies($request);
39
        } elseif ($request->getPage() == 'about') {
40
            $controller->invokeAboutPage($request);
41
        } elseif ($request->getPage() == 'feedback') {
42
            $controller->invokeFeedbackForm($request);
43
        } elseif ($request->getPage() == 'search') {
44
            $controller->invokeGlobalSearch($request);
45
        } else {
46
            $controller->invokeGenericErrorPage($request);
47
        }
48
    } else { // vocabulary-specific pages
49
        $vocab = $parts[1];
50
        try {
51
            $request->setVocab($parts[1]);
52
        } catch (Exception | ValueError $e) {
53
            $request->setLang($controller->guessLanguage());
54
            $controller->invokeGenericErrorPage($request);
55
            return;
56
        }
57
        if (sizeof($parts) == 3) { // language code missing
58
            $lang = $controller->guessLanguage();
59
            $newurl = $controller->getBaseHref() . $vocab . "/" . $lang . "/";
60
            header("Location: " . $newurl);
61
        } else {
62
            if (array_key_exists($parts[2], $config->getLanguages())) {
63
                $lang = $parts[2];
64
                $content_lang = $request->getQueryParam('clang') ? $request->getQueryParam('clang') : $lang;
65
                $request->setContentLang($content_lang);
66
                $request->setLang($parts[2]);
67
                $request->setPage($parts[3]);
68
                if (!$request->getPage()) {
69
                    $request->setPage('vocab');
70
                    $controller->invokeVocabularyHome($request);
71
                } elseif ($request->getPage() == 'feedback') {
72
                    $controller->invokeFeedbackForm($request);
73
                } elseif ($request->getPage() == 'search') {
74
                    $controller->invokeVocabularySearch($request);
75
                } elseif ($request->getPage() == 'index') {
76
                    if ((sizeof($parts) == 5) && $parts[4] !== '') {
77
                        // letter given
78
                        $request->setLetter($parts[4]);
79
                    }
80
81
                    $controller->invokeAlphabeticalIndex($request);
82
                } elseif ($request->getPage() == 'page') {
83
                    ($request->getQueryParam('uri')) ? $request->setUri($request->getQueryParam('uri')) : $request->setUri($parts[4]);
84
                    if ($request->getUri() === null || $request->getUri() === '') {
85
                        $controller->invokeGenericErrorPage($request);
86
                    } else {
87
                        $controller->invokeVocabularyConcept($request);
88
                    }
89
90
                } elseif ($request->getPage() == 'groups') {
91
                    $controller->invokeGroupIndex($request);
92
                } elseif ($request->getPage() == 'changes') {
93
                    $controller->invokeChangeList($request, 'dc:modified');
94
                } elseif ($request->getPage() == 'new') {
95
                    $controller->invokeChangeList($request);
96
                } else {
97
                    $controller->invokeGenericErrorPage($request);
98
                }
99
            } else { // language code missing, redirect to some language version
100
                $lang = $controller->guessLanguage($vocab);
101
                $newurl = $controller->getBaseHref() . $vocab . "/" . $lang . "/" . implode('/', array_slice($parts, 2));
102
                $qs = $request->getServerConstant('QUERY_STRING');
103
                if ($qs) {
104
                    $newurl .= "?" . $qs;
105
                }
106
                header("Location: $newurl");
107
            }
108
        }
109
    }
110
}
111