PluginProbe ʕ •ᴥ•ʔ
JetBackup – Backup, Restore & Migrate / 2.0.3
JetBackup – Backup, Restore & Migrate v2.0.3
3.1.22.3 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.8.1 1.4.9 1.5.0 1.5.1 1.5.1.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.10 1.6.11 1.6.12 1.6.13 1.6.15 1.6.5.1 1.6.8.8 1.6.9 1.6.9.1 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7.5 2.0.8.7 2.0.9.11 2.0.9.14 2.0.9.15 2.0.9.6 2.0.9.7 2.0.9.9 3.1.10.7 3.1.11.1 3.1.12.3 3.1.13.4 3.1.14.17 3.1.15.4 3.1.16.1 3.1.17.5 3.1.18.10 3.1.18.8 3.1.18.9 3.1.19.8 3.1.20.3 3.1.21.3 3.1.7.9 3.1.9.2 trunk 1.1.90 1.1.91 1.2.0 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2
backup / BackupGuard.php
backup Last commit date
com 3 years ago languages 3 years ago public 3 years ago BackupGuard.php 3 years ago README.txt 3 years ago backup.php 3 years ago index.php 3 years ago
BackupGuard.php
938 lines
1 <?php
2
3 // The code that runs during plugin activation.
4 function activate_backup_guard()
5 {
6 // do checks before activating plugin
7 try {
8 prepareBackupDir();
9 checkMinimumRequirements();
10 } catch (SGException $exp) {
11 die($exp->getMessage());
12 }
13
14 //check if database should be updated
15 if (backupGuardShouldUpdate()) {
16 SGBoot::install();
17 SGBoot::didInstallForFirstTime();
18 }
19 }
20
21 // The code that runs during plugin deactivation.
22 function uninstall_backup_guard()
23 {
24 SGBoot::uninstall();
25 }
26
27 function deactivate_backup_guard()
28 {
29 $pluginCapabilities = backupGuardGetCapabilities();
30 if ($pluginCapabilities != BACKUP_GUARD_CAPABILITIES_FREE) {
31 include_once SG_LIB_PATH . 'SGAuthClient.php';
32 SGAuthClient::getInstance()->logout();
33 }
34 }
35
36 function backupGuardMaybeShortenEddFilename($return, $package)
37 {
38 if (strpos($package, 'backup-guard') !== false) {
39 add_filter('wp_unique_filename', 'backupGuardShortenEddFilename', 10, 2);
40 }
41 return $return;
42 }
43
44 function backupGuardShortenEddFilename($filename, $ext)
45 {
46 $filename = substr($filename, 0, 20) . $ext;
47 remove_filter('wp_unique_filename', 'backupGuardShortenEddFilename', 10);
48 return $filename;
49 }
50
51 add_filter('upgrader_pre_download', 'backupGuardMaybeShortenEddFilename', 10, 4);
52
53 register_activation_hook(SG_BACKUP_GUARD_MAIN_FILE, 'activate_backup_guard');
54 register_uninstall_hook(SG_BACKUP_GUARD_MAIN_FILE, 'uninstall_backup_guard');
55 register_deactivation_hook(SG_BACKUP_GUARD_MAIN_FILE, 'deactivate_backup_guard');
56
57 // Register Admin Menus for single and multisite
58 if (is_multisite()) {
59 add_action('network_admin_menu', 'backup_guard_admin_menu');
60 } else {
61 add_action('admin_menu', 'backup_guard_admin_menu');
62 }
63
64 function backup_guard_admin_menu()
65 {
66 $capability = 'manage_options';
67 if (defined('SG_USER_MODE') && SG_USER_MODE) {
68 $capability = 'read';
69 }
70
71 add_menu_page('Backups', 'JetBackup', $capability, 'backup_guard_backups', 'includeAllPages', SG_IMAGE_URL.'eddie-white.svg', 74);
72
73 add_submenu_page('backup_guard_backups', _backupGuardT('Backups', true), _backupGuardT('Backups', true), $capability, 'backup_guard_backups', 'includeAllPages');
74
75 $pluginCapabilities = backupGuardGetCapabilities();
76 if ($pluginCapabilities != BACKUP_GUARD_CAPABILITIES_FREE) {
77 add_submenu_page('backup_guard_backups', _backupGuardT('Cloud', true), _backupGuardT('Cloud', true), $capability, 'backup_guard_cloud', 'includeAllPages');
78 add_submenu_page('backup_guard_backups', _backupGuardT('Schedule', true), _backupGuardT('Schedule', true), $capability, 'backup_guard_schedule', 'includeAllPages');
79 }
80
81 add_submenu_page('backup_guard_backups', _backupGuardT('Settings', true), _backupGuardT('Settings', true), $capability, 'backup_guard_settings', 'includeAllPages');
82
83 add_submenu_page('backup_guard_backups', _backupGuardT('System Info.', true), _backupGuardT('System Info.', true), $capability, 'backup_guard_system_info', 'includeAllPages');
84
85 //Check if should show upgrade page
86 if (SGBoot::isFeatureAvailable('SHOW_UPGRADE_PAGE')) {
87 add_submenu_page('backup_guard_backups', _backupGuardT('Why upgrade?', true), _backupGuardT('Why upgrade?', true), $capability, 'backup_guard_pro_features', 'includeAllPages');
88 }
89 }
90
91 function getBackupPageContentClassName($pageName = '')
92 {
93 $hiddenClassName = 'sg-visibility-hidden';
94 $page = sanitize_text_field($_GET['page']);
95
96 if (strpos($page, $pageName)) {
97 $hiddenClassName = '';
98 }
99
100 return $hiddenClassName;
101 }
102
103 function includeAllPages()
104 {
105 if (!backupGuardValidateLicense()) {
106 return false;
107 }
108 backup_guard_backups_page();
109 backup_guard_cloud_page();
110 backup_guard_system_info_page();
111 backup_guard_pro_features_page();
112 backup_guard_schedule_page();
113 backup_guard_settings_page();
114
115 include_once plugin_dir_path(__FILE__) . 'public/pagesContent.php';
116
117 return true;
118 }
119
120 function backup_guard_system_info_page()
121 {
122 if (backupGuardValidateLicense()) {
123 //require_once(plugin_dir_path(__FILE__).'public/systemInfo.php');
124 }
125 }
126
127 //Pro features page
128 function backup_guard_pro_features_page()
129 {
130 //require_once(plugin_dir_path(__FILE__).'public/proFeatures.php');
131 }
132
133 //Backups Page
134 function backup_guard_backups_page()
135 {
136 if (backupGuardValidateLicense()) {
137 wp_enqueue_script('backup-guard-iframe-transport-js', plugin_dir_url(__FILE__) . 'public/js/jquery.iframe-transport.js', array('jquery'));
138 wp_enqueue_script('backup-guard-fileupload-js', plugin_dir_url(__FILE__) . 'public/js/jquery.fileupload.js', array('jquery'));
139 wp_enqueue_script('backup-guard-jstree-js', plugin_dir_url(__FILE__) . 'public/js/jstree.min.js', array('jquery'));
140 wp_enqueue_script('backup-guard-jstree-checkbox-js', plugin_dir_url(__FILE__) . 'public/js/jstree.checkbox.js', array('jquery'));
141 wp_enqueue_script('backup-guard-jstree-wholerow-js', plugin_dir_url(__FILE__) . 'public/js/jstree.wholerow.js', array('jquery'));
142 wp_enqueue_script('backup-guard-jstree-types-js', plugin_dir_url(__FILE__) . 'public/js/jstree.types.js', array('jquery'));
143 wp_enqueue_style('backup-guard-jstree-css', plugin_dir_url(__FILE__) . 'public/css/default/style.min.css');
144 wp_enqueue_script(
145 'backup-guard-backups-js',
146 plugin_dir_url(__FILE__) . 'public/js/sgbackup.js',
147 array(
148 'jquery',
149 'jquery-effects-core',
150 'jquery-effects-transfer',
151 'jquery-ui-widget'
152 )
153 );
154
155 // Localize the script with new data
156 wp_localize_script(
157 'backup-guard-backups-js',
158 'BG_BACKUP_STRINGS',
159 array(
160 'confirm' => _backupGuardT('Are you sure you want to cancel import?', true),
161 'nonce' => wp_create_nonce('backupGuardAjaxNonce'),
162 'invalidBackupOption' => _backupGuardT('Please choose at least one option.', true),
163 'invalidDirectorySelected' => _backupGuardT('Please choose at least one directory.', true),
164 'invalidCloud' => _backupGuardT('Please choose at least one cloud.', true),
165 'backupInProgress' => _backupGuardT('Backing Up...', true),
166 'errorMessage' => _backupGuardT('Something went wrong. Please try again.', true),
167 'noBackupsAvailable' => _backupGuardT('No backups found.', true),
168 'invalidImportOption' => _backupGuardT('Please select one of the options.', true),
169 'invalidDownloadFile' => _backupGuardT('Please choose one of the files.', true),
170 'import' => _backupGuardT('Import', true),
171 'importInProgress' => _backupGuardT('Importing please wait...', true),
172 'fileUploadFailed' => _backupGuardT('File upload failed.', true)
173 )
174 );
175
176 // require_once(plugin_dir_path( __FILE__ ).'public/backups.php');
177 }
178 }
179
180 //Cloud Page
181 function backup_guard_cloud_page()
182 {
183 if (backupGuardValidateLicense()) {
184 wp_enqueue_style('backup-guard-switch-css', plugin_dir_url(__FILE__) . 'public/css/bootstrap-switch.min.css');
185 wp_enqueue_script('backup-guard-switch-js', plugin_dir_url(__FILE__) . 'public/js/bootstrap-switch.min.js', array('jquery'), SG_BACKUP_GUARD_VERSION, true);
186 wp_enqueue_script(
187 'backup-guard-jquery-validate-js',
188 plugin_dir_url(__FILE__) . 'public/js/jquery.validate.min.js',
189 array(
190 'jquery',
191 'backup-guard-switch-js'
192 ),
193 SG_BACKUP_GUARD_VERSION,
194 true
195 );
196 wp_enqueue_script(
197 'backup-guard-cloud-js',
198 plugin_dir_url(__FILE__) . 'public/js/sgcloud.js',
199 array(
200 'jquery',
201 'backup-guard-switch-js'
202 ),
203 SG_BACKUP_GUARD_VERSION,
204 true
205 );
206
207 // Localize the script with new data
208 wp_localize_script(
209 'backup-guard-cloud-js',
210 'BG_CLOUD_STRINGS',
211 array(
212 'invalidImportFile' => _backupGuardT('Please select a file.', true),
213 'invalidFileSize' => _backupGuardT('File is too large.', true),
214 'connectionInProgress' => _backupGuardT('Connecting...', true),
215 'invalidDestinationFolder' => _backupGuardT('Destination folder is required.', true),
216 'invalidDestinationFolderName' => _backupGuardT('Destination folder: type only letters, numbers and ""―".', true),
217 'successMessage' => _backupGuardT('Successfully saved.', true)
218 )
219 );
220
221 //require_once(plugin_dir_path(__FILE__).'public/cloud.php');
222 }
223 }
224
225 //Schedule Page
226 function backup_guard_schedule_page()
227 {
228 if (backupGuardValidateLicense()) {
229 wp_enqueue_style('backup-guard-switch-css', plugin_dir_url(__FILE__) . 'public/css/bootstrap-switch.min.css');
230 wp_enqueue_script('backup-guard-switch-js', plugin_dir_url(__FILE__) . 'public/js/bootstrap-switch.min.js', array('jquery'), '1.0.0', true);
231 wp_enqueue_script('backup-guard-schedule-js', plugin_dir_url(__FILE__) . 'public/js/sgschedule.js', array('jquery'), '1.0.0', true);
232
233 // Localize the script with new data
234 wp_localize_script(
235 'backup-guard-schedule-js',
236 'BG_SCHEDULE_STRINGS',
237 array(
238 'deletionError' => _backupGuardT('Unable to delete schedule', true),
239 'confirm' => _backupGuardT('Are you sure?', true),
240 'invalidBackupOption' => _backupGuardT('Please choose at least one option.', true),
241 'invalidDirectorySelected' => _backupGuardT('Please choose at least one directory.', true),
242 'invalidCloud' => _backupGuardT('Please choose at least one cloud.', true),
243 'savingInProgress' => _backupGuardT('Saving...', true),
244 'successMessage' => _backupGuardT('You have successfully activated schedule.', true),
245 'saveButtonText' => _backupGuardT('Save', true)
246 )
247 );
248
249 // require_once(plugin_dir_path( __FILE__ ).'public/schedule.php');
250 }
251 }
252
253 //Settings Page
254 function backup_guard_settings_page()
255 {
256 if (backupGuardValidateLicense()) {
257 wp_enqueue_style('backup-guard-switch-css', plugin_dir_url(__FILE__) . 'public/css/bootstrap-switch.min.css');
258 wp_enqueue_script('backup-guard-switch-js', plugin_dir_url(__FILE__) . 'public/js/bootstrap-switch.min.js', array('jquery'), '1.0.0', true);
259 wp_enqueue_script('backup-guard-settings-js', plugin_dir_url(__FILE__) . 'public/js/sgsettings.js', array('jquery'), '1.0.0', true);
260
261 // Localize the script with new data
262 wp_localize_script(
263 'backup-guard-settings-js',
264 'BG_SETTINGS_STRINGS',
265 array(
266 'invalidEmailAddress' => _backupGuardT('Please enter valid email.', true),
267 'invalidFileName' => _backupGuardT('Please enter valid file name.', true),
268 'invalidRetentionNumber' => _backupGuardT('Please enter a valid retention number.', true),
269 'successMessage' => _backupGuardT('Successfully saved.', true),
270 'savingInProgress' => _backupGuardT('Saving...', true),
271 'retentionConfirmationFirstPart' => _backupGuardT('Are you sure you want to keep the latest', true),
272 'retentionConfirmationSecondPart' => _backupGuardT('backups? All older backups will be deleted.', true),
273 'saveButtonText' => _backupGuardT('Save', true)
274 )
275 );
276
277 //require_once(plugin_dir_path(__FILE__).'public/settings.php');
278 }
279 }
280
281 function backup_guard_login_page()
282 {
283 wp_enqueue_script('backup-guard-login-js', plugin_dir_url(__FILE__) . 'public/js/sglogin.js', array('jquery'), '1.0.0', true);
284
285 include_once plugin_dir_path(__FILE__) . 'public/login.php';
286 }
287
288 add_action('admin_enqueue_scripts', 'enqueue_backup_guard_scripts');
289 function enqueue_backup_guard_scripts($hook)
290 {
291 if (!strpos($hook, 'backup_guard')) {
292 if ($hook == "index.php") {
293 wp_enqueue_script('backup-guard-chart-manager', plugin_dir_url(__FILE__) . 'public/js/chart.umd.min.js');
294 }
295 return;
296 }
297
298 wp_enqueue_style('backup-guard-spinner', plugin_dir_url(__FILE__) . 'public/css/spinner.css');
299 wp_enqueue_style('backup-guard-wordpress', plugin_dir_url(__FILE__) . 'public/css/bgstyle.wordpress.css');
300 wp_enqueue_style('backup-guard-less', plugin_dir_url(__FILE__) . 'public/css/bgstyle.less.css');
301 wp_enqueue_style('backup-guard-styles', plugin_dir_url(__FILE__) . 'public/css/styles.css');
302
303 echo '<script type="text/javascript">sgBackup={};';
304 $sgAjaxRequestFrequency = SGConfig::get('SG_AJAX_REQUEST_FREQUENCY');
305 if (!$sgAjaxRequestFrequency) {
306 $sgAjaxRequestFrequency = SG_AJAX_DEFAULT_REQUEST_FREQUENCY;
307 }
308
309 echo 'SG_AJAX_REQUEST_FREQUENCY = "' . intval($sgAjaxRequestFrequency) . '";';
310 echo 'function getAjaxUrl(url) {' .
311 'if (url==="cloudDropbox" || url==="cloudGdrive" || url==="cloudOneDrive" || url==="cloudPCloud" || url==="cloudBox") return "' . admin_url('admin-post.php?action=backup_guard_') . '"+url+"&token=' . wp_create_nonce('backupGuardAjaxNonce') . '";' .
312 'return "' . admin_url('admin-ajax.php') . '";}</script>';
313
314 wp_enqueue_media();
315 wp_enqueue_script('backup-guard-less-framework', plugin_dir_url(__FILE__) . 'public/js/less.min.js', array('jquery'), '1.0.0', true);
316 wp_enqueue_script('backup-guard-bootstrap-framework', plugin_dir_url(__FILE__) . 'public/js/bootstrap.bundle.min.js', array('jquery'), '1.0.0', true);
317 wp_enqueue_script('backup-guard-sgrequest-js', plugin_dir_url(__FILE__) . 'public/js/sgrequesthandler.js', array('jquery'), '1.0.0', true);
318 wp_enqueue_script('backup-guard-sgwprequest-js', plugin_dir_url(__FILE__) . 'public/js/sgrequesthandler.wordpress.js', array('jquery'), '1.0.0', true);
319
320 wp_enqueue_style('backup-guard-rateyo-css', plugin_dir_url(__FILE__) . 'public/css/jquery.rateyo.css');
321 wp_enqueue_script('backup-guard-rateyo-js', plugin_dir_url(__FILE__) . 'public/js/jquery.rateyo.js');
322
323 wp_enqueue_script('backup-guard-main-js', plugin_dir_url(__FILE__) . 'public/js/main.js', array('jquery', 'jquery-ui-tooltip'), '1.0.0', true);
324 wp_enqueue_script('backup-popup.js', plugin_dir_url(__FILE__) . 'public/js/popup.js', array('jquery'), '1.0.0', true);
325 wp_enqueue_style('popupTheme.css', plugin_dir_url(__FILE__) . 'public/css/popupTheme.css');
326
327 // Localize the script with new data
328 wp_localize_script(
329 'backup-guard-main-js',
330 'BG_MAIN_STRINGS',
331 array(
332 'confirmCancel' => _backupGuardT('Are you sure you want to cancel?', true)
333 )
334 );
335
336 wp_localize_script(
337 'backup-guard-main-js',
338 'BG_BACKUP_STRINGS',
339 array(
340 'nonce' => wp_create_nonce('backupGuardAjaxNonce')
341 )
342 );
343 }
344
345 // adding actions to handle modal ajax requests
346 add_action('wp_ajax_backup_guard_modalManualBackup', 'backup_guard_get_manual_modal');
347 add_action('wp_ajax_backup_guard_modalManualRestore', 'backup_guard_get_manual_restore_modal');
348 add_action('wp_ajax_backup_guard_modalImport', 'backup_guard_get_import_modal');
349 add_action('wp_ajax_backup_guard_modalFtpSettings', 'backup_guard_get_ftp_modal');
350 add_action('wp_ajax_backup_guard_modalAmazonSettings', 'backup_guard_get_amazon_modal');
351 add_action('wp_ajax_backup_guard_modalPrivacy', 'backup_guard_get_privacy_modal');
352 add_action('wp_ajax_backup_guard_modalTerms', 'backup_guard_get_terms_modal');
353 add_action('wp_ajax_backup_guard_modalReview', 'backup_guard_get_review_modal');
354 add_action('wp_ajax_backup_guard_getFileDownloadProgress', 'backup_guard_get_file_download_progress');
355 add_action('wp_ajax_backup_guard_modalCreateSchedule', 'backup_guard_create_schedule');
356 add_action('wp_ajax_backup_guard_getBackupContent', 'backup_guard_get_backup_content');
357
358 add_action('wp_ajax_backup_guard_modalBackupGuardDetails', 'backup_guard_get_backup_guard_modal');
359
360 function backup_guard_get_backup_guard_modal()
361 {
362 check_ajax_referer('backupGuardAjaxNonce', 'token');
363 include_once SG_PUBLIC_AJAX_PATH . 'modalBackupGuardDetails.php';
364 exit();
365 }
366
367 function backup_guard_get_file_download_progress()
368 {
369 check_ajax_referer('backupGuardAjaxNonce', 'token');
370 include_once SG_PUBLIC_AJAX_PATH . 'getFileDownloadProgress.php';
371 exit();
372 }
373
374 function backup_guard_create_schedule()
375 {
376 check_ajax_referer('backupGuardAjaxNonce', 'token');
377 include_once SG_PUBLIC_AJAX_PATH . 'modalCreateSchedule.php';
378 exit();
379 }
380
381 function backup_guard_get_manual_modal()
382 {
383 check_ajax_referer('backupGuardAjaxNonce', 'token');
384 if (current_user_can('activate_plugins') || (defined('SG_USER_MODE') && SG_USER_MODE)) {
385 include_once SG_PUBLIC_AJAX_PATH . 'modalManualBackup.php';
386 }
387 exit();
388 }
389
390 function backup_guard_get_manual_restore_modal()
391 {
392 check_ajax_referer('backupGuardAjaxNonce', 'token');
393 include_once SG_PUBLIC_AJAX_PATH . 'modalManualRestore.php';
394 exit();
395 }
396
397 function backup_guard_get_backup_content()
398 {
399 check_ajax_referer('backupGuardAjaxNonce', 'token');
400 include_once SG_PUBLIC_AJAX_PATH . 'getBackupContent.php';
401 exit();
402 }
403
404 function backup_guard_get_import_modal()
405 {
406 check_ajax_referer('backupGuardAjaxNonce', 'token');
407 include_once SG_PUBLIC_AJAX_PATH . 'modalImport.php';
408 exit();
409 }
410
411 function backup_guard_get_ftp_modal()
412 {
413 check_ajax_referer('backupGuardAjaxNonce', 'token');
414 include_once SG_PUBLIC_AJAX_PATH . 'modalFtpSettings.php';
415 exit();
416 }
417
418 function backup_guard_get_amazon_modal()
419 {
420 check_ajax_referer('backupGuardAjaxNonce', 'token');
421 include_once SG_PUBLIC_AJAX_PATH . 'modalAmazonSettings.php';
422 exit();
423 }
424
425 function backup_guard_get_privacy_modal()
426 {
427 include_once SG_PUBLIC_AJAX_PATH . 'modalPrivacy.php';
428 }
429
430 function backup_guard_get_terms_modal()
431 {
432 include_once SG_PUBLIC_AJAX_PATH . 'modalTerms.php';
433 exit();
434 }
435
436 function backup_guard_get_review_modal()
437 {
438 check_ajax_referer('backupGuardAjaxNonce', 'token');
439 include_once SG_PUBLIC_AJAX_PATH . 'modalReview.php';
440 exit();
441 }
442
443 function backup_guard_register_ajax_callbacks()
444 {
445 if (is_super_admin() || (defined('SG_USER_MODE') && SG_USER_MODE)) {
446 // adding actions to handle ajax and post requests
447 add_action('wp_ajax_backup_guard_cancelBackup', 'backup_guard_cancel_backup');
448 add_action('wp_ajax_backup_guard_checkBackupCreation', 'backup_guard_check_backup_creation');
449 add_action('wp_ajax_backup_guard_checkRestoreCreation', 'backup_guard_check_restore_creation');
450 add_action('wp_ajax_backup_guard_cloudDropbox', 'backup_guard_cloud_dropbox');
451 add_action('wp_ajax_backup_guard_send_usage_status', 'backup_guard_send_usage_status');
452
453 $pluginCapabilities = backupGuardGetCapabilities();
454 if ($pluginCapabilities != BACKUP_GUARD_CAPABILITIES_FREE) {
455 include_once dirname(__FILE__) . '/BackupGuardPro.php';
456 }
457 add_action('wp_ajax_backup_guard_curlChecker', 'backup_guard_curl_checker');
458 add_action('wp_ajax_backup_guard_deleteBackup', 'backup_guard_delete_backup');
459 add_action('wp_ajax_backup_guard_getAction', 'backup_guard_get_action');
460 add_action('wp_ajax_backup_guard_getRunningActions', 'backup_guard_get_running_actions');
461 add_action('wp_ajax_backup_guard_importBackup', 'backup_guard_get_import_backup');
462 add_action('wp_ajax_backup_guard_resetStatus', 'backup_guard_reset_status');
463 add_action('wp_ajax_backup_guard_restore', 'backup_guard_restore');
464 add_action('wp_ajax_backup_guard_saveCloudFolder', 'backup_guard_save_cloud_folder');
465 add_action('wp_ajax_backup_guard_schedule', 'backup_guard_schedule');
466 add_action('wp_ajax_backup_guard_settings', 'backup_guard_settings');
467 add_action('wp_ajax_backup_guard_setReviewPopupState', 'backup_guard_set_review_popup_state');
468 add_action('wp_ajax_backup_guard_sendUsageStatistics', 'backup_guard_send_usage_statistics');
469 add_action('wp_ajax_backup_guard_hideNotice', 'backup_guard_hide_notice');
470 add_action('wp_ajax_backup_guard_downloadFromCloud', 'backup_guard_download_from_cloud');
471 add_action('wp_ajax_backup_guard_listStorage', 'backup_guard_list_storage');
472 add_action('wp_ajax_backup_guard_cancelDownload', 'backup_guard_cancel_download');
473 add_action('wp_ajax_backup_guard_awake', 'backup_guard_awake');
474 add_action('wp_ajax_backup_guard_awake_new', 'backup_guard_awake_new');
475 add_action('wp_ajax_backup_guard_manualBackup', 'backup_guard_manual_backup');
476 add_action('admin_post_backup_guard_downloadBackup', 'backup_guard_download_backup');
477 add_action('wp_ajax_backup_guard_login', 'backup_guard_login');
478 add_action('wp_ajax_backup_guard_logout', 'backup_guard_logout');
479 add_action('wp_ajax_backup_guard_importKeyFile', 'backup_guard_import_key_file');
480 add_action('wp_ajax_backup_guard_isFeatureAvailable', 'backup_guard_is_feature_available');
481 add_action('wp_ajax_backup_guard_checkFreeMigration', 'backup_guard_check_free_migration');
482 add_action('wp_ajax_backup_guard_checkPHPVersionCompatibility', 'backup_guard_check_php_version_compatibility');
483 add_action('wp_ajax_backup_guard_reviewDontShow', 'backup_guard_review_dont_show');
484 add_action('wp_ajax_backup_guard_review_later', 'backup_guard_review_later');
485 add_action('wp_ajax_backup_guard_closeFreeBanner', 'wp_ajax_backup_guard_close_free_banner');
486 add_action('wp_ajax_backup_guard_awake_frontend', 'backup_guard_awake_frontend');
487 }
488 }
489
490 function wp_ajax_backup_guard_close_free_banner()
491 {
492 check_ajax_referer('backupGuardAjaxNonce', 'token');
493 SGConfig::set('SG_CLOSE_FREE_BANNER', 1);
494 wp_die();
495 }
496
497 function backup_guard_review_dont_show()
498 {
499 check_ajax_referer('backupGuardAjaxNonce', 'token');
500 SGConfig::set('closeReviewBanner', 1);
501 wp_die();
502 }
503
504 function backup_guard_review_later()
505 {
506 check_ajax_referer('backupGuardAjaxNonce', 'token');
507 include_once SG_PUBLIC_AJAX_PATH . 'reviewBannerActions.php';
508 wp_die();
509 }
510
511 function backup_guard_is_feature_available()
512 {
513 include_once SG_PUBLIC_AJAX_PATH . 'isFeatureAvailable.php';
514 }
515
516 function backup_guard_check_free_migration()
517 {
518 check_ajax_referer('backupGuardAjaxNonce', 'token');
519 include_once SG_PUBLIC_AJAX_PATH . 'checkFreeMigration.php';
520 die;
521 }
522
523 function backup_guard_check_php_version_compatibility()
524 {
525 check_ajax_referer('backupGuardAjaxNonce', 'token');
526 include_once SG_PUBLIC_AJAX_PATH . 'checkPHPVersionCompatibility.php';
527 }
528
529 add_action('init', 'backup_guard_init');
530 add_action('wp_ajax_nopriv_backup_guard_awake', 'backup_guard_awake_nopriv');
531 add_action('wp_ajax_nopriv_backup_guard_awake_new', 'backup_guard_awake_nopriv_new');
532 add_action('admin_post_backup_guard_cloudDropbox', 'backup_guard_cloud_dropbox');
533
534 function backup_guard_import_key_file()
535 {
536 check_ajax_referer('backupGuardAjaxNonce', 'token');
537 include_once SG_PUBLIC_AJAX_PATH . 'importKeyFile.php';
538 }
539
540 function backup_guard_awake()
541 {
542 include_once SG_CORE_PATH . 'backup/SGBackup.php';
543 $sgbgBackup = new SGBackup();
544
545 if (SGConfig::get('SG_RESTORE_FINALIZE', true)) {
546 $sgbgBackup->finalizeDBRestore();
547 SGConfig::set('SG_RESTORE_FINALIZE', 0, true);
548 die;
549 }
550
551 $actions = SGBackup::getRunningActions();
552 if (count($actions)) {
553 $action = $actions[0];
554
555 if ($action['type'] == SG_ACTION_TYPE_BACKUP || $action['type'] == SG_ACTION_TYPE_UPLOAD) {
556 $options = json_decode($action['options'], true);
557 $sgbgBackup->backup($options);
558 }
559 }
560 }
561
562 function backup_guard_awake_nopriv()
563 {
564 backup_guard_awake();
565 }
566
567 function backup_guard_awake_nopriv_new()
568 {
569 include_once SG_CORE_PATH . 'backup/SGBackup.php';
570 $sgbgBackup = new SGBackup();
571
572 $actions = SGBackup::getRunningActions();
573 if (count($actions)) {
574 $action = $actions[0];
575
576 if ($action['type'] == SG_ACTION_TYPE_RESTORE) {
577 $sgbgBackup->restore($action['name'], null);
578 } else {
579 $options = json_decode($action['options'], true);
580 $sgbgBackup->backup([], true, false);
581 }
582 }
583 }
584
585 function backup_guard_cancel_download()
586 {
587 check_ajax_referer('backupGuardAjaxNonce', 'token');
588 include_once SG_PUBLIC_AJAX_PATH . 'cancelDownload.php';
589 }
590
591 function backup_guard_list_storage()
592 {
593 check_ajax_referer('backupGuardAjaxNonce', 'token');
594 include_once SG_PUBLIC_AJAX_PATH . 'listStorage.php';
595 }
596
597 function backup_guard_download_from_cloud()
598 {
599 check_ajax_referer('backupGuardAjaxNonce', 'token');
600 include_once SG_PUBLIC_AJAX_PATH . 'downloadFromCloud.php';
601 }
602
603 function backup_guard_hide_notice()
604 {
605 check_ajax_referer('backupGuardAjaxNonce', 'token');
606 include_once SG_PUBLIC_AJAX_PATH . 'hideNotice.php';
607 }
608
609 function backup_guard_cancel_backup()
610 {
611 check_ajax_referer('backupGuardAjaxNonce', 'token');
612 include_once SG_PUBLIC_AJAX_PATH . 'cancelBackup.php';
613 }
614
615 function backup_guard_check_backup_creation()
616 {
617 check_ajax_referer('backupGuardAjaxNonce', 'token');
618 include_once SG_PUBLIC_AJAX_PATH . 'checkBackupCreation.php';
619 }
620
621 function backup_guard_check_restore_creation()
622 {
623 check_ajax_referer('backupGuardAjaxNonce', 'token');
624 include_once SG_PUBLIC_AJAX_PATH . 'checkRestoreCreation.php';
625 }
626
627 function backup_guard_cloud_dropbox()
628 {
629 if (current_user_can('activate_plugins') || (defined('SG_USER_MODE') && SG_USER_MODE)) {
630 check_ajax_referer('backupGuardAjaxNonce', 'token');
631 include_once SG_PUBLIC_AJAX_PATH . 'cloudDropbox.php';
632 }
633 }
634
635 function backup_guard_send_usage_status()
636 {
637
638 if (current_user_can('activate_plugins') || (defined('SG_USER_MODE') && SG_USER_MODE)) {
639 check_ajax_referer('backupGuardAjaxNonce', 'token');
640 include_once SG_PUBLIC_AJAX_PATH . 'sendUsageStatus.php';
641 }
642 }
643
644 function backup_guard_curl_checker()
645 {
646 check_ajax_referer('backupGuardAjaxNonce', 'token');
647 include_once SG_PUBLIC_AJAX_PATH . 'curlChecker.php';
648 }
649
650 function backup_guard_delete_backup()
651 {
652 check_ajax_referer('backupGuardAjaxNonce', 'token');
653 include_once SG_PUBLIC_AJAX_PATH . 'deleteBackup.php';
654 }
655
656 function backup_guard_download_backup()
657 {
658 include_once SG_PUBLIC_AJAX_PATH . 'downloadBackup.php';
659 }
660
661 function backup_guard_get_action()
662 {
663 check_ajax_referer('backupGuardAjaxNonce', 'token');
664 include_once SG_PUBLIC_AJAX_PATH . 'getAction.php';
665 }
666
667 function backup_guard_get_running_actions()
668 {
669 include_once SG_PUBLIC_AJAX_PATH . 'getRunningActions.php';
670 }
671
672 function backup_guard_get_import_backup()
673 {
674 check_ajax_referer('backupGuardAjaxNonce', 'token');
675 include_once SG_PUBLIC_AJAX_PATH . 'importBackup.php';
676 }
677
678 function backup_guard_manual_backup()
679 {
680 check_ajax_referer('backupGuardAjaxNonce', 'token');
681 include_once SG_PUBLIC_AJAX_PATH . 'manualBackup.php';
682 }
683
684 function backup_guard_reset_status()
685 {
686 check_ajax_referer('backupGuardAjaxNonce', 'token');
687 include_once SG_PUBLIC_AJAX_PATH . 'resetStatus.php';
688 }
689
690 function backup_guard_restore()
691 {
692 include_once SG_PUBLIC_AJAX_PATH . 'restore.php';
693 }
694
695 function backup_guard_save_cloud_folder()
696 {
697 check_ajax_referer('backupGuardAjaxNonce', 'token');
698 include_once SG_PUBLIC_AJAX_PATH . 'saveCloudFolder.php';
699 }
700
701 function backup_guard_schedule()
702 {
703 check_ajax_referer('backupGuardAjaxNonce', 'token');
704 include_once SG_PUBLIC_AJAX_PATH . 'schedule.php';
705 }
706
707 function backup_guard_settings()
708 {
709 check_ajax_referer('backupGuardAjaxNonce', 'token');
710 include_once SG_PUBLIC_AJAX_PATH . 'settings.php';
711 }
712
713 function backup_guard_set_review_popup_state()
714 {
715 check_ajax_referer('backupGuardAjaxNonce', 'token');
716 include_once SG_PUBLIC_AJAX_PATH . 'setReviewPopupState.php';
717 }
718
719 function backup_guard_send_usage_statistics()
720 {
721 include_once SG_PUBLIC_AJAX_PATH . 'sendUsageStatistics.php';
722 }
723
724 function backup_guard_login()
725 {
726 check_ajax_referer('backupGuardAjaxNonce', 'token');
727 include_once SG_PUBLIC_AJAX_PATH . 'login.php';
728 }
729
730 function backup_guard_logout()
731 {
732 check_ajax_referer('backupGuardAjaxNonce', 'token');
733 include_once SG_PUBLIC_AJAX_PATH . 'logout.php';
734 }
735
736 //adds once weekly to the existing schedules.
737 add_filter('cron_schedules', 'backup_guard_cron_add_weekly');
738 function backup_guard_cron_add_weekly($schedules)
739 {
740 $schedules['weekly'] = array(
741 'interval' => 60 * 60 * 24 * 7,
742 'display' => 'Once weekly'
743 );
744 return $schedules;
745 }
746
747 //adds once monthly to the existing schedules.
748 add_filter('cron_schedules', 'backup_guard_cron_add_monthly');
749 function backup_guard_cron_add_monthly($schedules)
750 {
751 $schedules['monthly'] = array(
752 'interval' => 60 * 60 * 24 * 30,
753 'display' => 'Once monthly'
754 );
755 return $schedules;
756 }
757
758 //adds once yearly to the existing schedules.
759 add_filter('cron_schedules', 'backup_guard_cron_add_yearly');
760 function backup_guard_cron_add_yearly($schedules)
761 {
762 $schedules['yearly'] = array(
763 'interval' => 60 * 60 * 24 * 30 * 12,
764 'display' => 'Once yearly'
765 );
766 return $schedules;
767 }
768
769 function backup_guard_init()
770 {
771 backup_guard_register_ajax_callbacks();
772 // backupGuardPluginRedirect();
773
774 //check if database should be updated
775 if (backupGuardShouldUpdate()) {
776 SGBoot::install();
777 }
778
779 backupGuardSymlinksCleanup(SG_SYMLINK_PATH);
780 }
781
782 add_action(SG_SCHEDULE_ACTION, 'backup_guard_schedule_action', 10, 1);
783
784 function backup_guard_schedule_action($id)
785 {
786 include_once SG_PUBLIC_PATH . 'cron/sg_backup.php';
787 }
788
789 function sgBackupAdminInit()
790 {
791 //load pro plugin updater
792 $pluginCapabilities = backupGuardGetCapabilities();
793 $isLoggedIn = is_user_logged_in();
794
795 if ($pluginCapabilities != BACKUP_GUARD_CAPABILITIES_FREE && $isLoggedIn) {
796 include_once dirname(__FILE__) . '/plugin-update-checker/plugin-update-checker.php';
797 include_once dirname(__FILE__) . '/plugin-update-checker/Puc/v4/Scheduler.php';
798 include_once SG_LIB_PATH . 'SGAuthClient.php';
799
800 $updateChecker = Puc_v4_Factory::buildUpdateChecker(
801 BackupGuard\Config::VERSION_URL,
802 SG_BACKUP_GUARD_MAIN_FILE,
803 SG_PRODUCT_IDENTIFIER
804 );
805 }
806 }
807
808 add_action('admin_init', 'sgBackupAdminInit');
809
810 if (SGBoot::isFeatureAvailable('ALERT_BEFORE_UPDATE')) {
811 add_action('core_upgrade_preamble', 'backupGuardOnUpgradeScreenActivate');
812 add_action('current_screen', 'backupGuardOnScreenActivate');
813 }
814
815 // Register the new dashboard widget with the 'wp_dashboard_setup' action
816 add_action('wp_dashboard_setup', 'backup_guard_add_dashboard_widgets');
817
818 function backup_guard_add_dashboard_widgets()
819 {
820 include_once SG_CORE_PATH . 'SGConfig.php';
821
822 $userId = get_current_user_id();
823 $userData = get_userdata($userId);
824 $userRoles = $userData->roles;
825
826 $isAdminUser = false;
827 for ($i = 0; $i < count($userRoles); $i++) {
828 if ($userRoles[$i] == "administrator") {
829 $isAdminUser = true;
830 break;
831 }
832 }
833
834 if (!$isAdminUser) {
835 return;
836 }
837
838 $isShowStatisticsWidgetEnabled = SGConfig::get('SG_SHOW_STATISTICS_WIDGET');
839 if (!$isShowStatisticsWidgetEnabled) {
840 return;
841 }
842
843
844 include_once plugin_dir_path(__FILE__) . 'public/dashboardWidget.php';
845 wp_add_dashboard_widget('backupGuardWidget', 'JetBackup', 'backup_guard_dashboard_widget_function');
846 }
847
848 add_action('plugins_loaded', 'backupGuardloadTextDomain');
849 function backupGuardloadTextDomain()
850 {
851 $backupGuardLangDir = plugin_dir_path(__FILE__) . 'languages/';
852 $backupGuardLangDir = apply_filters('backupguardLanguagesDirectory', $backupGuardLangDir);
853
854 $locale = apply_filters('bg_plugin_locale', get_locale(), BACKUP_GUARD_TEXTDOMAIN);
855 $mofile = sprintf('%1$s-%2$s.mo', BACKUP_GUARD_TEXTDOMAIN, $locale);
856
857 $mofileLocal = $backupGuardLangDir . $mofile;
858
859 if (file_exists($mofileLocal)) {
860 // Look in local /wp-content/plugins/popup-builder/languages/ folder
861 load_textdomain(BACKUP_GUARD_TEXTDOMAIN, $mofileLocal);
862 } else {
863 // Load the default language files
864 load_plugin_textdomain(BACKUP_GUARD_TEXTDOMAIN, false, $backupGuardLangDir);
865 }
866 }
867
868 add_action('admin_notices', 'backup_guard_review_banner');
869 function backup_guard_review_banner()
870 {
871 include_once SG_LIB_PATH . 'SGReviewManager.php';
872 $reviewManager = new SGReviewManager();
873 $reviewManager->renderContent();
874 }
875
876 add_filter('cron_schedules', 'jet_backup_cron_job_interval');
877 function jet_backup_cron_job_interval($schedules)
878 {
879 $schedules['sixty_seconds'] = array(
880 'interval' => JBWP_CRON_RELOAD_INTERVAL,
881 'display' => esc_html__( 'Every sixty seconds' )
882 );
883
884 return $schedules;
885 }
886
887 function run_next_chunk_of_backup()
888 {
889 include_once SG_CORE_PATH . 'backup/SGBackup.php';
890 $sgbgBackup = new SGBackup();
891
892 $actions = SGBackup::getRunningActions();
893 if (count($actions)) {
894 $action = $actions[0];
895
896 if (file_exists(SG_BACKUP_DIRECTORY . JBWP_DIRECTORY_STATE_FILE_NAME)) {
897 $stateFilePath = SG_BACKUP_DIRECTORY . JBWP_DIRECTORY_STATE_FILE_NAME;
898 } else if (file_exists(SG_BACKUP_DIRECTORY . $action['name'] . '/state_upload.json')) {
899 $stateFilePath = SG_BACKUP_DIRECTORY . $action['name'] . '/state_upload.json';
900 } else if (file_exists(SG_BACKUP_DIRECTORY . $action['name'] . '/' . SG_STATE_FILE_NAME)) {
901 $stateFilePath = SG_BACKUP_DIRECTORY . $action['name'] . '/' . SG_STATE_FILE_NAME;
902 }
903
904 if (file_exists($stateFilePath)) {
905 $stateFile = file_get_contents($stateFilePath);
906 $stateFile = json_decode($stateFile, true);
907
908 // to prevent calling backup if chunk is not finished yet
909 if ($stateFile['status'] != SGBGStateFile::STATUS_RESUME || time() - $stateFile['data']['last_reload_ts'] < 60) {
910 die(1);
911 }
912
913 if ($action['type'] == SG_ACTION_TYPE_BACKUP || $action['type'] == SG_ACTION_TYPE_UPLOAD) {
914
915 $stateFile['data']['last_reload_ts'] = time();
916 file_put_contents($stateFilePath, json_encode($stateFile));
917
918 $options = json_decode($action['options'], true);
919 $sgbgBackup->backup($options);
920 }
921 }
922 }
923 }
924
925 add_action(JBWP_RELOAD_SCHEDULE_ACTION, 'jet_backup_reload_schedule_action', 10);
926 function jet_backup_reload_schedule_action()
927 {
928 run_next_chunk_of_backup();
929 }
930
931 function backup_guard_awake_frontend()
932 {
933 check_ajax_referer('backupGuardAjaxNonce', 'token');
934 if (!SGSchedule::isCronAvailable(true)) {
935 run_next_chunk_of_backup();
936 }
937 }
938