UpToDateSchema.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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\Patch;
  8. use Magento\Framework\Module\ModuleList;
  9. use Magento\Framework\Setup\UpToDateValidatorInterface;
  10. /**
  11. * Allows to validate if data patches is up to date or not
  12. */
  13. class UpToDateSchema implements UpToDateValidatorInterface
  14. {
  15. /**
  16. * @var PatchHistory
  17. */
  18. private $patchHistory;
  19. /**
  20. * @var PatchReader
  21. */
  22. private $patchReader;
  23. /**
  24. * @var PatchBackwardCompatability
  25. */
  26. private $patchBackwardCompatability;
  27. /**
  28. * @var ModuleList
  29. */
  30. private $moduleList;
  31. /**
  32. * UpToDateData constructor.
  33. * @param PatchHistory $patchHistory
  34. * @param PatchReader $schemaReader
  35. * @param PatchBackwardCompatability $patchBackwardCompatability
  36. * @param ModuleList $moduleList
  37. */
  38. public function __construct(
  39. PatchHistory $patchHistory,
  40. PatchReader $schemaReader,
  41. PatchBackwardCompatability $patchBackwardCompatability,
  42. ModuleList $moduleList
  43. ) {
  44. $this->patchHistory = $patchHistory;
  45. $this->patchReader = $schemaReader;
  46. $this->patchBackwardCompatability = $patchBackwardCompatability;
  47. $this->moduleList = $moduleList;
  48. }
  49. /**
  50. * @return string
  51. */
  52. public function getNotUpToDateMessage() : string
  53. {
  54. return 'Schema patches are not up to date';
  55. }
  56. /**
  57. * @return bool
  58. */
  59. public function isUpToDate() : bool
  60. {
  61. foreach ($this->moduleList->getNames() as $moduleName) {
  62. foreach ($this->patchReader->read($moduleName) as $patchName) {
  63. if (!$this->patchBackwardCompatability->isSkipableBySchemaSetupVersion($patchName, $moduleName) &&
  64. !$this->patchHistory->isApplied($patchName)) {
  65. return false;
  66. }
  67. }
  68. }
  69. return true;
  70. }
  71. }