Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
DbVersionInfo.php
Go to the documentation of this file.
1 <?php
7 
9 
15 {
19  const KEY_MODULE = 'module';
20  const KEY_TYPE = 'type';
21  const KEY_CURRENT = 'current';
22  const KEY_REQUIRED = 'required';
26  private $moduleList;
27 
31  private $moduleResource;
32 
36  private $dbVersionErrorsCache = null;
37 
42  public function __construct(
43  ModuleListInterface $moduleList,
44  ResourceInterface $moduleResource
45  ) {
46  $this->moduleList = $moduleList;
47  $this->moduleResource = $moduleResource;
48  }
49 
56  public function isSchemaUpToDate($moduleName)
57  {
58  $dbVer = $this->moduleResource->getDbVersion($moduleName);
59  return $this->isModuleVersionEqual($moduleName, $dbVer);
60  }
61 
66  public function isDataUpToDate($moduleName)
67  {
68  $dataVer = $this->moduleResource->getDataVersion($moduleName);
69  return $this->isModuleVersionEqual($moduleName, $dataVer);
70  }
71 
78  private function getSchemaInfo($moduleName)
79  {
80  $dbVer = $this->moduleResource->getDbVersion($moduleName); // version saved in DB
81  $module = $this->moduleList->getOne($moduleName);
82  $configVer = $module['setup_version'];
83  $dbVer = $dbVer ?: 'none';
84  return [
85  self::KEY_CURRENT => $dbVer,
86  self::KEY_REQUIRED => $configVer,
87  self::KEY_MODULE => $moduleName,
88  self::KEY_TYPE => 'schema'
89  ];
90  }
91 
98  public function getDbVersionErrors()
99  {
100  if ($this->dbVersionErrorsCache === null) {
101  $this->dbVersionErrorsCache = [];
102  foreach ($this->moduleList->getNames() as $moduleName) {
103  if (!$this->isSchemaUpToDate($moduleName)) {
104  $this->dbVersionErrorsCache[] = $this->getSchemaInfo($moduleName);
105  }
106  if (!$this->isDataUpToDate($moduleName)) {
107  $this->dbVersionErrorsCache[] = $this->getDataInfo($moduleName);
108  }
109  }
110  }
111 
112  return $this->dbVersionErrorsCache;
113  }
114 
121  private function getDataInfo($moduleName)
122  {
123  $dataVer = $this->moduleResource->getDataVersion($moduleName);
124  $module = $this->moduleList->getOne($moduleName);
125  $configVer = $module['setup_version'];
126  $dataVer = $dataVer ?: 'none';
127  return [
128  self::KEY_CURRENT => $dataVer,
129  self::KEY_REQUIRED => $configVer,
130  self::KEY_MODULE => $moduleName,
131  self::KEY_TYPE => 'data'
132  ];
133  }
134 
142  private function isModuleVersionEqual($moduleName, $version)
143  {
144  $module = $this->moduleList->getOne($moduleName);
145  $configVer = isset($module['setup_version']) ? $module['setup_version'] : null;
146 
147  if (empty($configVer)) {
152  return true;
153  }
154 
155  return version_compare($configVer, $version) === ModuleDataSetupInterface::VERSION_COMPARE_EQUAL;
156  }
157 }
__construct(ModuleListInterface $moduleList, ResourceInterface $moduleResource)