UpToDateData.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 UpToDateData 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 $dataPatchReader
  35. * @param PatchBackwardCompatability $patchBackwardCompatability
  36. * @param ModuleList $moduleList
  37. */
  38. public function __construct(
  39. PatchHistory $patchHistory,
  40. PatchReader $dataPatchReader,
  41. PatchBackwardCompatability $patchBackwardCompatability,
  42. ModuleList $moduleList
  43. ) {
  44. $this->patchHistory = $patchHistory;
  45. $this->patchReader = $dataPatchReader;
  46. $this->patchBackwardCompatability = $patchBackwardCompatability;
  47. $this->moduleList = $moduleList;
  48. }
  49. /**
  50. * @return string
  51. */
  52. public function getNotUpToDateMessage() : string
  53. {
  54. return 'Data 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->isSkipableByDataSetupVersion($patchName, $moduleName) &&
  64. !$this->patchHistory->isApplied($patchName)) {
  65. return false;
  66. }
  67. }
  68. }
  69. return true;
  70. }
  71. }