mirror of
https://github.com/Icinga/icingaweb2.git
synced 2025-09-26 03:09:10 +02:00
Introduce class ModuleDependency
This commit is contained in:
parent
ca3bfddf42
commit
e390a61d18
99
modules/setup/library/Setup/ModuleDependency.php
Normal file
99
modules/setup/library/Setup/ModuleDependency.php
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Icinga\Module\Setup;
|
||||||
|
|
||||||
|
use Icinga\Application\Modules\Module;
|
||||||
|
use Icinga\Module\Setup\Requirement\ModuleMissingRequirement;
|
||||||
|
use Icinga\Module\Setup\Requirement\SetRequirement;
|
||||||
|
use Icinga\Module\Setup\Requirement\WebModuleRequirement;
|
||||||
|
|
||||||
|
class ModuleDependency
|
||||||
|
{
|
||||||
|
/** @var Module The given Module */
|
||||||
|
protected $module;
|
||||||
|
|
||||||
|
/** @var array The chosen modules */
|
||||||
|
protected $checkedModules;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Module $module The given module
|
||||||
|
*
|
||||||
|
* @param array $checkedModules The checked modules from module page
|
||||||
|
*/
|
||||||
|
public function __construct(Module $module, array $checkedModules)
|
||||||
|
{
|
||||||
|
$this->module = $module;
|
||||||
|
$this->checkedModules = $checkedModules;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the module dependency requirements
|
||||||
|
*
|
||||||
|
* @return RequirementSet
|
||||||
|
*/
|
||||||
|
public function getRequirements()
|
||||||
|
{
|
||||||
|
$icingadbAndMonitoring = [];
|
||||||
|
$set = new RequirementSet();
|
||||||
|
|
||||||
|
foreach ($this->module->getRequiredModules() as $name => $requiredVersion) {
|
||||||
|
if ($name === 'monitoring' || $name === 'icingadb') {
|
||||||
|
$icingadbAndMonitoring[$name] = $requiredVersion;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$options = [
|
||||||
|
'alias' => $name,
|
||||||
|
'description' => sprintf(
|
||||||
|
t('Module %s (%s) is required.'),
|
||||||
|
$name,
|
||||||
|
$requiredVersion
|
||||||
|
)
|
||||||
|
];
|
||||||
|
|
||||||
|
if (! in_array($name, $this->checkedModules)) {
|
||||||
|
$set->add(new ModuleMissingRequirement($options));
|
||||||
|
} else {
|
||||||
|
$options['condition'] = [$name, $requiredVersion];
|
||||||
|
$set->add(new WebModuleRequirement($options));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! empty($icingadbAndMonitoring)) {
|
||||||
|
$icingadbOrMonitoring = new RequirementSet(false, RequirementSet::MODE_OR);
|
||||||
|
foreach ($icingadbAndMonitoring as $name => $requiredVersion) {
|
||||||
|
$options = [
|
||||||
|
'alias' => $name,
|
||||||
|
'optional' => true,
|
||||||
|
'description' => sprintf(
|
||||||
|
t('Module %s (%s) is required.'),
|
||||||
|
$name,
|
||||||
|
$requiredVersion
|
||||||
|
)
|
||||||
|
];
|
||||||
|
|
||||||
|
if (! in_array($name, $this->checkedModules)) {
|
||||||
|
$icingadbOrMonitoring->add(new ModuleMissingRequirement($options));
|
||||||
|
} else {
|
||||||
|
$options['condition'] = [$name, $requiredVersion];
|
||||||
|
$icingadbOrMonitoring->add(new WebModuleRequirement($options));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$set->merge($icingadbOrMonitoring);
|
||||||
|
|
||||||
|
$requirement = (new SetRequirement([
|
||||||
|
'title' =>'Base Module',
|
||||||
|
'alias' => 'Monitoring OR Icingadb',
|
||||||
|
'optional' => false,
|
||||||
|
'condition' => $icingadbOrMonitoring,
|
||||||
|
'description' => t('Module Monitoring OR Icingadb is required.')
|
||||||
|
]));
|
||||||
|
|
||||||
|
$set->add($requirement);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $set;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user