PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 4.7.1
WP STAGING – WordPress Backup, Restore, Migration & Clone v4.7.1
4.9.1 4.9.0 4.8.1 trunk 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.10.0 3.2.0 3.3.1 3.3.2 3.3.3 3.4.1 3.4.3 3.5.0 3.6.0 3.7.1 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.9.0 3.9.1 3.9.2 3.9.3 3.9.4 4.0.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.0 4.7.0 4.7.1 4.7.2 4.7.3 4.8.0
wp-staging / Backup / BackupServiceProvider.php
wp-staging / Backup Last commit date
Ajax 3 months ago BackgroundProcessing 1 year ago Dto 4 months ago Entity 4 months ago Exceptions 1 year ago Interfaces 6 months ago Job 3 months ago Request 1 year ago Service 3 months ago Storage 8 months ago Task 3 months ago Traits 10 months ago Utils 3 months ago AfterRestore.php 5 months ago BackupDeleter.php 4 months ago BackupDownload.php 8 months ago BackupFileIndex.php 1 year ago BackupGlitchReason.php 1 year ago BackupHeader.php 8 months ago BackupRepairer.php 6 months ago BackupRetentionHandler.php 1 year ago BackupScheduler.php 3 months ago BackupServiceProvider.php 3 months ago BackupValidator.php 6 months ago FileHeader.php 8 months ago FileHeaderAttribute.php 2 years ago WithBackupIdentifier.php 1 year ago
BackupServiceProvider.php
131 lines
1 <?php
2
3 namespace WPStaging\Backup;
4
5 use WPStaging\Backup\Ajax\Backup;
6 use WPStaging\Backup\Ajax\Delete;
7 use WPStaging\Backup\Ajax\Edit;
8 use WPStaging\Backup\Ajax\FileInfo;
9 use WPStaging\Backup\Ajax\Parts;
10 use WPStaging\Backup\Ajax\BackupSizeCalculator;
11 use WPStaging\Backup\Ajax\Restore;
12 use WPStaging\Backup\Ajax\ScheduleList;
13 use WPStaging\Backup\Ajax\Upload;
14 use WPStaging\Backup\Ajax\Backup\PrepareBackup;
15 use WPStaging\Backup\Ajax\BackupDownloader;
16 use WPStaging\Backup\Ajax\Restore\PrepareRestore;
17 use WPStaging\Backup\Ajax\Restore\ReadBackupMetadata;
18 use WPStaging\Backup\Request\Logs;
19 use WPStaging\Backup\Service\BackupAssets;
20 use WPStaging\Backup\Service\BackupsFinder;
21 use WPStaging\Backup\Service\Database\Importer\Insert\ExtendedInserterWithoutTransaction;
22 use WPStaging\Backup\Service\Database\Importer\Insert\QueryInserter;
23 use WPStaging\Backup\Ajax\BackupSpeedIndex;
24 use WPStaging\Backup\Ajax\Explore;
25 use WPStaging\Core\Cron\Cron;
26 use WPStaging\Framework\Adapter\Directory;
27 use WPStaging\Framework\Adapter\DirectoryInterface;
28 use WPStaging\Framework\DI\FeatureServiceProvider;
29 use WPStaging\Framework\Filesystem\Filesystem;
30 use WPStaging\Framework\Filesystem\FilesystemScanner;
31 use WPStaging\Framework\Filesystem\PathIdentifier;
32 use WPStaging\Framework\Job\Task\AbstractTask;
33 use WPStaging\Framework\Queue\FileSeekableQueue;
34 use WPStaging\Framework\Queue\SeekableQueueInterface;
35 use WPStaging\Framework\Security\Otp\OtpSender;
36
37 class BackupServiceProvider extends FeatureServiceProvider
38 {
39 /** @var string */
40 const ACTION_BACKUP_ENQUEUE_SCRIPTS = 'wpstg.backup.enqueue_scripts';
41
42 public function createBackupsDirectory()
43 {
44 $backupsDirectory = $this->container->make(BackupsFinder::class)->getBackupsDirectory();
45 $this->container->make(Filesystem::class)->mkdir($backupsDirectory, true);
46 }
47
48 protected function registerClasses()
49 {
50 $this->container->bind(SeekableQueueInterface::class, function () {
51 return $this->container->make(FileSeekableQueue::class);
52 });
53
54 $this->container->when(AbstractTask::class)
55 ->needs(SeekableQueueInterface::class)
56 ->give(FileSeekableQueue::class);
57
58 $this->container->when(PathIdentifier::class)
59 ->needs(DirectoryInterface::class)
60 ->give(Directory::class);
61
62 $this->container->when(FilesystemScanner::class)
63 ->needs(SeekableQueueInterface::class)
64 ->give(FileSeekableQueue::class);
65
66 $this->hookDatabaseImporterQueryInserter();
67 }
68
69 protected function addHooks()
70 {
71 $this->enqueueAjaxListeners();
72
73 $this->enqueueBackupScripts();
74
75 add_action(Cron::ACTION_WEEKLY_EVENT, [$this, 'createBackupsDirectory'], 25, 0);
76
77 add_action('wp_login', $this->container->callback(AfterRestore::class, 'loginAfterRestore'), 10, 0);
78 }
79
80 protected function enqueueAjaxListeners()
81 {
82 add_action('wp_ajax_wpstg--backups--prepare-backup', $this->container->callback(PrepareBackup::class, 'ajaxPrepare')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
83 add_action('wp_ajax_wpstg--backups--create', $this->container->callback(Backup::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
84
85 add_action('wp_ajax_wpstg--backups--prepare-restore', $this->container->callback(PrepareRestore::class, 'ajaxPrepare')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
86 add_action('wp_ajax_wpstg--backups--restore', $this->container->callback(Restore::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
87
88 add_action('wp_ajax_wpstg--backups--read-backup-metadata', $this->container->callback(ReadBackupMetadata::class, 'ajaxPrepare')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
89 add_action('wp_ajax_wpstg--backups--delete', $this->container->callback(Delete::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
90 add_action('wp_ajax_wpstg--backups--edit', $this->container->callback(Edit::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
91 add_action('wp_ajax_wpstg--backups--parts', $this->container->callback(Parts::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
92 add_action('wp_ajax_wpstg--backups--restore--file-info', $this->container->callback(FileInfo::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
93 add_action('wp_ajax_wpstg--backups--prepare-upload', $this->container->callback(Upload::class, 'ajaxPrepareUpload')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
94 add_action('wp_ajax_wpstg--backups--restore--file-upload', $this->container->callback(Upload::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
95 add_action('wp_ajax_wpstg--backups--prepare-url-upload', $this->container->callback(BackupDownloader::class, 'ajaxPrepareUpload')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
96 add_action('wp_ajax_wpstg--backups--url-file-upload', $this->container->callback(BackupDownloader::class, 'ajaxDownloadBackupFromRemoteServer'), 10, 0); // phpcs:ignore WPStaging.Security.AuthorizationChecked
97 add_action('wp_ajax_wpstg--backups--uploads-delete-unfinished', $this->container->callback(Upload::class, 'ajaxDeleteIncompleteUploads')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
98 add_action('wp_ajax_wpstg--backups--explore-list', $this->container->callback(Explore::class, 'listFiles')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
99 add_action('wp_ajax_wpstg--backups--explore-tree', $this->container->callback(Explore::class, 'listTree')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
100 add_action('wp_ajax_wpstg--backups--explore-browse', $this->container->callback(Explore::class, 'browse')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
101 add_action('wp_ajax_wpstg--backups--explore-select-directory', $this->container->callback(Explore::class, 'listDirectoryFiles')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
102 add_action('wp_ajax_wpstg_calculate_backup_speed_index', $this->container->callback(BackupSpeedIndex::class, 'ajaxMaybeShowModal')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
103
104 // TODO: move this to JobServiceProvider once the Staging PR: https://github.com/wp-staging/wp-staging-pro/pull/3738 is merged
105 add_action('wp_ajax_wpstg--send--otp', $this->container->callback(OtpSender::class, 'ajaxSendOtp')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
106
107 // Nopriv
108 add_action('wp_ajax_nopriv_wpstg--backups--restore', $this->container->callback(Restore::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
109
110 add_action(Cron::ACTION_CREATE_CRON_BACKUP, $this->container->callback(BackupScheduler::class, 'createCronBackup'), 10, 1);
111 add_action('wp_ajax_wpstg--backups-dismiss-schedule', $this->container->callback(BackupScheduler::class, 'dismissSchedule'), 10, 1); // phpcs:ignore WPStaging.Security.AuthorizationChecked
112 add_action('wp_ajax_wpstg--backups-fetch-schedules', $this->container->callback(ScheduleList::class, 'renderScheduleList'), 10, 1); // phpcs:ignore WPStaging.Security.AuthorizationChecked
113
114 add_action("admin_post_wpstg--backups--logs", $this->container->callback(Logs::class, 'download')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
115
116 // Event that we can run on daily basis to repair any corrupted backup create cron jobs
117 add_action(Cron::ACTION_DAILY_EVENT, $this->container->callback(BackupScheduler::class, 'reCreateCron'), 10, 0);
118 add_action('wp_ajax_wpstg--backups--calculate-backup-size', $this->container->callback(BackupSizeCalculator::class, 'ajaxCalculateBackupPartsSize')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
119 }
120
121 protected function hookDatabaseImporterQueryInserter()
122 {
123 $this->container->bind(QueryInserter::class, ExtendedInserterWithoutTransaction::class);
124 }
125
126 protected function enqueueBackupScripts()
127 {
128 add_action(self::ACTION_BACKUP_ENQUEUE_SCRIPTS, $this->container->callback(BackupAssets::class, 'register')); // phpcs:ignore
129 }
130 }
131