summaryrefslogtreecommitdiffstats
path: root/application/views/scripts/error/error.phtml
blob: 5f4579ac62e66e193dcde394aa2dd5d12ce228a1 (plain)
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php if (! $this->compact && ! $hideControls): ?>
<div class="controls">
    <?= $tabs ?>
</div>
<?php endif ?>
<div class="content">
<?php
if (isset($stackTraces)) {
    foreach ($messages as $i => $message) {
        echo '<p tabindex="-1" class="autofocus error-message">' . nl2br($this->escape($message)) . '</p>'
            . '<hr>'
            . '<pre>' . $this->escape($stackTraces[$i]) . '</pre>';
    }
} else {
    foreach ($messages as $message) {
        echo '<p tabindex="-1" class="autofocus error-message">' . nl2br($this->escape($message)) . '</p>';
    }
}

$libraries = \Icinga\Application\Icinga::app()->getLibraries();
$coreReason = [];
$modReason = [];

if (isset($requiredVendor, $requiredProject) && $requiredVendor && $requiredProject) {
    // TODO: I don't like this, can we define requirements somewhere else?
    $coreDeps = ['icinga-php-library' => '>= 0.13', 'icinga-php-thirdparty' => '>= 0.12'];

    foreach ($coreDeps as $libraryName => $requiredVersion) {
        if (! $libraries->has($libraryName)) {
            $coreReason[] = sprintf($this->translate(
                'Library "%s" is required and missing. Please install a version of it matching the required one: %s'
            ), $libraryName, $requiredVersion);
        } elseif (! $libraries->has($libraryName, $requiredVersion) && $libraries->get($libraryName)->isRequired($requiredVendor, $requiredProject)) {
            $coreReason[] = sprintf($this->translate(
                'Library "%s" is required and installed, but its version (%s) does not satisfy the required one: %s'
            ), $libraryName, $libraries->get($libraryName)->getVersion() ?: '-', $requiredVersion);
        }
    }

    if (! empty($coreReason)) {
        array_unshift($coreReason, $this->translate('You have unmet dependencies. Please check Icinga Web 2\'s installation instructions.'));
    }
}

if (isset($module)) {
    $manager = \Icinga\Application\Icinga::app()->getModuleManager();
    if ($manager->hasUnmetDependencies($module->getName())) {
        if (isset($requiredModule) && $requiredModule && isset($module->getRequiredModules()[$requiredModule])) {
            if (! $manager->hasInstalled($requiredModule)) {
                $modReason[] = sprintf($this->translate(
                    'Module "%s" is required and missing. Please install a version of it matching the required one: %s'
                ), $requiredModule, $module->getRequiredModules()[$requiredModule]);
            } elseif (! $manager->hasEnabled($requiredModule)) {
                $modReason[] = sprintf($this->translate(
                    'Module "%s" is required and installed, but not enabled. Please enable module "%1$s".'
                ), $requiredModule);
            } elseif (! $manager->has($requiredModule, $module->getRequiredModules()[$requiredModule])) {
                $modReason[] = sprintf($this->translate(
                    'Module "%s" is required and installed, but its version (%s) does not satisfy the required one: %s'
                ), $requiredModule, $manager->getModule($requiredModule, false)->getVersion(), $module->getRequiredModules()[$requiredModule]);
            }
        } elseif (isset($requiredVendor, $requiredProject) && $requiredVendor && $requiredProject) {
            foreach ($module->getRequiredLibraries() as $libraryName => $requiredVersion) {
                if (! $libraries->has($libraryName)) {
                    $modReason[] = sprintf($this->translate(
                        'Library "%s" is required and missing. Please install a version of it matching the required one: %s'
                    ), $libraryName, $requiredVersion);
                } elseif (! $libraries->has($libraryName, $requiredVersion) && $libraries->get($libraryName)->isRequired($requiredVendor, $requiredProject)) {
                    $modReason[] = sprintf($this->translate(
                        'Library "%s" is required and installed, but its version (%s) does not satisfy the required one: %s'
                    ), $libraryName, $libraries->get($libraryName)->getVersion() ?: '-', $requiredVersion);
                }
            }
        }

        if (! empty($modReason)) {
            array_unshift($modReason, sprintf($this->translate(
                'This error might have occurred because module "%s" has unmet dependencies.'
                . ' Please check it\'s installation instructions and install missing dependencies.'
            ), $module->getName()));
        }
    }
}

// The following doesn't use ipl\Html because that's what the error possibly is about
?>
<?php if (! empty($coreReason)): ?>
<div class="error-reason">
<?php endif ?>
<?php foreach ($coreReason as $msg): ?>
    <p><?= $msg ?></p>
<?php endforeach ?>
<?php if (! empty($coreReason)): ?>
</div>
<?php endif ?>

<?php if (! empty($modReason)): ?>
<div class="error-reason">
<?php endif ?>
<?php foreach ($modReason as $msg): ?>
    <p><?= $msg ?></p>
<?php endforeach ?>
<?php if (! empty($modReason)): ?>
</div>
<?php endif ?>
</div>