Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Modules.php
Go to the documentation of this file.
1 <?php
7 
10 use Zend\Mvc\Controller\AbstractActionController;
11 use Zend\View\Model\JsonModel;
12 use Zend\Json\Json;
13 
14 class Modules extends AbstractActionController
15 {
21  private $objectManager;
22 
26  protected $allModules;
27 
32  public function __construct(ModuleStatus $allModules, ObjectManagerProvider $objectManagerProvider)
33  {
34  $this->allModules = $allModules;
35  $this->objectManager = $objectManagerProvider->get();
36  }
37 
43  public function indexAction()
44  {
45  $allModules = $this->allModules->getAllModules();
46  $enabledModules = [];
47  foreach ($allModules as $module) {
48  if ($module['selected']) {
49  $enabledModules[] = $module['name'];
50  }
51  }
52  $validity = $this->checkGraph($enabledModules);
53  ksort($allModules);
54  if ($validity->getVariable("success")) {
55  return new JsonModel(['success' => true, 'modules' => $allModules]);
56  } else {
57  $errorMessage = $validity->getVariable("error");
58  return new JsonModel(['success' => false, 'modules' => $allModules,
59  'error' => '<b> Corrupt config.php!</b> <br />' . $errorMessage]);
60  }
61  }
62 
68  public function allModulesValidAction()
69  {
70  try {
71  $params = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY);
72  $enabledModules = isset($params['selectedModules']) ? $params['selectedModules'] : [];
73  return $this->checkGraph($enabledModules);
74  } catch (\Exception $e) {
75  return new JsonModel(['success' => false, 'error' => $e->getMessage()]);
76  }
77  }
78 
86  private function checkGraph(array $toBeEnabledModules, $prettyFormat = false)
87  {
88  $status = $this->objectManager->create(\Magento\Framework\Module\Status::class);
89 
90  // checking enabling constraints
91  $constraints = $status->checkConstraints(true, $toBeEnabledModules, [], $prettyFormat);
92  if ($constraints) {
93  $message = $this->getConstraintsFailureMessage(true, $constraints);
94  return new JsonModel(['success' => false, 'error' => $message]);
95  }
96 
97  return new JsonModel(['success' => true]);
98  }
99 
105  public function validateAction()
106  {
107  $params = Json::decode($this->getRequest()->getContent(), Json::TYPE_ARRAY);
108  $status = $this->objectManager->create(\Magento\Framework\Module\Status::class);
109 
110  $constraints = $status->checkConstraints(
111  $params['status'],
112  [$params['module']],
113  array_diff($params['selectedModules'], [$params['module']])
114  );
115  if ($constraints) {
116  $message = $this->getConstraintsFailureMessage($params['status'], $constraints);
117  return new JsonModel(['success' => false, 'error' => $message]);
118  }
119 
120  $this->allModules->setIsEnabled($params['status'], $params['module']);
121  $allModules = $this->allModules->getAllModules($params['selectedModules']);
122  ksort($allModules);
123  return new JsonModel(['modules' => $allModules]);
124  }
125 
133  private function getConstraintsFailureMessage($isEnable, array $constraints)
134  {
135  if ($isEnable) {
136  $updateType = 'enable';
137  } else {
138  $updateType = 'disable';
139  }
140  $message = " Unable to $updateType modules because of the following constraints:<br>" . PHP_EOL
141  . implode("<br>" . PHP_EOL, $constraints);
142  return $message;
143  }
144 }
$message
__construct(ModuleStatus $allModules, ObjectManagerProvider $objectManagerProvider)
Definition: Modules.php:32
$status
Definition: order_status.php:8
$params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE]
Definition: website.php:18