45 private $dependencyChecker;
52 private $conflictChecker;
72 $this->writer = $writer;
73 $this->conflictChecker = $conflictChecker;
74 $this->dependencyChecker = $dependencyChecker;
90 $currentlyEnabledModules =
null,
91 $prettyMessage =
false 95 $errorModulesDependency = $this->dependencyChecker->checkDependenciesWhenEnableModules(
97 $currentlyEnabledModules
99 $errorModulesConflict = $this->conflictChecker->checkConflictsWhenEnableModules(
101 $currentlyEnabledModules
104 $errorModulesDependency = $this->dependencyChecker->checkDependenciesWhenDisableModules(
106 $currentlyEnabledModules
108 $errorModulesConflict = [];
111 foreach ($errorModulesDependency as $moduleName => $missingDependencies) {
112 if (!empty($missingDependencies)) {
113 if ($prettyMessage) {
114 $errorMessages[] = $this->createShortErrorMessage($isEnabled, $moduleName);
116 $errorMessages = array_merge(
118 $this->createVerboseErrorMessage($isEnabled, $moduleName, $missingDependencies)
124 foreach ($errorModulesConflict as $moduleName => $conflictingModules) {
125 if (!empty($conflictingModules)) {
126 $errorMessages[] =
"Cannot enable $moduleName because it conflicts with other modules:";
127 $errorMessages[] = implode(
"\n", $conflictingModules);
131 return $errorMessages;
146 foreach ($this->getAllModules($modules) as
$name) {
147 $currentStatus = $this->list->has(
$name);
148 if (in_array(
$name, $modules)) {
167 foreach ($this->getAllModules($modules) as
$name) {
168 $currentStatus = $this->list->has(
$name);
169 if (in_array(
$name, $modules)) {
170 if ($isEnabled != $currentStatus) {
185 private function getAllModules($modules)
187 $all = $this->loader->load();
189 foreach ($modules as
$name) {
190 if (!isset($all[
$name])) {
195 throw new \LogicException(
"Unknown module(s): '" . implode(
"', '", $unknown) .
"'");
197 return array_keys($all);
207 private function createShortErrorMessage($isEnabled, $moduleName)
210 return "Cannot enable $moduleName";
212 return "Cannot disable $moduleName";
226 private function createVerboseErrorMessage($isEnabled, $moduleName, $missingDependencies)
229 $errorMessages[] =
"Cannot enable $moduleName because it depends on disabled modules:";
231 $errorMessages[] =
"Cannot disable $moduleName because modules depend on it:";
233 foreach ($missingDependencies as $errorModule =>
$path) {
234 $errorMessages[] =
"$errorModule: " . implode(
'->',
$path);
236 return $errorMessages;
getModulesToChange($isEnabled, $modules)
setIsEnabled($isEnabled, $modules)
__construct(ModuleList\Loader $loader, ModuleList $list, Writer $writer, ConflictChecker $conflictChecker, DependencyChecker $dependencyChecker)
checkConstraints( $isEnabled, $modulesToBeChanged, $currentlyEnabledModules=null, $prettyMessage=false)
if(!isset($_GET['name'])) $name