DeployStaticContent.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Deploy\Service;
  7. use Magento\Deploy\Strategy\DeployStrategyFactory;
  8. use Magento\Deploy\Process\QueueFactory;
  9. use Magento\Deploy\Console\DeployStaticOptions as Options;
  10. use Magento\Framework\App\View\Deployment\Version\StorageInterface;
  11. use Magento\Framework\Exception\LocalizedException;
  12. use Magento\Framework\ObjectManagerInterface;
  13. use Psr\Log\LoggerInterface;
  14. /**
  15. * Main service for static content deployment
  16. *
  17. * Aggregates services to deploy static files, static files bundles, translations and minified templates
  18. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  19. */
  20. class DeployStaticContent
  21. {
  22. /**
  23. * @var DeployStrategyFactory
  24. */
  25. private $deployStrategyFactory;
  26. /**
  27. * @var QueueFactory
  28. */
  29. private $queueFactory;
  30. /**
  31. * @var LoggerInterface
  32. */
  33. private $logger;
  34. /**
  35. * @var ObjectManagerInterface
  36. */
  37. private $objectManager;
  38. /**
  39. * @var StorageInterface
  40. */
  41. private $versionStorage;
  42. /**
  43. * DeployStaticContent constructor
  44. *
  45. * @param ObjectManagerInterface $objectManager
  46. * @param LoggerInterface $logger
  47. * @param StorageInterface $versionStorage
  48. * @param DeployStrategyFactory $deployStrategyFactory
  49. * @param QueueFactory $queueFactory
  50. */
  51. public function __construct(
  52. ObjectManagerInterface $objectManager,
  53. LoggerInterface $logger,
  54. StorageInterface $versionStorage,
  55. DeployStrategyFactory $deployStrategyFactory,
  56. QueueFactory $queueFactory
  57. ) {
  58. $this->objectManager = $objectManager;
  59. $this->logger = $logger;
  60. $this->versionStorage = $versionStorage;
  61. $this->deployStrategyFactory = $deployStrategyFactory;
  62. $this->queueFactory = $queueFactory;
  63. }
  64. /**
  65. * Run deploy procedure
  66. *
  67. * @param array $options
  68. * @throws LocalizedException
  69. * @return void
  70. */
  71. public function deploy(array $options)
  72. {
  73. $version = !empty($options[Options::CONTENT_VERSION]) && is_string($options[Options::CONTENT_VERSION])
  74. ? $options[Options::CONTENT_VERSION]
  75. : (new \DateTime())->getTimestamp();
  76. $this->versionStorage->save($version);
  77. if ($this->isRefreshContentVersionOnly($options)) {
  78. $this->logger->warning("New content version: " . $version);
  79. return;
  80. }
  81. $queue = $this->queueFactory->create(
  82. [
  83. 'logger' => $this->logger,
  84. 'options' => $options,
  85. 'maxProcesses' => $this->getProcessesAmount($options),
  86. 'deployPackageService' => $this->objectManager->create(
  87. \Magento\Deploy\Service\DeployPackage::class,
  88. [
  89. 'logger' => $this->logger
  90. ]
  91. )
  92. ]
  93. );
  94. $deployStrategy = $this->deployStrategyFactory->create(
  95. $options[Options::STRATEGY],
  96. [
  97. 'queue' => $queue
  98. ]
  99. );
  100. $packages = $deployStrategy->deploy($options);
  101. if ($options[Options::NO_JAVASCRIPT] !== true) {
  102. $deployRjsConfig = $this->objectManager->create(DeployRequireJsConfig::class, [
  103. 'logger' => $this->logger
  104. ]);
  105. $deployI18n = $this->objectManager->create(DeployTranslationsDictionary::class, [
  106. 'logger' => $this->logger
  107. ]);
  108. $deployBundle = $this->objectManager->create(Bundle::class, [
  109. 'logger' => $this->logger
  110. ]);
  111. foreach ($packages as $package) {
  112. if (!$package->isVirtual()) {
  113. $deployRjsConfig->deploy($package->getArea(), $package->getTheme(), $package->getLocale());
  114. $deployI18n->deploy($package->getArea(), $package->getTheme(), $package->getLocale());
  115. $deployBundle->deploy($package->getArea(), $package->getTheme(), $package->getLocale());
  116. }
  117. }
  118. }
  119. if ($options[Options::NO_HTML_MINIFY] !== true) {
  120. $this->objectManager->get(MinifyTemplates::class)->minifyTemplates();
  121. }
  122. }
  123. /**
  124. * Returns jobs count
  125. *
  126. * @param array $options
  127. * @return int
  128. */
  129. private function getProcessesAmount(array $options)
  130. {
  131. return isset($options[Options::JOBS_AMOUNT]) ? (int)$options[Options::JOBS_AMOUNT] : 0;
  132. }
  133. /**
  134. * Check if '--refresh-content-version-only' argument was inserted
  135. *
  136. * @param array $options
  137. * @return bool
  138. */
  139. private function isRefreshContentVersionOnly(array $options)
  140. {
  141. return isset($options[Options::REFRESH_CONTENT_VERSION_ONLY])
  142. && $options[Options::REFRESH_CONTENT_VERSION_ONLY];
  143. }
  144. }