diff options
Diffstat (limited to 'application/views/scripts/error/error.phtml')
-rw-r--r-- | application/views/scripts/error/error.phtml | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/application/views/scripts/error/error.phtml b/application/views/scripts/error/error.phtml new file mode 100644 index 0000000..3c7462f --- /dev/null +++ b/application/views/scripts/error/error.phtml @@ -0,0 +1,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.9', 'icinga-php-thirdparty' => '>= 0.11']; + + 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> |