Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Status.php
Go to the documentation of this file.
1 <?php
8 
11 
17 class Status
18 {
24  private $loader;
25 
31  private $list;
32 
38  private $writer;
39 
45  private $dependencyChecker;
46 
52  private $conflictChecker;
53 
63  public function __construct(
64  ModuleList\Loader $loader,
65  ModuleList $list,
66  Writer $writer,
67  ConflictChecker $conflictChecker,
68  DependencyChecker $dependencyChecker
69  ) {
70  $this->loader = $loader;
71  $this->list = $list;
72  $this->writer = $writer;
73  $this->conflictChecker = $conflictChecker;
74  $this->dependencyChecker = $dependencyChecker;
75  }
76 
87  public function checkConstraints(
88  $isEnabled,
89  $modulesToBeChanged,
90  $currentlyEnabledModules = null,
91  $prettyMessage = false
92  ) {
93  $errorMessages = [];
94  if ($isEnabled) {
95  $errorModulesDependency = $this->dependencyChecker->checkDependenciesWhenEnableModules(
96  $modulesToBeChanged,
97  $currentlyEnabledModules
98  );
99  $errorModulesConflict = $this->conflictChecker->checkConflictsWhenEnableModules(
100  $modulesToBeChanged,
101  $currentlyEnabledModules
102  );
103  } else {
104  $errorModulesDependency = $this->dependencyChecker->checkDependenciesWhenDisableModules(
105  $modulesToBeChanged,
106  $currentlyEnabledModules
107  );
108  $errorModulesConflict = [];
109  }
110 
111  foreach ($errorModulesDependency as $moduleName => $missingDependencies) {
112  if (!empty($missingDependencies)) {
113  if ($prettyMessage) {
114  $errorMessages[] = $this->createShortErrorMessage($isEnabled, $moduleName);
115  } else {
116  $errorMessages = array_merge(
117  $errorMessages,
118  $this->createVerboseErrorMessage($isEnabled, $moduleName, $missingDependencies)
119  );
120  }
121  }
122  }
123 
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);
128  }
129  }
130 
131  return $errorMessages;
132  }
133 
143  public function setIsEnabled($isEnabled, $modules)
144  {
145  $result = [];
146  foreach ($this->getAllModules($modules) as $name) {
147  $currentStatus = $this->list->has($name);
148  if (in_array($name, $modules)) {
149  $result[$name] = (int)$isEnabled;
150  } else {
151  $result[$name] = (int)$currentStatus;
152  }
153  }
154  $this->writer->saveConfig([ConfigFilePool::APP_CONFIG => ['modules' => $result]], true);
155  }
156 
164  public function getModulesToChange($isEnabled, $modules)
165  {
166  $changed = [];
167  foreach ($this->getAllModules($modules) as $name) {
168  $currentStatus = $this->list->has($name);
169  if (in_array($name, $modules)) {
170  if ($isEnabled != $currentStatus) {
171  $changed[] = $name;
172  }
173  }
174  }
175  return $changed;
176  }
177 
185  private function getAllModules($modules)
186  {
187  $all = $this->loader->load();
188  $unknown = [];
189  foreach ($modules as $name) {
190  if (!isset($all[$name])) {
191  $unknown[] = $name;
192  }
193  }
194  if ($unknown) {
195  throw new \LogicException("Unknown module(s): '" . implode("', '", $unknown) . "'");
196  }
197  return array_keys($all);
198  }
199 
207  private function createShortErrorMessage($isEnabled, $moduleName)
208  {
209  if ($isEnabled) {
210  return "Cannot enable $moduleName";
211  } else {
212  return "Cannot disable $moduleName";
213  }
214  }
215 
226  private function createVerboseErrorMessage($isEnabled, $moduleName, $missingDependencies)
227  {
228  if ($isEnabled) {
229  $errorMessages[] = "Cannot enable $moduleName because it depends on disabled modules:";
230  } else {
231  $errorMessages[] = "Cannot disable $moduleName because modules depend on it:";
232  }
233  foreach ($missingDependencies as $errorModule => $path) {
234  $errorMessages[] = "$errorModule: " . implode('->', $path);
235  }
236  return $errorMessages;
237  }
238 }
getModulesToChange($isEnabled, $modules)
Definition: Status.php:164
$loader
Definition: autoload.php:8
setIsEnabled($isEnabled, $modules)
Definition: Status.php:143
__construct(ModuleList\Loader $loader, ModuleList $list, Writer $writer, ConflictChecker $conflictChecker, DependencyChecker $dependencyChecker)
Definition: Status.php:63
checkConstraints( $isEnabled, $modulesToBeChanged, $currentlyEnabledModules=null, $prettyMessage=false)
Definition: Status.php:87
if(!isset($_GET['name'])) $name
Definition: log.php:14