PluginProbe ʕ •ᴥ•ʔ
JetBackup – Backup, Restore & Migrate / 1.4.9
JetBackup – Backup, Restore & Migrate v1.4.9
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 / public / js / sgbackup.js
backup / public / js Last commit date
Chart.bundle.min.js 5 years ago bootstrap-switch.min.js 5 years ago bootstrap.min.js 5 years ago deactivationSurvey.js 5 years ago jquery-ui.js 5 years ago jquery.fileupload.js 5 years ago jquery.iframe-transport.js 5 years ago jquery.rateyo.js 5 years ago jquery.validate.min.js 5 years ago jstree.checkbox.js 5 years ago jstree.min.js 5 years ago jstree.types.js 5 years ago jstree.wholerow.js 5 years ago less.min.js 5 years ago main.js 5 years ago popup.js 5 years ago sgNoticeDismiss.js 5 years ago sgbackup.js 5 years ago sgcloud.js 5 years ago sglicense.js 5 years ago sglogin.js 5 years ago sgrequesthandler.js 5 years ago sgrequesthandler.wordpress.js 5 years ago sgschedule.js 5 years ago sgsettings.js 5 years ago
sgbackup.js
821 lines
1 SG_DOWNLOAD_PROGRESS = '';
2 SG_ACTIVE_DOWNLOAD_AJAX = '';
3 SG_CHECK_ACTION_STATUS_REQUEST_FREQUENCY = 2500;
4
5 SG_STORAGE_FTP = 1;
6 SG_STORAGE_DROPBOX = 2;
7 SG_STORAGE_GOOGLE_DRIVE = 3;
8 SG_STORAGE_AMAZON = 4;
9 SG_STORAGE_ONE_DRIVE = 5;
10 SG_STORAGE_BACKUP_GUARD = 6;
11
12 jQuery(document).on('change', '.btn-file :file', function() {
13 var input = jQuery(this),
14 numFiles = input.get(0).files ? input.get(0).files.length : 1,
15 label = input.val().replace(/\\/g, '/').replace(/.*\//, '');
16 input.trigger('fileselect', [numFiles, label]);
17 });
18
19 jQuery(document).ready( function() {
20 sgBackup.initTablePagination('sg-backups');
21 sgBackup.initActiveAction();
22 sgBackup.initBackupDeletion();
23 sgBackup.toggleMultiDeleteButton();
24 sgBackup.closeFreeBaner();
25
26 jQuery('span[data-toggle=tooltip]').tooltip();
27
28 jQuery('#sg-checkbox-select-all').on('change', function(){
29 var checkAll = jQuery('#sg-checkbox-select-all');
30 jQuery('tbody input[type="checkbox"]:not(:disabled):visible').prop('checked', checkAll.prop('checked'));
31 sgBackup.toggleMultiDeleteButton();
32 });
33
34 jQuery('#sg-delete-multi-backups').on('click', function(){
35 if (!confirm(BG_BACKUP_STRINGS.areYouSure)) {
36 return false;
37 }
38 var backups = jQuery('tbody input[type="checkbox"]:checked');
39 var backupNames = [];
40 backups.each(function(i){
41 backupNames[i] = jQuery(this).val();
42 });
43
44 if (backupNames.length) {
45 sgBackup.deleteMultiBackups(backupNames);
46 }
47 });
48
49 jQuery('tbody input[type="checkbox"]').on('change', function(){
50 var numberOfBackups = jQuery('tbody input[type="checkbox"]').length;
51 var numberOfChoosenBackups = sgBackup.getSelectedBackupsNumber();
52 var isCheked = jQuery(this).is(':checked');
53 sgBackup.toggleMultiDeleteButton();
54
55 if(!isCheked) {
56 jQuery('#sg-checkbox-select-all').prop('checked', false);
57 }
58 else {
59 if (numberOfBackups == numberOfChoosenBackups) {
60 jQuery('#sg-checkbox-select-all').prop('checked', true);
61 }
62 }
63 });
64
65 var surveyClose = function(e) {
66 e.preventDefault();
67
68 jQuery('.bg-verify-user-info-container').slideUp();
69 jQuery('.bg-verify-user-info-overlay').hide();
70
71 var ajaxHandler = new sgRequestHandler('setUserInfoVerificationPopupState', {token: BG_BACKUP_STRINGS.nonce});
72 ajaxHandler.run();
73 };
74
75 jQuery('.bg-verify-user-info-overlay').bind('click', surveyClose);
76
77
78 jQuery('.bg-verify-user-info-cancel').click(surveyClose);
79
80 jQuery('#bg-verify-user-prioraty').on('change', function () {
81 if (jQuery(this).val() == "other") {
82 jQuery('#bg-verify-user-priorati-custom').show();
83 }
84 else {
85 jQuery('#bg-verify-user-priorati-custom').hide();
86 }
87 });
88
89 jQuery('.bg-verify-user-info-verify-email').click(function(e) {
90 e.preventDefault();
91
92 var email = jQuery('#bg-verify-user-info-email').val();
93 var fname = jQuery('#bg-verify-user-info-name').val();
94 var lname = jQuery('#bg-verify-user-info-last-name').val();
95 var priority = jQuery('#bg-verify-user-prioraty').val();
96
97 var sendData = true;
98 jQuery('.bg-verify-user-info-error-message').hide();
99
100 if (priority == "other") {
101 priority = jQuery('#bg-verify-user-priorati-custom').val();
102
103 if (!priority) {
104 jQuery('#bg-verify-user-info-priority-custom-error').show()
105 sendData = false;
106 }
107 }
108 else if (!priority) {
109 jQuery('#bg-verify-user-info-priority-error').show()
110 sendData = false;
111 }
112
113 if(fname == '') {
114 jQuery('#bg-verify-user-info-name-error').show();
115 sendData = false;
116 }
117
118 if(lname == '') {
119 jQuery('#bg-verify-user-info-last-name-error').show();
120 sendData = false;
121 }
122
123 if (!sgBackup.isValidEmailAddress(email)) {
124 jQuery('#bg-verify-user-info-email-error').show();
125 sendData = false;
126 }
127
128 if(sendData) {
129 jQuery('.bg-verify-user-info-container').slideUp();
130 jQuery('.bg-verify-user-info-overlay').hide();
131 var currentStatus = jQuery('.backup-send-usage-data-status').is(':checked');
132
133 var ajaxHandler = new sgRequestHandler('storeSubscriberInfo', {
134 email: email,
135 fname: fname,
136 lname: lname,
137 priority: priority,
138 currentStatus: currentStatus,
139 token: BG_BACKUP_STRINGS.nonce
140 });
141
142 ajaxHandler.run();
143 }
144 });
145 });
146
147 sgBackup.isValidEmailAddress = function(emailAddress) {
148 var pattern = new RegExp(/^(("[\w-+\s]+")|([\w-+]+(?:\.[\w-+]+)*)|("[\w-+\s]+")([\w-+]+(?:\.[\w-+]+)*))(@((?:[\w-+]+\.)*\w[\w-+]{0,66})\.([a-z]{2,10}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][\d]\.|1[\d]{2}\.|[\d]{1,2}\.))((25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\.){2}(25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\]?$)/i);
149 return pattern.test(emailAddress);
150 };
151
152 sgBackup.getSelectedBackupsNumber = function() {
153 return jQuery('tbody input[type="checkbox"]:checked').length
154 };
155
156 sgBackup.toggleMultiDeleteButton = function() {
157 var numberOfChoosenBackups = sgBackup.getSelectedBackupsNumber();
158 var target = jQuery('#sg-delete-multi-backups');
159 if (numberOfChoosenBackups > 0) {
160 target.removeAttr('disabled');
161 }
162 else {
163 target.attr('disabled','disabled');
164 }
165 };
166
167 sgBackup.closeFreeBaner = function() {
168 jQuery('.sg-close-free-banner').bind('click', function () {
169 var ajaxHandler = new sgRequestHandler('closeFreeBanner', {
170 token: BG_BACKUP_STRINGS.nonce
171 });
172 ajaxHandler.callback = function(response, error) {
173 jQuery('#sg-banner').remove();
174 };
175 ajaxHandler.run();
176 });
177 };
178
179 sgBackup.deleteMultiBackups = function(backupNames){
180 var ajaxHandler = new sgRequestHandler('deleteBackup', {backupName: backupNames, token: BG_BACKUP_STRINGS.nonce});
181 ajaxHandler.callback = function (response) {
182 location.reload();
183 };
184 ajaxHandler.run();
185 };
186
187 //SGManual Backup AJAX callback
188 sgBackup.manualBackup = function(){
189 var error = [];
190 //Validation
191 jQuery('.alert').remove();
192 if(jQuery('input[type=radio][name=backupType]:checked').val() == 2) {
193 if(jQuery('.sg-custom-option:checked').length <= 0) {
194 error.push(BG_BACKUP_STRINGS.invalidBackupOption);
195 }
196 //Check if any file is selected
197 if(jQuery('input[type=checkbox][name=backupFiles]:checked').length > 0) {
198 if(jQuery('.sg-custom-backup-files input:checkbox:checked').length <= 0) {
199 error.push(BG_BACKUP_STRINGS.invalidDirectorySelected);
200 }
201 }
202 }
203 //Check if any cloud is selected
204 if(jQuery('input[type=checkbox][name=backupCloud]:checked').length > 0) {
205 if (jQuery('.sg-custom-backup-cloud input:checkbox:checked').length <= 0) {
206 error.push(BG_BACKUP_STRINGS.invalidCloud);
207 }
208 }
209 //If any error show it and abort ajax
210 if(error.length){
211 var sgAlert = sgBackup.alertGenerator(error, 'alert-danger');
212 jQuery('#sg-modal .modal-header').prepend(sgAlert);
213 return false;
214 }
215
216 //Before all disable buttons...
217 jQuery('.alert').remove();
218 jQuery('.modal-footer .btn-primary').attr('disabled','disabled');
219 jQuery('.modal-footer .btn-primary').html(BG_BACKUP_STRINGS.backupInProgress);
220
221 //Reset Status
222 var backupName = jQuery("#sg-custom-backup-name").val();
223 var resetStatusHandler = new sgRequestHandler('resetStatus', {backupName: backupName, token: BG_BACKUP_STRINGS.nonce });
224 resetStatusHandler.callback = function(response, error){
225 var manualBackupForm = jQuery('#manualBackup');
226 var manualBackupHandler = new sgRequestHandler('manualBackup', manualBackupForm.serialize()+'&token='+BG_BACKUP_STRINGS.nonce);
227 manualBackupHandler.dataIsObject = false;
228 //If error
229 if(typeof response.success === 'undefined') {
230 var sgAlert = sgBackup.alertGenerator(response, 'alert-danger');
231 jQuery('#sg-modal .modal-header').prepend(sgAlert);
232
233 if (response === 0 || response === false || response === '0' || response === 'false') {
234 response = BG_BACKUP_STRINGS.errorMessage;
235 }
236 sgBackup.restManualBackupModal();
237 return false;
238 }
239 manualBackupHandler.run();
240 sgBackup.checkBackupCreation();
241 };
242 resetStatusHandler.run();
243 };
244
245 sgBackup.restManualBackupModal = function() {
246 jQuery('.modal-footer .btn-primary').removeAttr('disabled');
247 jQuery('.modal-footer .btn-primary').html('Backup');
248 };
249
250 sgBackup.cancelDonwload = function(name) {
251 var cancelDonwloadHandler = new sgRequestHandler('cancelDownload', {name: name, token: BG_BACKUP_STRINGS.nonce});
252 cancelDonwloadHandler.callback = function(response){
253 sgBackup.hideAjaxSpinner();
254 location.reload();
255 };
256 cancelDonwloadHandler.run();
257 };
258
259 sgBackup.listStorage = function(importFrom) {
260 var listStorage = new sgRequestHandler('listStorage', {storage: importFrom, token: BG_BACKUP_STRINGS.nonce});
261 sgBackup.showAjaxSpinner('#sg-modal-inport-from');
262 jQuery('#sg-archive-list-table tbody').empty();
263
264 jQuery('#sg-modal').off('hide.bs.modal').on('hide.bs.modal', function(e){
265
266 if (SG_ACTIVE_DOWNLOAD_AJAX) {
267 if (!confirm(BG_BACKUP_STRINGS.confirm)) {
268 e.preventDefault();
269 return false;
270 }
271 var target = jQuery('input[name="select-archive-to-download"]:checked');
272 var name = target.attr('file-name');
273
274 sgBackup.cancelDonwload(name);
275 }
276 });
277
278 listStorage.callback = function(response, error) {
279 var cloudName = '';
280 var cloudId = parseInt(importFrom, 10);
281
282 switch (cloudId) {
283 case SG_STORAGE_AMAZON:
284 cloudName = "S3";
285 break;
286 case SG_STORAGE_DROPBOX:
287 cloudName = "Dropbox";
288 break;
289 case SG_STORAGE_GOOGLE_DRIVE:
290 cloudName = "Google Drive";
291 break;
292 case SG_STORAGE_FTP:
293 cloudName = "FTP";
294 break;
295 case SG_STORAGE_ONE_DRIVE:
296 cloudName = "OneDrive";
297 break;
298 case SG_STORAGE_BACKUP_GUARD:
299 cloudName = "BackupGuard";
300 break;
301 default:
302 cloudName = '';
303 }
304
305 jQuery('.modal-title').html('Import from '+cloudName);
306
307 sgBackup.hideAjaxSpinner();
308 var content = '';
309 if ((typeof response.error != "undefined") || response.length == 0 || response === undefined) {
310 content = '<tr><td colspan="4">'+BG_BACKUP_STRINGS.noBackupsAvailable+'</td></tr>';
311 }
312 else {
313 jQuery.each(response, function( key, value ) {
314
315 var backupId = 0;
316
317 if (typeof value.id != 'undefined') {
318 backupId = value.id;
319 value.path = value.name;
320 }
321
322 content += '<tr>';
323 content += '<td class="file-select-radio"><input type="radio" file-name="'+value.name+'" name="select-archive-to-download" size="'+value.size+'" backup-id="'+value.id+'" storage="'+importFrom+'" value="'+value.path+'"></td>';
324 content += '<td>'+value.name+'</td>';
325 content += '<td>'+sgBackup.convertBytesToMegabytes(value.size)+'</td>';
326 content += '<td>'+value.date+'</td>';
327 content += '</tr>';
328 });
329 }
330
331 jQuery('#sg-archive-list-table tbody').append(content);
332 sgBackup.toggleDownloadFromCloudPage();
333 };
334
335 listStorage.run();
336 };
337
338
339 sgBackup.convertBytesToMegabytes = function ($bytes) {
340 return ($bytes/(1024*1024)).toFixed(2);
341 };
342
343 //Init file upload
344 sgBackup.initFileUpload = function(){
345 sgBackup.downloadFromPC();
346
347 jQuery('#uploadSgbpFile').click(function(){
348 if(jQuery('#modal-import-3').is(":visible")) {
349 var target = jQuery('input[name="select-archive-to-download"]:checked');
350 var path = target.val();
351 var name = target.attr('file-name');
352 var storage = target.attr('storage');
353 var size = target.attr('size');
354 var backupId = target.attr('backup-id');
355 sgBackup.downloadFromCloud(path, name, storage, size, backupId);
356 }
357 });
358 };
359
360 sgBackup.nextPage = function(){
361 var importFrom = jQuery('input[name="storage-radio"]:checked').val();
362 jQuery('.alert').remove();
363
364 if (!importFrom) {
365 var alert = sgBackup.alertGenerator(BG_BACKUP_STRINGS.invalidImportOption, 'alert-danger');
366 jQuery('#sg-modal .modal-header').prepend(alert);
367 }
368 else {
369 if (importFrom == 'local-pc') {
370 sgBackup.toggleDownloadFromPCPage();
371 }
372 else {
373 var isFeatureAvailable = new sgRequestHandler('isFeatureAvailable', {sgFeature: "DOWNLOAD_FROM_CLOUD"});
374 isFeatureAvailable.callback = function(response) {
375 if (typeof response.success !== 'undefined') {
376 sgBackup.listStorage(importFrom);
377 }
378 else {
379 var alert = sgBackup.alertGenerator(response.error, 'alert-danger');
380 jQuery('#sg-modal .modal-header').prepend(alert);
381 }
382 };
383
384 isFeatureAvailable.run();
385 }
386 }
387 };
388
389 sgBackup.previousPage = function(){
390 if(jQuery('#modal-import-2').is(":visible")){
391 jQuery('#modal-import-2').hide();
392 }
393 else{
394 jQuery('#modal-import-3').hide();
395 }
396
397 sgBackup.toggleNavigationButtons();
398
399 jQuery('#modal-import-1').show();
400 jQuery('#uploadSgbpFile').hide();
401
402 jQuery('.modal-title').html('Import from');
403 };
404
405 sgBackup.toggleNavigationButtons = function(){
406 jQuery('#switch-modal-import-pages-next').toggle();
407 jQuery('#switch-modal-import-pages-back').toggle();
408 };
409
410 sgBackup.toggleDownloadFromPCPage = function(){
411 sgBackup.toggleNavigationButtons();
412 jQuery('#modal-import-1').toggle();
413 jQuery('#modal-import-2').toggle();
414 jQuery('#uploadSgbpFile').toggle();
415 };
416
417 sgBackup.toggleDownloadFromCloudPage = function(){
418 sgBackup.toggleNavigationButtons();
419 jQuery('#modal-import-1').toggle();
420 jQuery('#modal-import-3').toggle();
421 jQuery('#uploadSgbpFile').toggle();
422 };
423
424 sgBackup.downloadFromCloud = function (path, name, storage, size) {
425 sgBackup.showAjaxSpinner('.modal-dialog');
426 var error = [];
427 if (!path) {
428 error.push(BG_BACKUP_STRINGS.invalidDownloadFile);
429 }
430
431 jQuery('.alert').remove();
432
433 if (error.length) {
434 sgBackup.hideAjaxSpinner();
435 var sgAlert = sgBackup.alertGenerator(error, 'alert-danger');
436 jQuery('#sg-modal .modal-header').prepend(sgAlert);
437 return false;
438 }
439
440 var downloadFromCloudHandler = new sgRequestHandler('downloadFromCloud', {
441 path: path,
442 storage: storage,
443 size: size,
444 token: BG_BACKUP_STRINGS.nonce
445 });
446
447 jQuery('#switch-modal-import-pages-back').hide();
448 jQuery('#uploadSgbpFile').attr('disabled', 'disabled');
449
450 downloadFromCloudHandler.callback = function (response, error){
451 sgBackup.hideAjaxSpinner();
452 jQuery('.alert').remove();
453
454 clearTimeout(SG_DOWNLOAD_PROGRESS);
455
456 if (typeof response.success !== 'undefined') {
457 location.reload();
458 }
459 else {
460 jQuery('#uploadSgbpFile').html(BG_BACKUP_STRINGS.import);
461
462 var sgAlert = sgBackup.alertGenerator(response.error, 'alert-danger');
463
464 jQuery('#uploadSgbpFile').attr('disabled', false);
465 jQuery('#switch-modal-import-pages-back').toggle();
466 jQuery('#sg-modal .modal-header').prepend(sgAlert);
467 SG_ACTIVE_DOWNLOAD_AJAX = false;
468
469 return false;
470 }
471 };
472
473 SG_ACTIVE_DOWNLOAD_AJAX = true;
474 downloadFromCloudHandler.run();
475 sgBackup.fileDownloadProgress(name, size);
476 };
477
478 sgBackup.downloadFromPC = function(){
479 var sgData = null;
480 jQuery('#sg-modal').off('hide.bs.modal').on('hide.bs.modal', function(e){
481 if (SG_ACTIVE_DOWNLOAD_AJAX) {
482 if (!confirm(BG_BACKUP_STRINGS.confirm)) {
483 e.preventDefault();
484 return false;
485 }
486
487 sgData.abort();
488 sgBackup.cancelDonwload(sgData.files[0].name);
489 }
490 });
491
492 jQuery('.sg-backup-upload-input').fileupload({
493 dataType: 'json',
494 maxChunkSize: 2000000,
495 add: function (e, data) {
496 if (data.originalFiles.length) {
497 var fileName = data.originalFiles[0].name;
498 jQuery('#sg-import-file-name').val(fileName);
499 }
500 jQuery('#uploadSgbpFile').click(function(){
501 if(jQuery('#modal-import-2').is(":visible")) {
502 sgData = data;
503 SG_ACTIVE_DOWNLOAD_AJAX = true;
504 jQuery('#uploadSgbpFile').attr('disabled','disabled');
505 jQuery('#switch-modal-import-pages-back').hide();
506 jQuery('#uploadSgbpFile').html(BG_BACKUP_STRINGS.importInProgress);
507 data.submit();
508 }
509 });
510 },
511 done: function (e, data) {
512 location.reload();
513 },
514 progress: function (e, data) {
515 var progress = parseInt(data.loaded / data.total * 100, 10);
516 jQuery('#uploadSgbpFile').html('Importing ('+ Math.round(progress)+'%)');
517 }
518 }).on('fileuploadfail', function (e, data) {
519 var alert = sgBackup.alertGenerator(BG_BACKUP_STRINGS.fileUploadFailed, 'alert-danger');
520 jQuery('#sg-modal .modal-header').prepend(alert);
521 });
522 };
523
524 sgBackup.fileDownloadProgress = function(file, size){
525 var getFileDownloadProgress = new sgRequestHandler('getFileDownloadProgress', {file: file, size: size, token: BG_BACKUP_STRINGS.nonce});
526
527 getFileDownloadProgress.callback = function(response){
528 if (typeof response.progress !== 'undefined') {
529 jQuery('#uploadSgbpFile').html('Importing ('+ Math.round(response.progress)+'%)');
530 SG_DOWNLOAD_PROGRESS = setTimeout(function () {
531 getFileDownloadProgress.run();
532 }, SG_AJAX_REQUEST_FREQUENCY);
533 }
534 };
535
536 getFileDownloadProgress.run();
537 };
538
539 sgBackup.fileUploadProgress = function(e){
540 if(e.lengthComputable){
541 jQuery('#uploadSgbpFile').html('Importing ('+ Math.round((e.loaded*100.0)/ e.total)+'%)');
542 }
543 };
544
545 sgBackup.checkBackupCreation = function(){
546 jQuery('#manualBackup .btn-success').attr('disabled', true);
547 var sgBackupCreationHandler = new sgRequestHandler('checkBackupCreation', {token: BG_BACKUP_STRINGS.nonce});
548 sgBackupCreationHandler.dataType = 'html';
549 sgBackupCreationHandler.callback = function(response) {
550 var hideAndReload = function () {
551 jQuery('#sg-modal').modal('hide');
552 location.reload();
553 };
554 if (response.length) {
555 var result = jQuery.parseJSON(response);
556 if (result && result.status == 'cleaned') {
557 sgBackup.manualBackup();
558 }
559 else {
560 hideAndReload();
561 }
562 }
563 else {
564 hideAndReload();
565 }
566 };
567 sgBackupCreationHandler.run();
568 };
569
570 sgBackup.checkRestoreCreation = function(){
571 jQuery('#manualBackup .btn-success').attr('disabled', true);
572 var sgRestoreCreationHandler = new sgRequestHandler('checkRestoreCreation', {token: BG_BACKUP_STRINGS.nonce});
573 sgRestoreCreationHandler.callback = function(response){
574 if (response.status==0 && response.external_enabled==1) {
575 location.href = response.external_url;
576 }
577 else if (response.status == 'cleaned') {
578 jQuery('#manualBackup .btn-success').click();
579 }
580 else {
581 location.reload();
582 }
583 };
584 sgRestoreCreationHandler.run();
585 };
586
587 sgBackup.initManulBackupRadioInputs = function(){
588 jQuery('input[type=radio][name=backupType]').off('change').on('change', function(){
589 jQuery('.sg-custom-backup').fadeToggle();
590 });
591 jQuery('input[type=radio][name=restoreType]').off('change').on('change', function(){
592 if(jQuery('input[type=radio][name=restoreType]:checked').val() == "files"){
593 jQuery('.sg-restore-files-options').fadeIn();
594 }else{
595 jQuery('.sg-restore-files-options').fadeOut();
596 }
597 });
598
599 jQuery('input[type=radio][name=restoreFilesType]').off('change').on('change', function(){
600 jQuery('.sg-file-selective-restore').fadeToggle();
601 });
602
603 jQuery('input[type=checkbox][name=backupFiles], input[type=checkbox][name=backupDatabase], input[type=checkbox][name=backupCloud]').off('change').on('change', function(){
604 var sgCheckBoxWrapper = jQuery(this).closest('.checkbox').find('.sg-checkbox');
605 sgCheckBoxWrapper.fadeToggle();
606 if(jQuery(this).attr('name') == 'backupFiles') {
607 sgCheckBoxWrapper.find('input[type=checkbox]').attr('checked', 'checked');
608 }
609 });
610 jQuery('input[type=radio][name=backupDBType]').off('change').on('change',function(){
611 var sgCheckBoxWrapper = jQuery(this).closest('.checkbox').find('.sg-custom-backup-tables');
612 if(jQuery('input[type=radio][name=backupDBType]:checked').val() == '2'){
613 sgCheckBoxWrapper.find('input[type=checkbox]').not("[disabled]").prop('checked', true)
614 sgCheckBoxWrapper.fadeIn();
615 }else{
616 sgCheckBoxWrapper.fadeOut();
617 sgCheckBoxWrapper.find('input[type=checkbox][current="true"]').not("[disabled]").prop('checked', true)
618 sgCheckBoxWrapper.find('input[type=checkbox][current="false"]').prop('checked', false)
619 }
620 })
621 };
622
623 sgBackup.initImportTooltips = function () {
624 jQuery('a[data-toggle=tooltip]').tooltip();
625 };
626
627 sgBackup.initManualBackupTooltips = function(){
628 jQuery('[for=cloud-ftp]').tooltip();
629 jQuery('[for=cloud-dropbox]').tooltip();
630 jQuery('[for=cloud-gdrive]').tooltip();
631 jQuery('[for=cloud-one-drive]').tooltip();
632 jQuery('[for=cloud-amazon]').tooltip();
633 jQuery('[for=cloud-backup-guard]').tooltip();
634
635 jQuery('a[data-toggle=tooltip]').tooltip();
636 };
637
638 sgBackup.startRestore = function(bname) {
639
640 jQuery('.alert').remove();
641 var type = jQuery('input[type=radio][name=restoreType]:checked').val();
642 var restoreFilesType = jQuery('input[type=radio][name=restoreFilesType]:checked').val() || "0";
643 var paths = restoreFilesType == "0"? "/" : jQuery("#fileSystemTreeContainer").jstree("get_selected");
644 var checkPHPVersionCompatibility = new sgRequestHandler('checkPHPVersionCompatibility',{bname: bname, token: BG_BACKUP_STRINGS.nonce});
645
646 checkPHPVersionCompatibility.callback = function(response) {
647 if (typeof response.error != 'undefined') {
648 alert(response.error);
649 return false;
650 }
651 else if (typeof response.warning != 'undefined') {
652 if (!confirm(response.warning)) {
653 return false;
654 }
655 }
656
657 sgBackup.showAjaxSpinner('#sg-content-wrapper');
658 var resetStatusHandler = new sgRequestHandler('resetStatus', {token: BG_BACKUP_STRINGS.nonce});
659 resetStatusHandler.callback = function(response) {
660 //If error
661 if(typeof response.success === 'undefined') {
662 alert(response);
663 location.reload();
664 return false;
665 }
666 var restoreHandler = new sgRequestHandler('restore',{bname: bname, type:type, paths:paths});
667 restoreHandler.run();
668 sgBackup.checkRestoreCreation();
669 };
670 resetStatusHandler.run();
671 };
672
673 if (type == "files" && restoreFilesType == 1) {
674 var isFeatureAvailable = new sgRequestHandler('isFeatureAvailable', {sgFeature: "SLECTIVE_RESTORE"});
675 isFeatureAvailable.callback = function (response) {
676 if (typeof response.success != 'undefined') {
677 checkPHPVersionCompatibility.run();
678 }
679 else {
680 var alert = sgBackup.alertGenerator(response.error, 'alert-warning');
681 jQuery('#sg-modal .modal-header').prepend(alert);
682 return false;
683 }
684 };
685
686 isFeatureAvailable.run();
687 }
688 else {
689 checkPHPVersionCompatibility.run();
690 }
691 };
692
693 sgBackup.initActiveAction = function(){
694 if(jQuery('.sg-active-action-id').length<=0){
695 return;
696 }
697
698 var activeActionsIds = [];
699 jQuery('.sg-active-action-id').each(function() {
700 activeActionsIds.push(jQuery(this).val());
701 });
702
703 //Cancel Button
704 jQuery('.sg-cancel-backup').click(function(){
705 if (confirm('Are you sure?')) {
706 var actionId = jQuery(this).attr('sg-data-backup-id');
707 var sgCancelHandler = new sgRequestHandler('cancelBackup', {actionId: actionId, token: BG_BACKUP_STRINGS.nonce});
708 sgCancelHandler.run();
709 }
710 });
711
712 for (var i = 0; i < activeActionsIds.length; i++) {
713 //GetProgress
714 sgBackup.getActionProgress(activeActionsIds[i]);
715 }
716 };
717
718 sgBackup.getActionProgress = function(actionId){
719 var progressBar = jQuery('.sg-progress .progress-bar', '#sg-status-tabe-data-'+actionId);
720
721 var sgActionHandler = new sgRequestHandler('getAction', {actionId: actionId, token: BG_BACKUP_STRINGS.nonce});
722 //Init tooltip
723 var statusTooltip = jQuery('#sg-status-tabe-data-'+actionId+'[data-toggle=tooltip]').tooltip();
724
725 sgActionHandler.callback = function(response){
726 if(response){
727 sgBackup.disableUi();
728 var progressInPercents = response.progress+'%';
729 progressBar.width(progressInPercents);
730 sgBackup.statusUpdate(statusTooltip, response, progressInPercents);
731 setTimeout(function () {
732 sgActionHandler.run();
733 }, SG_CHECK_ACTION_STATUS_REQUEST_FREQUENCY);
734 }
735 else{
736 jQuery('[class*=sg-status]').addClass('active');
737 jQuery('.sg-progress').remove();
738 jQuery('.sg-active-action-id').remove();
739 location.reload();
740 }
741 };
742 sgActionHandler.run();
743 };
744
745 sgBackup.statusUpdate = function(tooltip, response, progressInPercents){
746 var tooltipText = '';
747 if(response.type == '1'){
748 var currentAction = 'Backup';
749 if (response.status == '1') {
750 tooltipText = currentAction + ' database - '+progressInPercents;
751 }
752 else if (response.status == '2') {
753 tooltipText = currentAction + ' files - '+progressInPercents;
754 }
755 jQuery('.sg-status-'+response.status).prevAll('[class*=sg-status]').addClass('active');
756 }
757 else if(response.type == '2'){
758 var currentAction = 'Restore';
759 if (response.status == '1') {
760 tooltipText = currentAction + ' database - '+progressInPercents;
761 }
762 else if (response.status == '2') {
763 tooltipText = currentAction + ' files - '+progressInPercents;
764 }
765 jQuery('.sg-status-'+response.type+response.status).prevAll('[class*=sg-status]').addClass('active');
766 }
767 else if(response.type == '3'){
768 var cloudIcon = jQuery('.sg-status-'+response.type+response.subtype);
769 if(response.subtype == SG_STORAGE_FTP){
770 tooltipText = 'Uploading to FTP - '+progressInPercents;
771 }
772 else if(response.subtype == SG_STORAGE_DROPBOX){
773 tooltipText = 'Uploading to Dropbox - '+progressInPercents;
774 }
775 else if(response.subtype == SG_STORAGE_GOOGLE_DRIVE){
776 tooltipText = 'Uploading to Google Drive - '+progressInPercents;
777 }
778 else if(response.subtype == SG_STORAGE_AMAZON) {
779 tooltipText = 'Uploading to Amazon S3 - '+progressInPercents;
780 }
781 else if(response.subtype == SG_STORAGE_ONE_DRIVE) {
782 tooltipText = 'Uploading to OneDrive - '+progressInPercents;
783 }
784 else if(response.subtype == SG_STORAGE_BACKUP_GUARD) {
785 tooltipText = 'Uploading to BackupGuard - '+progressInPercents;
786 }
787 cloudIcon.prevAll('[class*=sg-status]').addClass('active');
788 }
789 tooltip.attr('data-original-title',tooltipText);
790 };
791
792 sgBackup.disableUi = function(){
793 jQuery('#sg-manual-backup').attr('disabled','disabled');
794 jQuery('#sg-backup-with-migration').attr('disabled','disabled');
795 jQuery('#sg-import').attr('disabled','disabled');
796 jQuery('.sg-restore').attr('disabled','disabled');
797 jQuery('.sg-restore-button').attr('disabled','disabled');
798 };
799
800 sgBackup.enableUi = function(){
801 jQuery('#sg-manual-backup').removeAttr('disabled');
802 jQuery('#sg-import').removeAttr('disabled');
803 jQuery('.sg-restore').removeAttr('disabled');
804 jQuery('.sg-restore-button').removeAttr('disabled');
805 };
806
807 sgBackup.initBackupDeletion = function(){
808 jQuery('.sg-remove-backup').click(function(){
809 var btn = jQuery(this),
810 url = btn.attr('data-remote'),
811 backupName = [btn.attr('data-sgbackup-name')];
812 if (confirm('Are you sure?')) {
813 var ajaxHandler = new sgRequestHandler(url, {backupName: backupName, token: BG_BACKUP_STRINGS.nonce});
814 ajaxHandler.callback = function (response) {
815 location.reload();
816 };
817 ajaxHandler.run();
818 }
819 });
820 };
821