DeleteExpiredImages.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Captcha\Cron;
  7. use Magento\Framework\App\Filesystem\DirectoryList;
  8. /**
  9. * Captcha cron actions
  10. */
  11. class DeleteExpiredImages
  12. {
  13. /**
  14. * @var \Magento\Captcha\Helper\Data
  15. */
  16. protected $_helper;
  17. /**
  18. * CAPTCHA helper
  19. *
  20. * @var \Magento\Captcha\Helper\Adminhtml\Data
  21. */
  22. protected $_adminHelper;
  23. /**
  24. * @var \Magento\Framework\Filesystem\Directory\WriteInterface
  25. */
  26. protected $_mediaDirectory;
  27. /**
  28. * @var \Magento\Store\Model\StoreManager
  29. */
  30. protected $_storeManager;
  31. /**
  32. * @param \Magento\Captcha\Helper\Data $helper
  33. * @param \Magento\Captcha\Helper\Adminhtml\Data $adminHelper
  34. * @param \Magento\Framework\Filesystem $filesystem
  35. * @param \Magento\Store\Model\StoreManager $storeManager
  36. */
  37. public function __construct(
  38. \Magento\Captcha\Helper\Data $helper,
  39. \Magento\Captcha\Helper\Adminhtml\Data $adminHelper,
  40. \Magento\Framework\Filesystem $filesystem,
  41. \Magento\Store\Model\StoreManager $storeManager
  42. ) {
  43. $this->_helper = $helper;
  44. $this->_adminHelper = $adminHelper;
  45. $this->_mediaDirectory = $filesystem->getDirectoryWrite(DirectoryList::MEDIA);
  46. $this->_storeManager = $storeManager;
  47. }
  48. /**
  49. * Delete Expired Captcha Images
  50. *
  51. * @return \Magento\Captcha\Cron\DeleteExpiredImages
  52. */
  53. public function execute()
  54. {
  55. foreach ($this->_storeManager->getWebsites() as $website) {
  56. $this->_deleteExpiredImagesForWebsite($this->_helper, $website, $website->getDefaultStore());
  57. }
  58. $this->_deleteExpiredImagesForWebsite($this->_adminHelper);
  59. return $this;
  60. }
  61. /**
  62. * Delete Expired Captcha Images for specific website
  63. *
  64. * @param \Magento\Captcha\Helper\Data $helper
  65. * @param \Magento\Store\Model\Website|null $website
  66. * @param \Magento\Store\Model\Store|null $store
  67. * @return void
  68. */
  69. protected function _deleteExpiredImagesForWebsite(
  70. \Magento\Captcha\Helper\Data $helper,
  71. \Magento\Store\Model\Website $website = null,
  72. \Magento\Store\Model\Store $store = null
  73. ) {
  74. $expire = time() - $helper->getConfig('timeout', $store) * 60;
  75. $imageDirectory = $this->_mediaDirectory->getRelativePath($helper->getImgDir($website));
  76. foreach ($this->_mediaDirectory->read($imageDirectory) as $filePath) {
  77. if ($this->_mediaDirectory->isFile($filePath)
  78. && pathinfo($filePath, PATHINFO_EXTENSION) == 'png'
  79. && $this->_mediaDirectory->stat($filePath)['mtime'] < $expire
  80. ) {
  81. $this->_mediaDirectory->delete($filePath);
  82. }
  83. }
  84. }
  85. }