Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
OtherComponentsGrid.php
Go to the documentation of this file.
1 <?php
8 
10 use Zend\Mvc\Controller\AbstractActionController;
11 use Zend\View\Model\JsonModel;
12 
16 class OtherComponentsGrid extends AbstractActionController
17 {
21  private $composerInformation;
22 
26  private $infoCommand;
27 
32  public function __construct(
33  \Magento\Framework\Composer\ComposerInformation $composerInformation,
34  \Magento\Framework\Composer\MagentoComposerApplicationFactory $magentoComposerApplicationFactory
35  ) {
36  $this->composerInformation = $composerInformation;
37  $this->infoCommand = $magentoComposerApplicationFactory->createInfoCommand();
38  }
39 
45  public function indexAction()
46  {
47  $view = new \Zend\View\Model\ViewModel;
48  $view->setTemplate('/error/404.phtml');
49  $this->getResponse()->setStatusCode(\Zend\Http\Response::STATUS_CODE_404);
50  return $view;
51  }
52 
59  public function componentsAction()
60  {
61  try {
62  $components = $this->composerInformation->getInstalledMagentoPackages();
63  foreach ($components as $component) {
64  if (!$this->composerInformation->isPackageInComposerJson($component['name'])) {
65  unset($components[$component['name']]);
66  continue;
67  }
68  $componentNameParts = explode('/', $component['name']);
69  $packageInfo = $this->infoCommand->run($component['name']);
70  if (!$packageInfo) {
71  throw new \RuntimeException('Package info not found for ' . $component['name']);
72  }
73  if ($packageInfo[InfoCommand::NEW_VERSIONS]) {
74  $currentVersion = $packageInfo[InfoCommand::CURRENT_VERSION];
75  $components[$component['name']]['version'] = $currentVersion;
76  $versions = [];
77  foreach ($packageInfo[InfoCommand::NEW_VERSIONS] as $version) {
78  $versions[] = ['id' => $version, 'name' => $version];
79  }
80  $versions[] = [
81  'id' => $packageInfo[InfoCommand::CURRENT_VERSION],
82  'name' => $packageInfo[InfoCommand::CURRENT_VERSION]
83  ];
84 
85  $versions[0]['name'] .= ' (latest)';
86  $versions[count($versions) - 1]['name'] .= ' (current)';
87 
88  $components[$component['name']]['vendor'] = $componentNameParts[0];
89  $components[$component['name']]['updates'] = $versions;
90  $components[$component['name']]['dropdownId'] = 'dd_' . $component['name'];
91  $components[$component['name']]['checkboxId'] = 'cb_' . $component['name'];
92  } else {
93  unset($components[$component['name']]);
94  }
95  }
96  return new JsonModel(
97  [
98  'components' => array_values($components),
99  'total' => count($components),
101  ]
102  );
103  } catch (\Exception $e) {
104  return new JsonModel(
105  [
107  ]
108  );
109  }
110  }
111 }
__construct(\Magento\Framework\Composer\ComposerInformation $composerInformation, \Magento\Framework\Composer\MagentoComposerApplicationFactory $magentoComposerApplicationFactory)