123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- declare(strict_types=1);
- namespace Magento\Backup\Helper;
- use Magento\Framework\App\Filesystem\DirectoryList;
- use Magento\Framework\App\MaintenanceMode;
- use Magento\Framework\Filesystem;
- /**
- * Backup data helper
- * @api
- * @since 100.0.2
- */
- class Data extends \Magento\Framework\App\Helper\AbstractHelper
- {
- /**
- * @var Filesystem
- */
- protected $_filesystem;
- /**
- * @var \Magento\Framework\AuthorizationInterface
- */
- protected $_authorization;
- /**
- * @var \Magento\Framework\App\Cache\TypeListInterface
- */
- protected $_cacheTypeList;
- /**
- * Construct
- *
- * @param \Magento\Framework\App\Helper\Context $context
- * @param Filesystem $filesystem
- * @param \Magento\Framework\AuthorizationInterface $authorization
- * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
- */
- public function __construct(
- \Magento\Framework\App\Helper\Context $context,
- Filesystem $filesystem,
- \Magento\Framework\AuthorizationInterface $authorization,
- \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
- ) {
- parent::__construct($context);
- $this->_authorization = $authorization;
- $this->_filesystem = $filesystem;
- $this->_cacheTypeList = $cacheTypeList;
- }
- /**
- * Get all possible backup type values with descriptive title
- *
- * @return array
- */
- public function getBackupTypes()
- {
- return [
- \Magento\Framework\Backup\Factory::TYPE_DB => __('Database'),
- \Magento\Framework\Backup\Factory::TYPE_MEDIA => __('Database and Media'),
- \Magento\Framework\Backup\Factory::TYPE_SYSTEM_SNAPSHOT => __('System'),
- \Magento\Framework\Backup\Factory::TYPE_SNAPSHOT_WITHOUT_MEDIA => __('System (excluding Media)')
- ];
- }
- /**
- * Get all possible backup type values
- *
- * @return string[]
- */
- public function getBackupTypesList()
- {
- return [
- \Magento\Framework\Backup\Factory::TYPE_DB,
- \Magento\Framework\Backup\Factory::TYPE_SYSTEM_SNAPSHOT,
- \Magento\Framework\Backup\Factory::TYPE_SNAPSHOT_WITHOUT_MEDIA,
- \Magento\Framework\Backup\Factory::TYPE_MEDIA
- ];
- }
- /**
- * Get default backup type value
- *
- * @return string
- */
- public function getDefaultBackupType()
- {
- return \Magento\Framework\Backup\Factory::TYPE_DB;
- }
- /**
- * Get directory path where backups stored
- *
- * @return string
- */
- public function getBackupsDir()
- {
- return $this->_filesystem->getDirectoryWrite(DirectoryList::VAR_DIR)->getAbsolutePath('backups');
- }
- /**
- * Get backup file extension by backup type
- *
- * @param string $type
- * @return string
- */
- public function getExtensionByType($type)
- {
- $extensions = $this->getExtensions();
- return $extensions[$type] ?? '';
- }
- /**
- * Get all types to extensions map
- *
- * @return array
- */
- public function getExtensions()
- {
- return [
- \Magento\Framework\Backup\Factory::TYPE_SYSTEM_SNAPSHOT => 'tgz',
- \Magento\Framework\Backup\Factory::TYPE_SNAPSHOT_WITHOUT_MEDIA => 'tgz',
- \Magento\Framework\Backup\Factory::TYPE_MEDIA => 'tgz',
- \Magento\Framework\Backup\Factory::TYPE_DB => 'sql'
- ];
- }
- /**
- * Generate backup download name
- *
- * @param \Magento\Backup\Model\Backup $backup
- * @return string
- */
- public function generateBackupDownloadName(\Magento\Backup\Model\Backup $backup)
- {
- $additionalExtension = $backup->getType() == \Magento\Framework\Backup\Factory::TYPE_DB ? '.sql' : '';
- return $backup->getTime() .
- '_' .
- $backup->getType() .
- '_' .
- $backup->getName() .
- $additionalExtension .
- '.' .
- $this->getExtensionByType(
- $backup->getType()
- );
- }
- /**
- * Check Permission for Rollback
- *
- * @return bool
- */
- public function isRollbackAllowed()
- {
- return $this->_authorization->isAllowed('Magento_Backup::rollback');
- }
- /**
- * Get paths that should be ignored when creating system snapshots
- *
- * @return string[]
- */
- public function getBackupIgnorePaths()
- {
- return [
- '.git',
- '.svn',
- $this->_filesystem->getDirectoryRead(MaintenanceMode::FLAG_DIR)
- ->getAbsolutePath(MaintenanceMode::FLAG_FILENAME),
- $this->_filesystem->getDirectoryRead(DirectoryList::SESSION)->getAbsolutePath(),
- $this->_filesystem->getDirectoryRead(DirectoryList::CACHE)->getAbsolutePath(),
- $this->_filesystem->getDirectoryRead(DirectoryList::LOG)->getAbsolutePath(),
- $this->_filesystem->getDirectoryRead(DirectoryList::VAR_DIR)->getAbsolutePath('full_page_cache'),
- $this->_filesystem->getDirectoryRead(DirectoryList::VAR_DIR)->getAbsolutePath('locks'),
- $this->_filesystem->getDirectoryRead(DirectoryList::VAR_DIR)->getAbsolutePath('report'),
- ];
- }
- /**
- * Get paths that should be ignored when rolling back system snapshots
- *
- * @return string[]
- */
- public function getRollbackIgnorePaths()
- {
- return [
- '.svn',
- '.git',
- $this->_filesystem->getDirectoryRead(MaintenanceMode::FLAG_DIR)
- ->getAbsolutePath(MaintenanceMode::FLAG_FILENAME),
- $this->_filesystem->getDirectoryRead(DirectoryList::SESSION)->getAbsolutePath(),
- $this->_filesystem->getDirectoryRead(DirectoryList::LOG)->getAbsolutePath(),
- $this->_filesystem->getDirectoryRead(DirectoryList::VAR_DIR)->getAbsolutePath('locks'),
- $this->_filesystem->getDirectoryRead(DirectoryList::VAR_DIR)->getAbsolutePath('report'),
- $this->_filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath('errors'),
- $this->_filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath('index.php'),
- ];
- }
- /**
- * Get backup create success message by backup type
- *
- * @param string $type
- * @return void|string
- */
- public function getCreateSuccessMessageByType($type)
- {
- $messagesMap = [
- \Magento\Framework\Backup\Factory::TYPE_SYSTEM_SNAPSHOT => __('You created the system backup.'),
- \Magento\Framework\Backup\Factory::TYPE_SNAPSHOT_WITHOUT_MEDIA => __(
- 'You created the system backup (excluding media).'
- ),
- \Magento\Framework\Backup\Factory::TYPE_MEDIA => __('You created the database and media backup.'),
- \Magento\Framework\Backup\Factory::TYPE_DB => __('You created the database backup.'),
- ];
- if (!isset($messagesMap[$type])) {
- return;
- }
- return $messagesMap[$type];
- }
- /**
- * Invalidate Cache
- *
- * @return $this
- */
- public function invalidateCache()
- {
- if ($cacheTypes = $this->_cacheConfig->getTypes()) {
- $cacheTypesList = array_keys($cacheTypes);
- $this->_cacheTypeList->invalidate($cacheTypesList);
- }
- return $this;
- }
- /**
- * Creates backup's display name from it's name
- *
- * @param string $name
- * @return string
- */
- public function nameToDisplayName($name)
- {
- return str_replace('_', ' ', $name);
- }
- /**
- * Extracts information from backup's filename
- *
- * @param string $filename
- * @return \Magento\Framework\DataObject
- */
- public function extractDataFromFilename($filename)
- {
- $extensions = $this->getExtensions();
- $filenameWithoutExtension = $filename;
- foreach ($extensions as $extension) {
- $filenameWithoutExtension = preg_replace(
- '/' . preg_quote($extension, '/') . '$/',
- '',
- $filenameWithoutExtension
- );
- }
- $filenameWithoutExtension = substr($filenameWithoutExtension, 0, strrpos($filenameWithoutExtension, "."));
- list($time, $type) = explode("_", $filenameWithoutExtension);
- $name = str_replace($time . '_' . $type, '', $filenameWithoutExtension);
- if (!empty($name)) {
- $name = substr($name, 1);
- }
- $result = new \Magento\Framework\DataObject();
- $result->addData(['name' => $name, 'type' => $type, 'time' => $time]);
- return $result;
- }
- /**
- * Is backup functionality enabled.
- *
- * @return bool
- * @since 100.2.6
- */
- public function isEnabled(): bool
- {
- return $this->scopeConfig->isSetFlag('system/backup/functionality_enabled');
- }
- }
|