PluginProbe ʕ •ᴥ•ʔ
WP STAGING – WordPress Backup, Restore, Migration & Clone / 4.9.0
WP STAGING – WordPress Backup, Restore, Migration & Clone v4.9.0
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 1 month ago BackgroundProcessing 1 year ago Dto 1 week ago Entity 1 week ago Exceptions 1 year ago FileHeader 1 month ago Interfaces 6 months ago Job 1 month ago Request 1 year ago Service 1 week ago Storage 1 month ago Task 1 week ago Traits 10 months ago Utils 3 months ago AfterRestore.php 5 months ago BackupDeleter.php 2 months ago BackupDownload.php 8 months ago BackupFileIndex.php 1 year ago BackupGlitchReason.php 1 year ago BackupHeader.php 1 month ago BackupRepairer.php 6 months ago BackupRetentionHandler.php 1 month ago BackupScheduler.php 1 week ago BackupServiceProvider.php 1 month ago BackupValidator.php 6 months ago FileHeader.php 1 week ago FileHeaderAttribute.php 2 years ago WithBackupIdentifier.php 1 year ago
BackupServiceProvider.php
135 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\BackgroundProcessing\Job\PrepareJob;
36 use WPStaging\Framework\Facades\Hooks;
37 use WPStaging\Framework\Security\Otp\OtpSender;
38
39 class BackupServiceProvider extends FeatureServiceProvider
40 {
41 /** @var string */
42 const ACTION_BACKUP_ENQUEUE_SCRIPTS = 'wpstg.backup.enqueue_scripts';
43
44 public function createBackupsDirectory()
45 {
46 $backupsDirectory = $this->container->make(BackupsFinder::class)->getBackupsDirectory();
47 $this->container->make(Filesystem::class)->mkdir($backupsDirectory, true);
48 }
49
50 protected function registerClasses()
51 {
52 $this->container->bind(SeekableQueueInterface::class, function () {
53 return $this->container->make(FileSeekableQueue::class);
54 });
55
56 $this->container->when(AbstractTask::class)
57 ->needs(SeekableQueueInterface::class)
58 ->give(FileSeekableQueue::class);
59
60 $this->container->when(PathIdentifier::class)
61 ->needs(DirectoryInterface::class)
62 ->give(Directory::class);
63
64 $this->container->when(FilesystemScanner::class)
65 ->needs(SeekableQueueInterface::class)
66 ->give(FileSeekableQueue::class);
67
68 $this->hookDatabaseImporterQueryInserter();
69 }
70
71 protected function addHooks()
72 {
73 $this->enqueueAjaxListeners();
74
75 $this->enqueueBackupScripts();
76
77 add_action(Cron::ACTION_WEEKLY_EVENT, [$this, 'createBackupsDirectory'], 25, 0);
78
79 add_action('wp_login', $this->container->callback(AfterRestore::class, 'loginAfterRestore'), 10, 0);
80
81 Hooks::registerInternalHook(PrepareJob::ACTION_JOB_FAILURE, $this->container->callback(BackupScheduler::class, 'onBackgroundJobFailure'));
82 }
83
84 protected function enqueueAjaxListeners()
85 {
86 add_action('wp_ajax_wpstg--backups--prepare-backup', $this->container->callback(PrepareBackup::class, 'ajaxPrepare')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
87 add_action('wp_ajax_wpstg--backups--create', $this->container->callback(Backup::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
88
89 add_action('wp_ajax_wpstg--backups--prepare-restore', $this->container->callback(PrepareRestore::class, 'ajaxPrepare')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
90 add_action('wp_ajax_wpstg--backups--restore', $this->container->callback(Restore::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
91
92 add_action('wp_ajax_wpstg--backups--read-backup-metadata', $this->container->callback(ReadBackupMetadata::class, 'ajaxPrepare')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
93 add_action('wp_ajax_wpstg--backups--delete', $this->container->callback(Delete::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
94 add_action('wp_ajax_wpstg--backups--edit', $this->container->callback(Edit::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
95 add_action('wp_ajax_wpstg--backups--parts', $this->container->callback(Parts::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
96 add_action('wp_ajax_wpstg--backups--restore--file-info', $this->container->callback(FileInfo::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
97 add_action('wp_ajax_wpstg--backups--prepare-upload', $this->container->callback(Upload::class, 'ajaxPrepareUpload')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
98 add_action('wp_ajax_wpstg--backups--restore--file-upload', $this->container->callback(Upload::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
99 add_action('wp_ajax_wpstg--backups--prepare-url-upload', $this->container->callback(BackupDownloader::class, 'ajaxPrepareUpload')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
100 add_action('wp_ajax_wpstg--backups--url-file-upload', $this->container->callback(BackupDownloader::class, 'ajaxDownloadBackupFromRemoteServer'), 10, 0); // phpcs:ignore WPStaging.Security.AuthorizationChecked
101 add_action('wp_ajax_wpstg--backups--uploads-delete-unfinished', $this->container->callback(Upload::class, 'ajaxDeleteIncompleteUploads')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
102 add_action('wp_ajax_wpstg--backups--explore-list', $this->container->callback(Explore::class, 'listFiles')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
103 add_action('wp_ajax_wpstg--backups--explore-tree', $this->container->callback(Explore::class, 'listTree')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
104 add_action('wp_ajax_wpstg--backups--explore-browse', $this->container->callback(Explore::class, 'browse')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
105 add_action('wp_ajax_wpstg--backups--explore-select-directory', $this->container->callback(Explore::class, 'listDirectoryFiles')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
106 add_action('wp_ajax_wpstg_calculate_backup_speed_index', $this->container->callback(BackupSpeedIndex::class, 'ajaxMaybeShowModal')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
107
108 // TODO: move this to JobServiceProvider once the Staging PR: https://github.com/wp-staging/wp-staging-pro/pull/3738 is merged
109 add_action('wp_ajax_wpstg--send--otp', $this->container->callback(OtpSender::class, 'ajaxSendOtp')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
110
111 // Nopriv
112 add_action('wp_ajax_nopriv_wpstg--backups--restore', $this->container->callback(Restore::class, 'render')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
113
114 add_action(Cron::ACTION_CREATE_CRON_BACKUP, $this->container->callback(BackupScheduler::class, 'createCronBackup'), 10, 1);
115 add_action('wp_ajax_wpstg--backups-dismiss-schedule', $this->container->callback(BackupScheduler::class, 'dismissSchedule'), 10, 1); // phpcs:ignore WPStaging.Security.AuthorizationChecked
116 add_action('wp_ajax_wpstg--backups-fetch-schedules', $this->container->callback(ScheduleList::class, 'renderScheduleList'), 10, 1); // phpcs:ignore WPStaging.Security.AuthorizationChecked
117
118 add_action("admin_post_wpstg--backups--logs", $this->container->callback(Logs::class, 'download')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
119
120 // Event that we can run on daily basis to repair any corrupted backup create cron jobs
121 add_action(Cron::ACTION_DAILY_EVENT, $this->container->callback(BackupScheduler::class, 'reCreateCron'), 10, 0);
122 add_action('wp_ajax_wpstg--backups--calculate-backup-size', $this->container->callback(BackupSizeCalculator::class, 'ajaxCalculateBackupPartsSize')); // phpcs:ignore WPStaging.Security.AuthorizationChecked
123 }
124
125 protected function hookDatabaseImporterQueryInserter()
126 {
127 $this->container->bind(QueryInserter::class, ExtendedInserterWithoutTransaction::class);
128 }
129
130 protected function enqueueBackupScripts()
131 {
132 add_action(self::ACTION_BACKUP_ENQUEUE_SCRIPTS, $this->container->callback(BackupAssets::class, 'register')); // phpcs:ignore
133 }
134 }
135