PluginProbe ʕ •ᴥ•ʔ
JetBackup – Backup, Restore & Migrate / 1.5.3
JetBackup – Backup, Restore & Migrate v1.5.3
3.1.22.4 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
832 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(checkedStatus){
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 if (!checkedStatus) {
217 sgBackup.checkBackupCreation();
218 }
219
220 //Before all disable buttons...
221 jQuery('.alert').remove();
222 jQuery('.modal-footer .btn-primary').attr('disabled','disabled');
223 jQuery('.modal-footer .btn-primary').html(BG_BACKUP_STRINGS.backupInProgress);
224
225 //Reset Status
226 var backupName = jQuery("#sg-custom-backup-name").val();
227 var resetStatusHandler = new sgRequestHandler('resetStatus', {backupName: backupName, token: BG_BACKUP_STRINGS.nonce });
228 resetStatusHandler.callback = function(response, error){
229 var manualBackupForm = jQuery('#manualBackup');
230 var manualBackupHandler = new sgRequestHandler('manualBackup', manualBackupForm.serialize()+'&token='+BG_BACKUP_STRINGS.nonce);
231 manualBackupHandler.dataIsObject = false;
232 //If error
233 if(typeof response.success === 'undefined') {
234 var sgAlert = sgBackup.alertGenerator(response, 'alert-danger');
235 jQuery('#sg-modal .modal-header').prepend(sgAlert);
236
237 if (response === 0 || response === false || response === '0' || response === 'false') {
238 response = BG_BACKUP_STRINGS.errorMessage;
239 }
240 sgBackup.restManualBackupModal();
241 return false;
242 }
243 if (checkedStatus) {
244 sgBackup.hideAndReload();
245 }
246 manualBackupHandler.run();
247 };
248 resetStatusHandler.run();
249 };
250
251 sgBackup.hideAndReload = function () {
252 jQuery('#sg-modal').modal('hide');
253 location.reload();
254 };
255
256 sgBackup.restManualBackupModal = function() {
257 jQuery('.modal-footer .btn-primary').removeAttr('disabled');
258 jQuery('.modal-footer .btn-primary').html('Backup');
259 };
260
261 sgBackup.cancelDonwload = function(name) {
262 var cancelDonwloadHandler = new sgRequestHandler('cancelDownload', {name: name, token: BG_BACKUP_STRINGS.nonce});
263 cancelDonwloadHandler.callback = function(response){
264 sgBackup.hideAjaxSpinner();
265 location.reload();
266 };
267 cancelDonwloadHandler.run();
268 };
269
270 sgBackup.listStorage = function(importFrom) {
271 var listStorage = new sgRequestHandler('listStorage', {storage: importFrom, token: BG_BACKUP_STRINGS.nonce});
272 sgBackup.showAjaxSpinner('#sg-modal-inport-from');
273 jQuery('#sg-archive-list-table tbody').empty();
274
275 jQuery('#sg-modal').off('hide.bs.modal').on('hide.bs.modal', function(e){
276
277 if (SG_ACTIVE_DOWNLOAD_AJAX) {
278 if (!confirm(BG_BACKUP_STRINGS.confirm)) {
279 e.preventDefault();
280 return false;
281 }
282 var target = jQuery('input[name="select-archive-to-download"]:checked');
283 var name = target.attr('file-name');
284
285 sgBackup.cancelDonwload(name);
286 }
287 });
288
289 listStorage.callback = function(response, error) {
290 var cloudName = '';
291 var cloudId = parseInt(importFrom, 10);
292
293 switch (cloudId) {
294 case SG_STORAGE_AMAZON:
295 cloudName = "S3";
296 break;
297 case SG_STORAGE_DROPBOX:
298 cloudName = "Dropbox";
299 break;
300 case SG_STORAGE_GOOGLE_DRIVE:
301 cloudName = "Google Drive";
302 break;
303 case SG_STORAGE_FTP:
304 cloudName = "FTP";
305 break;
306 case SG_STORAGE_ONE_DRIVE:
307 cloudName = "OneDrive";
308 break;
309 case SG_STORAGE_BACKUP_GUARD:
310 cloudName = "BackupGuard";
311 break;
312 default:
313 cloudName = '';
314 }
315
316 jQuery('.modal-title').html('Import from '+cloudName);
317
318 sgBackup.hideAjaxSpinner();
319 var content = '';
320 if ((typeof response.error != "undefined") || response.length == 0 || response === undefined) {
321 content = '<tr><td colspan="4">'+BG_BACKUP_STRINGS.noBackupsAvailable+'</td></tr>';
322 }
323 else {
324 jQuery.each(response, function( key, value ) {
325
326 var backupId = 0;
327
328 if (typeof value.id != 'undefined') {
329 backupId = value.id;
330 value.path = value.name;
331 }
332
333 content += '<tr>';
334 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>';
335 content += '<td>'+value.name+'</td>';
336 content += '<td>'+sgBackup.convertBytesToMegabytes(value.size)+'</td>';
337 content += '<td>'+value.date+'</td>';
338 content += '</tr>';
339 });
340 }
341
342 jQuery('#sg-archive-list-table tbody').append(content);
343 sgBackup.toggleDownloadFromCloudPage();
344 };
345
346 listStorage.run();
347 };
348
349
350 sgBackup.convertBytesToMegabytes = function ($bytes) {
351 return ($bytes/(1024*1024)).toFixed(2);
352 };
353
354 //Init file upload
355 sgBackup.initFileUpload = function(){
356 sgBackup.downloadFromPC();
357
358 jQuery('#uploadSgbpFile').click(function(){
359 if(jQuery('#modal-import-3').is(":visible")) {
360 var target = jQuery('input[name="select-archive-to-download"]:checked');
361 var path = target.val();
362 var name = target.attr('file-name');
363 var storage = target.attr('storage');
364 var size = target.attr('size');
365 var backupId = target.attr('backup-id');
366 sgBackup.downloadFromCloud(path, name, storage, size, backupId);
367 }
368 });
369 };
370
371 sgBackup.nextPage = function(){
372 var importFrom = jQuery('input[name="storage-radio"]:checked').val();
373 jQuery('.alert').remove();
374
375 if (!importFrom) {
376 var alert = sgBackup.alertGenerator(BG_BACKUP_STRINGS.invalidImportOption, 'alert-danger');
377 jQuery('#sg-modal .modal-header').prepend(alert);
378 }
379 else {
380 if (importFrom == 'local-pc') {
381 sgBackup.toggleDownloadFromPCPage();
382 }
383 else {
384 var isFeatureAvailable = new sgRequestHandler('isFeatureAvailable', {sgFeature: "DOWNLOAD_FROM_CLOUD"});
385 isFeatureAvailable.callback = function(response) {
386 if (typeof response.success !== 'undefined') {
387 sgBackup.listStorage(importFrom);
388 }
389 else {
390 var alert = sgBackup.alertGenerator(response.error, 'alert-danger');
391 jQuery('#sg-modal .modal-header').prepend(alert);
392 }
393 };
394
395 isFeatureAvailable.run();
396 }
397 }
398 };
399
400 sgBackup.previousPage = function(){
401 if(jQuery('#modal-import-2').is(":visible")){
402 jQuery('#modal-import-2').hide();
403 }
404 else{
405 jQuery('#modal-import-3').hide();
406 }
407
408 sgBackup.toggleNavigationButtons();
409
410 jQuery('#modal-import-1').show();
411 jQuery('#uploadSgbpFile').hide();
412
413 jQuery('.modal-title').html('Import from');
414 };
415
416 sgBackup.toggleNavigationButtons = function(){
417 jQuery('#switch-modal-import-pages-next').toggle();
418 jQuery('#switch-modal-import-pages-back').toggle();
419 };
420
421 sgBackup.toggleDownloadFromPCPage = function(){
422 sgBackup.toggleNavigationButtons();
423 jQuery('#modal-import-1').toggle();
424 jQuery('#modal-import-2').toggle();
425 jQuery('#uploadSgbpFile').toggle();
426 };
427
428 sgBackup.toggleDownloadFromCloudPage = function(){
429 sgBackup.toggleNavigationButtons();
430 jQuery('#modal-import-1').toggle();
431 jQuery('#modal-import-3').toggle();
432 jQuery('#uploadSgbpFile').toggle();
433 };
434
435 sgBackup.downloadFromCloud = function (path, name, storage, size) {
436 sgBackup.showAjaxSpinner('.modal-dialog');
437 var error = [];
438 if (!path) {
439 error.push(BG_BACKUP_STRINGS.invalidDownloadFile);
440 }
441
442 jQuery('.alert').remove();
443
444 if (error.length) {
445 sgBackup.hideAjaxSpinner();
446 var sgAlert = sgBackup.alertGenerator(error, 'alert-danger');
447 jQuery('#sg-modal .modal-header').prepend(sgAlert);
448 return false;
449 }
450
451 var downloadFromCloudHandler = new sgRequestHandler('downloadFromCloud', {
452 path: path,
453 storage: storage,
454 size: size,
455 token: BG_BACKUP_STRINGS.nonce
456 });
457
458 jQuery('#switch-modal-import-pages-back').hide();
459 jQuery('#uploadSgbpFile').attr('disabled', 'disabled');
460
461 downloadFromCloudHandler.callback = function (response, error){
462 sgBackup.hideAjaxSpinner();
463 jQuery('.alert').remove();
464
465 clearTimeout(SG_DOWNLOAD_PROGRESS);
466
467 if (typeof response.success !== 'undefined') {
468 location.reload();
469 }
470 else {
471 jQuery('#uploadSgbpFile').html(BG_BACKUP_STRINGS.import);
472
473 var sgAlert = sgBackup.alertGenerator(response.error, 'alert-danger');
474
475 jQuery('#uploadSgbpFile').attr('disabled', false);
476 jQuery('#switch-modal-import-pages-back').toggle();
477 jQuery('#sg-modal .modal-header').prepend(sgAlert);
478 SG_ACTIVE_DOWNLOAD_AJAX = false;
479
480 return false;
481 }
482 };
483
484 SG_ACTIVE_DOWNLOAD_AJAX = true;
485 downloadFromCloudHandler.run();
486 sgBackup.fileDownloadProgress(name, size);
487 };
488
489 sgBackup.downloadFromPC = function(){
490 var sgData = null;
491 jQuery('#sg-modal').off('hide.bs.modal').on('hide.bs.modal', function(e){
492 if (SG_ACTIVE_DOWNLOAD_AJAX) {
493 if (!confirm(BG_BACKUP_STRINGS.confirm)) {
494 e.preventDefault();
495 return false;
496 }
497
498 sgData.abort();
499 sgBackup.cancelDonwload(sgData.files[0].name);
500 }
501 });
502
503 jQuery('.sg-backup-upload-input').fileupload({
504 dataType: 'json',
505 maxChunkSize: 2000000,
506 add: function (e, data) {
507 if (data.originalFiles.length) {
508 var fileName = data.originalFiles[0].name;
509 jQuery('#sg-import-file-name').val(fileName);
510 }
511 jQuery('#uploadSgbpFile').click(function(){
512 if(jQuery('#modal-import-2').is(":visible")) {
513 sgData = data;
514 SG_ACTIVE_DOWNLOAD_AJAX = true;
515 jQuery('#uploadSgbpFile').attr('disabled','disabled');
516 jQuery('#switch-modal-import-pages-back').hide();
517 jQuery('#uploadSgbpFile').html(BG_BACKUP_STRINGS.importInProgress);
518 data.submit();
519 }
520 });
521 },
522 done: function (e, data) {
523 location.reload();
524 },
525 progress: function (e, data) {
526 var progress = parseInt(data.loaded / data.total * 100, 10);
527 jQuery('#uploadSgbpFile').html('Importing ('+ Math.round(progress)+'%)');
528 }
529 }).on('fileuploadfail', function (e, data) {
530 var alert = sgBackup.alertGenerator(BG_BACKUP_STRINGS.fileUploadFailed, 'alert-danger');
531 jQuery('#sg-modal .modal-header').prepend(alert);
532 });
533 };
534
535 sgBackup.fileDownloadProgress = function(file, size){
536 var getFileDownloadProgress = new sgRequestHandler('getFileDownloadProgress', {file: file, size: size, token: BG_BACKUP_STRINGS.nonce});
537
538 getFileDownloadProgress.callback = function(response){
539 if (typeof response.progress !== 'undefined') {
540 jQuery('#uploadSgbpFile').html('Importing ('+ Math.round(response.progress)+'%)');
541 SG_DOWNLOAD_PROGRESS = setTimeout(function () {
542 getFileDownloadProgress.run();
543 }, SG_AJAX_REQUEST_FREQUENCY);
544 }
545 };
546
547 getFileDownloadProgress.run();
548 };
549
550 sgBackup.fileUploadProgress = function(e){
551 if(e.lengthComputable){
552 jQuery('#uploadSgbpFile').html('Importing ('+ Math.round((e.loaded*100.0)/ e.total)+'%)');
553 }
554 };
555
556 sgBackup.checkBackupCreation = function(){
557 jQuery('#manualBackup .btn-success').attr('disabled', true);
558 var sgBackupCreationHandler = new sgRequestHandler('checkBackupCreation', {token: BG_BACKUP_STRINGS.nonce});
559 sgBackupCreationHandler.dataType = 'html';
560 sgBackupCreationHandler.callback = function(response) {
561 var hideAndReload = function () {
562 jQuery('#sg-modal').modal('hide');
563 location.reload();
564 };
565 if (response.length) {
566 var result = jQuery.parseJSON(response);
567 if (result && result.status == 'cleaned') {
568 sgBackup.manualBackup('cleaned');
569 }
570 else {
571 hideAndReload();
572 }
573 }
574 else {
575 hideAndReload();
576 }
577 };
578 sgBackupCreationHandler.run();
579 };
580
581 sgBackup.checkRestoreCreation = function(){
582 jQuery('#manualBackup .btn-success').attr('disabled', true);
583 var sgRestoreCreationHandler = new sgRequestHandler('checkRestoreCreation', {token: BG_BACKUP_STRINGS.nonce});
584 sgRestoreCreationHandler.callback = function(response){
585 if (response.status==0 && response.external_enabled==1) {
586 location.href = response.external_url;
587 }
588 else if (response.status == 'cleaned') {
589 jQuery('#manualBackup .btn-success').click();
590 }
591 else {
592 location.reload();
593 }
594 };
595 sgRestoreCreationHandler.run();
596 };
597
598 sgBackup.initManulBackupRadioInputs = function(){
599 jQuery('input[type=radio][name=backupType]').off('change').on('change', function(){
600 jQuery('.sg-custom-backup').fadeToggle();
601 });
602 jQuery('input[type=radio][name=restoreType]').off('change').on('change', function(){
603 if(jQuery('input[type=radio][name=restoreType]:checked').val() == "files"){
604 jQuery('.sg-restore-files-options').fadeIn();
605 }else{
606 jQuery('.sg-restore-files-options').fadeOut();
607 }
608 });
609
610 jQuery('input[type=radio][name=restoreFilesType]').off('change').on('change', function(){
611 jQuery('.sg-file-selective-restore').fadeToggle();
612 });
613
614 jQuery('input[type=checkbox][name=backupFiles], input[type=checkbox][name=backupDatabase], input[type=checkbox][name=backupCloud]').off('change').on('change', function(){
615 var sgCheckBoxWrapper = jQuery(this).closest('.checkbox').find('.sg-checkbox');
616 sgCheckBoxWrapper.fadeToggle();
617 if(jQuery(this).attr('name') == 'backupFiles') {
618 sgCheckBoxWrapper.find('input[type=checkbox]').attr('checked', 'checked');
619 }
620 });
621 jQuery('input[type=radio][name=backupDBType]').off('change').on('change',function(){
622 var sgCheckBoxWrapper = jQuery(this).closest('.checkbox').find('.sg-custom-backup-tables');
623 if(jQuery('input[type=radio][name=backupDBType]:checked').val() == '2'){
624 sgCheckBoxWrapper.find('input[type=checkbox]').not("[disabled]").prop('checked', true)
625 sgCheckBoxWrapper.fadeIn();
626 }else{
627 sgCheckBoxWrapper.fadeOut();
628 sgCheckBoxWrapper.find('input[type=checkbox][current="true"]').not("[disabled]").prop('checked', true)
629 sgCheckBoxWrapper.find('input[type=checkbox][current="false"]').prop('checked', false)
630 }
631 })
632 };
633
634 sgBackup.initImportTooltips = function () {
635 jQuery('a[data-toggle=tooltip]').tooltip();
636 };
637
638 sgBackup.initManualBackupTooltips = function(){
639 jQuery('[for=cloud-ftp]').tooltip();
640 jQuery('[for=cloud-dropbox]').tooltip();
641 jQuery('[for=cloud-gdrive]').tooltip();
642 jQuery('[for=cloud-one-drive]').tooltip();
643 jQuery('[for=cloud-amazon]').tooltip();
644 jQuery('[for=cloud-backup-guard]').tooltip();
645
646 jQuery('a[data-toggle=tooltip]').tooltip();
647 };
648
649 sgBackup.startRestore = function(bname) {
650
651 jQuery('.alert').remove();
652 var type = jQuery('input[type=radio][name=restoreType]:checked').val();
653 var restoreFilesType = jQuery('input[type=radio][name=restoreFilesType]:checked').val() || "0";
654 var paths = restoreFilesType == "0"? "/" : jQuery("#fileSystemTreeContainer").jstree("get_selected");
655 var checkPHPVersionCompatibility = new sgRequestHandler('checkPHPVersionCompatibility',{bname: bname, token: BG_BACKUP_STRINGS.nonce});
656
657 checkPHPVersionCompatibility.callback = function(response) {
658 if (typeof response.error != 'undefined') {
659 alert(response.error);
660 return false;
661 }
662 else if (typeof response.warning != 'undefined') {
663 if (!confirm(response.warning)) {
664 return false;
665 }
666 }
667
668 sgBackup.showAjaxSpinner('#sg-content-wrapper');
669 var resetStatusHandler = new sgRequestHandler('resetStatus', {token: BG_BACKUP_STRINGS.nonce});
670 resetStatusHandler.callback = function(response) {
671 //If error
672 if(typeof response.success === 'undefined') {
673 alert(response);
674 location.reload();
675 return false;
676 }
677 var restoreHandler = new sgRequestHandler('restore',{bname: bname, type:type, paths:paths});
678 restoreHandler.run();
679 sgBackup.checkRestoreCreation();
680 };
681 resetStatusHandler.run();
682 };
683
684 if (type == "files" && restoreFilesType == 1) {
685 var isFeatureAvailable = new sgRequestHandler('isFeatureAvailable', {sgFeature: "SLECTIVE_RESTORE"});
686 isFeatureAvailable.callback = function (response) {
687 if (typeof response.success != 'undefined') {
688 checkPHPVersionCompatibility.run();
689 }
690 else {
691 var alert = sgBackup.alertGenerator(response.error, 'alert-warning');
692 jQuery('#sg-modal .modal-header').prepend(alert);
693 return false;
694 }
695 };
696
697 isFeatureAvailable.run();
698 }
699 else {
700 checkPHPVersionCompatibility.run();
701 }
702 };
703
704 sgBackup.initActiveAction = function(){
705 if(jQuery('.sg-active-action-id').length<=0){
706 return;
707 }
708
709 var activeActionsIds = [];
710 jQuery('.sg-active-action-id').each(function() {
711 activeActionsIds.push(jQuery(this).val());
712 });
713
714 //Cancel Button
715 jQuery('.sg-cancel-backup').click(function(){
716 if (confirm('Are you sure?')) {
717 var actionId = jQuery(this).attr('sg-data-backup-id');
718 var sgCancelHandler = new sgRequestHandler('cancelBackup', {actionId: actionId, token: BG_BACKUP_STRINGS.nonce});
719 sgCancelHandler.run();
720 }
721 });
722
723 for (var i = 0; i < activeActionsIds.length; i++) {
724 //GetProgress
725 sgBackup.getActionProgress(activeActionsIds[i]);
726 }
727 };
728
729 sgBackup.getActionProgress = function(actionId){
730 var progressBar = jQuery('.sg-progress .progress-bar', '#sg-status-tabe-data-'+actionId);
731
732 var sgActionHandler = new sgRequestHandler('getAction', {actionId: actionId, token: BG_BACKUP_STRINGS.nonce});
733 //Init tooltip
734 var statusTooltip = jQuery('#sg-status-tabe-data-'+actionId+'[data-toggle=tooltip]').tooltip();
735
736 sgActionHandler.callback = function(response){
737 if(response){
738 sgBackup.disableUi();
739 var progressInPercents = response.progress+'%';
740 progressBar.width(progressInPercents);
741 sgBackup.statusUpdate(statusTooltip, response, progressInPercents);
742 setTimeout(function () {
743 sgActionHandler.run();
744 }, SG_CHECK_ACTION_STATUS_REQUEST_FREQUENCY);
745 }
746 else{
747 jQuery('[class*=sg-status]').addClass('active');
748 jQuery('.sg-progress').remove();
749 jQuery('.sg-active-action-id').remove();
750 location.reload();
751 }
752 };
753 sgActionHandler.run();
754 };
755
756 sgBackup.statusUpdate = function(tooltip, response, progressInPercents){
757 var tooltipText = '';
758 if(response.type == '1'){
759 var currentAction = 'Backup';
760 if (response.status == '1') {
761 tooltipText = currentAction + ' database - '+progressInPercents;
762 }
763 else if (response.status == '2') {
764 tooltipText = currentAction + ' files - '+progressInPercents;
765 }
766 jQuery('.sg-status-'+response.status).prevAll('[class*=sg-status]').addClass('active');
767 }
768 else if(response.type == '2'){
769 var currentAction = 'Restore';
770 if (response.status == '1') {
771 tooltipText = currentAction + ' database - '+progressInPercents;
772 }
773 else if (response.status == '2') {
774 tooltipText = currentAction + ' files - '+progressInPercents;
775 }
776 jQuery('.sg-status-'+response.type+response.status).prevAll('[class*=sg-status]').addClass('active');
777 }
778 else if(response.type == '3'){
779 var cloudIcon = jQuery('.sg-status-'+response.type+response.subtype);
780 if(response.subtype == SG_STORAGE_FTP){
781 tooltipText = 'Uploading to FTP - '+progressInPercents;
782 }
783 else if(response.subtype == SG_STORAGE_DROPBOX){
784 tooltipText = 'Uploading to Dropbox - '+progressInPercents;
785 }
786 else if(response.subtype == SG_STORAGE_GOOGLE_DRIVE){
787 tooltipText = 'Uploading to Google Drive - '+progressInPercents;
788 }
789 else if(response.subtype == SG_STORAGE_AMAZON) {
790 tooltipText = 'Uploading to Amazon S3 - '+progressInPercents;
791 }
792 else if(response.subtype == SG_STORAGE_ONE_DRIVE) {
793 tooltipText = 'Uploading to OneDrive - '+progressInPercents;
794 }
795 else if(response.subtype == SG_STORAGE_BACKUP_GUARD) {
796 tooltipText = 'Uploading to BackupGuard - '+progressInPercents;
797 }
798 cloudIcon.prevAll('[class*=sg-status]').addClass('active');
799 }
800 tooltip.attr('data-original-title',tooltipText);
801 };
802
803 sgBackup.disableUi = function(){
804 jQuery('#sg-manual-backup').attr('disabled','disabled');
805 jQuery('#sg-backup-with-migration').attr('disabled','disabled');
806 jQuery('#sg-import').attr('disabled','disabled');
807 jQuery('.sg-restore').attr('disabled','disabled');
808 jQuery('.sg-restore-button').attr('disabled','disabled');
809 };
810
811 sgBackup.enableUi = function(){
812 jQuery('#sg-manual-backup').removeAttr('disabled');
813 jQuery('#sg-import').removeAttr('disabled');
814 jQuery('.sg-restore').removeAttr('disabled');
815 jQuery('.sg-restore-button').removeAttr('disabled');
816 };
817
818 sgBackup.initBackupDeletion = function(){
819 jQuery('.sg-remove-backup').click(function(){
820 var btn = jQuery(this),
821 url = btn.attr('data-remote'),
822 backupName = [btn.attr('data-sgbackup-name')];
823 if (confirm('Are you sure?')) {
824 var ajaxHandler = new sgRequestHandler(url, {backupName: backupName, token: BG_BACKUP_STRINGS.nonce});
825 ajaxHandler.callback = function (response) {
826 location.reload();
827 };
828 ajaxHandler.run();
829 }
830 });
831 };
832