OldDbValidator.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Framework\Setup;
  8. use Composer\Package\Version\VersionParser;
  9. use Magento\Framework\Module\DbVersionInfo;
  10. /**
  11. * Old Validator for database
  12. *
  13. * Used in order to support backward compatability of modules that are installed
  14. * in old way (with Install/Upgrade Schema/Data scripts)
  15. */
  16. class OldDbValidator implements UpToDateValidatorInterface
  17. {
  18. /**
  19. * @var DbVersionInfo
  20. */
  21. private $dbVersionInfo;
  22. /**
  23. * @param DbVersionInfo $dbVersionInfo
  24. */
  25. public function __construct(DbVersionInfo $dbVersionInfo)
  26. {
  27. $this->dbVersionInfo = $dbVersionInfo;
  28. }
  29. /**
  30. * @inheritdoc
  31. */
  32. public function getNotUpToDateMessage(): string
  33. {
  34. $genericMessage = '<info>The module code base doesn\'t match the DB schema and data.</info>' .
  35. PHP_EOL .
  36. '<info>Some modules use code versions newer or older than the database.</info>';
  37. $messages = [];
  38. $versionParser = new VersionParser();
  39. $codebaseUpdateNeeded = false;
  40. foreach ($this->dbVersionInfo->getDbVersionErrors() as $error) {
  41. if (!$codebaseUpdateNeeded && $error[DbVersionInfo::KEY_CURRENT] !== 'none') {
  42. // check if module code base update is needed
  43. $currentVersion = $versionParser->parseConstraints($error[DbVersionInfo::KEY_CURRENT]);
  44. $requiredVersion = $versionParser->parseConstraints('>' . $error[DbVersionInfo::KEY_REQUIRED]);
  45. if ($requiredVersion->matches($currentVersion)) {
  46. $codebaseUpdateNeeded = true;
  47. }
  48. $messages[] = sprintf(
  49. "<info>%20s %10s: %11s -> %-11s</info>",
  50. $error[DbVersionInfo::KEY_MODULE],
  51. $error[DbVersionInfo::KEY_TYPE],
  52. $error[DbVersionInfo::KEY_CURRENT],
  53. $error[DbVersionInfo::KEY_REQUIRED]
  54. );
  55. }
  56. }
  57. return implode(PHP_EOL, $messages) . ($codebaseUpdateNeeded ? $genericMessage : '');
  58. }
  59. /**
  60. * Is up to date
  61. *
  62. * @return bool
  63. */
  64. public function isUpToDate(): bool
  65. {
  66. return empty($this->dbVersionInfo->getDbVersionErrors());
  67. }
  68. }