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