Collection.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Backup\Model\Fs;
  7. use Magento\Framework\App\Filesystem\DirectoryList;
  8. /**
  9. * Backup data collection
  10. * @api
  11. * @since 100.0.2
  12. */
  13. class Collection extends \Magento\Framework\Data\Collection\Filesystem
  14. {
  15. /**
  16. * @var \Magento\Framework\Filesystem\Directory\WriteInterface
  17. */
  18. protected $_varDirectory;
  19. /**
  20. * Folder, where all backups are stored
  21. *
  22. * @var string
  23. */
  24. protected $_path = 'backups';
  25. /**
  26. * Backup data
  27. *
  28. * @var \Magento\Backup\Helper\Data
  29. */
  30. protected $_backupData = null;
  31. /**
  32. * Backup model
  33. *
  34. * @var \Magento\Backup\Model\Backup
  35. */
  36. protected $_backup = null;
  37. /**
  38. * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
  39. * @param \Magento\Backup\Helper\Data $backupData
  40. * @param \Magento\Framework\Filesystem $filesystem
  41. * @param \Magento\Backup\Model\Backup $backup
  42. */
  43. public function __construct(
  44. \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
  45. \Magento\Backup\Helper\Data $backupData,
  46. \Magento\Framework\Filesystem $filesystem,
  47. \Magento\Backup\Model\Backup $backup
  48. ) {
  49. $this->_backupData = $backupData;
  50. parent::__construct($entityFactory);
  51. $this->_filesystem = $filesystem;
  52. $this->_backup = $backup;
  53. $this->_varDirectory = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
  54. $this->_hideBackupsForApache();
  55. // set collection specific params
  56. $extensions = $this->_backupData->getExtensions();
  57. foreach ($extensions as $value) {
  58. $extensions[] = '(' . preg_quote($value, '/') . ')';
  59. }
  60. $extensions = implode('|', $extensions);
  61. $this->_varDirectory->create($this->_path);
  62. $path = rtrim($this->_varDirectory->getAbsolutePath($this->_path), '/') . '/';
  63. $this->setOrder(
  64. 'time',
  65. self::SORT_ORDER_DESC
  66. )->addTargetDir(
  67. $path
  68. )->setFilesFilter(
  69. '/^[a-z0-9\-\_]+\.' . $extensions . '$/'
  70. )->setCollectRecursively(
  71. false
  72. );
  73. }
  74. /**
  75. * Create .htaccess file and deny backups directory access from web
  76. *
  77. * @return void
  78. */
  79. protected function _hideBackupsForApache()
  80. {
  81. $filename = '.htaccess';
  82. if (!$this->_varDirectory->isFile($filename)) {
  83. $this->_varDirectory->writeFile($filename, 'deny from all');
  84. }
  85. }
  86. /**
  87. * Get backup-specific data from model for each row
  88. *
  89. * @param string $filename
  90. * @return array
  91. */
  92. protected function _generateRow($filename)
  93. {
  94. $row = parent::_generateRow($filename);
  95. foreach ($this->_backup->load(
  96. $row['basename'],
  97. $this->_varDirectory->getAbsolutePath($this->_path)
  98. )->getData() as $key => $value) {
  99. $row[$key] = $value;
  100. }
  101. $row['size'] = $this->_varDirectory->stat($this->_varDirectory->getRelativePath($filename))['size'];
  102. if (isset($row['display_name']) && $row['display_name'] == '') {
  103. $row['display_name'] = 'WebSetupWizard';
  104. }
  105. $row['id'] = $row['time'] . '_' . $row['type']
  106. . (isset($row['display_name']) ? '_' . $row['display_name'] : '');
  107. return $row;
  108. }
  109. }