Observer.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sitemap\Model;
  7. /**
  8. * Sitemap module observer
  9. *
  10. * @author Magento Core Team <core@magentocommerce.com>
  11. */
  12. class Observer
  13. {
  14. /**
  15. * Enable/disable configuration
  16. */
  17. const XML_PATH_GENERATION_ENABLED = 'sitemap/generate/enabled';
  18. /**
  19. * Cronjob expression configuration
  20. *
  21. * @deprecated Use \Magento\Cron\Model\Config\Backend\Sitemap::CRON_STRING_PATH instead.
  22. */
  23. const XML_PATH_CRON_EXPR = 'crontab/default/jobs/generate_sitemaps/schedule/cron_expr';
  24. /**
  25. * Error email template configuration
  26. */
  27. const XML_PATH_ERROR_TEMPLATE = 'sitemap/generate/error_email_template';
  28. /**
  29. * Error email identity configuration
  30. */
  31. const XML_PATH_ERROR_IDENTITY = 'sitemap/generate/error_email_identity';
  32. /**
  33. * 'Send error emails to' configuration
  34. */
  35. const XML_PATH_ERROR_RECIPIENT = 'sitemap/generate/error_email';
  36. /**
  37. * Core store config
  38. *
  39. * @var \Magento\Framework\App\Config\ScopeConfigInterface
  40. */
  41. protected $_scopeConfig;
  42. /**
  43. * @var \Magento\Sitemap\Model\ResourceModel\Sitemap\CollectionFactory
  44. */
  45. protected $_collectionFactory;
  46. /**
  47. * @var \Magento\Framework\Mail\Template\TransportBuilder
  48. */
  49. protected $_transportBuilder;
  50. /**
  51. * @var \Magento\Store\Model\StoreManagerInterface
  52. */
  53. protected $_storeManager;
  54. /**
  55. * @var \Magento\Framework\Translate\Inline\StateInterface
  56. */
  57. protected $inlineTranslation;
  58. /**
  59. * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
  60. * @param \Magento\Sitemap\Model\ResourceModel\Sitemap\CollectionFactory $collectionFactory
  61. * @param \Magento\Store\Model\StoreManagerInterface $storeManager
  62. * @param \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder
  63. * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
  64. */
  65. public function __construct(
  66. \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
  67. \Magento\Sitemap\Model\ResourceModel\Sitemap\CollectionFactory $collectionFactory,
  68. \Magento\Store\Model\StoreManagerInterface $storeManager,
  69. \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder,
  70. \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
  71. ) {
  72. $this->_scopeConfig = $scopeConfig;
  73. $this->_collectionFactory = $collectionFactory;
  74. $this->_storeManager = $storeManager;
  75. $this->_transportBuilder = $transportBuilder;
  76. $this->inlineTranslation = $inlineTranslation;
  77. }
  78. /**
  79. * Generate sitemaps
  80. *
  81. * @return void
  82. * @throws \Exception
  83. * @SuppressWarnings(PHPMD.UnusedLocalVariable)
  84. */
  85. public function scheduledGenerateSitemaps()
  86. {
  87. $errors = [];
  88. // check if scheduled generation enabled
  89. if (!$this->_scopeConfig->isSetFlag(
  90. self::XML_PATH_GENERATION_ENABLED,
  91. \Magento\Store\Model\ScopeInterface::SCOPE_STORE
  92. )
  93. ) {
  94. return;
  95. }
  96. $collection = $this->_collectionFactory->create();
  97. /* @var $collection \Magento\Sitemap\Model\ResourceModel\Sitemap\Collection */
  98. foreach ($collection as $sitemap) {
  99. /* @var $sitemap \Magento\Sitemap\Model\Sitemap */
  100. try {
  101. $sitemap->generateXml();
  102. } catch (\Exception $e) {
  103. $errors[] = $e->getMessage();
  104. }
  105. }
  106. if ($errors && $this->_scopeConfig->getValue(
  107. self::XML_PATH_ERROR_RECIPIENT,
  108. \Magento\Store\Model\ScopeInterface::SCOPE_STORE
  109. )
  110. ) {
  111. $this->inlineTranslation->suspend();
  112. $this->_transportBuilder->setTemplateIdentifier(
  113. $this->_scopeConfig->getValue(
  114. self::XML_PATH_ERROR_TEMPLATE,
  115. \Magento\Store\Model\ScopeInterface::SCOPE_STORE
  116. )
  117. )->setTemplateOptions(
  118. [
  119. 'area' => \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE,
  120. 'store' => \Magento\Store\Model\Store::DEFAULT_STORE_ID,
  121. ]
  122. )->setTemplateVars(
  123. ['warnings' => join("\n", $errors)]
  124. )->setFrom(
  125. $this->_scopeConfig->getValue(
  126. self::XML_PATH_ERROR_IDENTITY,
  127. \Magento\Store\Model\ScopeInterface::SCOPE_STORE
  128. )
  129. )->addTo(
  130. $this->_scopeConfig->getValue(
  131. self::XML_PATH_ERROR_RECIPIENT,
  132. \Magento\Store\Model\ScopeInterface::SCOPE_STORE
  133. )
  134. );
  135. $transport = $this->_transportBuilder->getTransport();
  136. $transport->sendMessage();
  137. $this->inlineTranslation->resume();
  138. }
  139. }
  140. }