Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
DbStatusValidator.php
Go to the documentation of this file.
1 <?php
7 
8 use Magento\Framework\Cache\FrontendInterface as FrontendCacheInterface;
14 
19 {
23  private $cache;
24 
28  private $dbVersionInfo;
29 
34  public function __construct(FrontendCacheInterface $cache, DbVersionInfo $dbVersionInfo)
35  {
36  $this->cache = $cache;
37  $this->dbVersionInfo = $dbVersionInfo;
38  }
39 
51  {
52  if (!$this->cache->load('db_is_up_to_date')) {
53  list($versionTooLowErrors, $versionTooHighErrors) = array_values($this->getGroupedDbVersionErrors());
54  if ($versionTooHighErrors) {
55  $message = 'Please update your modules: '
56  . "Run \"composer install\" from the Magento root directory.\n"
57  . "The following modules are outdated:\n%1";
58  throw new LocalizedException(
59  new Phrase($message, [implode("\n", $this->formatVersionTooHighErrors($versionTooHighErrors))])
60  );
61  } elseif ($versionTooLowErrors) {
62  $message = 'Please upgrade your database: '
63  . "Run \"bin/magento setup:upgrade\" from the Magento root directory.\n"
64  . "The following modules are outdated:\n%1";
65 
66  throw new LocalizedException(
67  new Phrase($message, [implode("\n", $this->formatVersionTooLowErrors($versionTooLowErrors))])
68  );
69  } else {
70  $this->cache->save('true', 'db_is_up_to_date');
71  }
72  }
73  }
74 
81  private function formatVersionTooLowErrors($errorsData)
82  {
83  $formattedErrors = [];
84 
85  foreach ($errorsData as $error) {
86  $formattedErrors[] = $error[DbVersionInfo::KEY_MODULE] . ' ' . $error[DbVersionInfo::KEY_TYPE]
87  . ': current version - ' . $error[DbVersionInfo::KEY_CURRENT]
88  . ', required version - ' . $error[DbVersionInfo::KEY_REQUIRED];
89  }
90 
91  return $formattedErrors;
92  }
93 
100  private function formatVersionTooHighErrors($errorsData)
101  {
102  $formattedErrors = [];
103  foreach ($errorsData as $error) {
104  $formattedErrors[] = $error[DbVersionInfo::KEY_MODULE] . ' ' . $error[DbVersionInfo::KEY_TYPE]
105  . ': code version - ' . $error[DbVersionInfo::KEY_REQUIRED]
106  . ', database version - ' . $error[DbVersionInfo::KEY_CURRENT];
107  }
108 
109  return $formattedErrors;
110  }
111 
117  private function getGroupedDbVersionErrors()
118  {
119  $allDbVersionErrors = $this->dbVersionInfo->getDbVersionErrors();
120  return array_reduce(
121  (array)$allDbVersionErrors,
122  function ($carry, $item) {
123  if ($item[DbVersionInfo::KEY_CURRENT] === 'none'
125  ) {
126  $carry['version_too_low'][] = $item;
127  } else {
128  $carry['version_too_high'][] = $item;
129  }
130  return $carry;
131  },
132  [
133  'version_too_low' => [],
134  'version_too_high' => [],
135  ]
136  );
137  }
138 }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
__construct(FrontendCacheInterface $cache, DbVersionInfo $dbVersionInfo)
$message
beforeDispatch(FrontController $subject, RequestInterface $request)