2018-01-26 15:50:15 +01:00
/ * *
* Send an action over AJAX . A wrapper around jQuery . ajax . In future , all consumers can be reviewed to simplify some of the options , where there is historical cruft .
* N . B . updraft _iframe _modal ( ) below uses the Ajax URL for the iframe ' s src attribute
*
* @ param { string } action - the action to send
* @ param { * } data - data to send
* @ param { Function } callback - will be called with the results
* @ param { object } options - further options . Relevant properties include :
* - [ json _parse = true ] - whether to JSON parse the results
* - [ alert _on _error = true ] - whether to show an alert box if there was a problem ( otherwise , suppress it )
* - [ action = 'updraft_ajax' ] - what to send as the action parameter on the AJAX request ( N . B . action parameter to this function goes as the 'subaction' parameter on the AJAX request )
* - [ nonce = updraft _credentialtest _nonce ] - the nonce value to send .
* - [ nonce _key = 'nonce' ] - the key value for the nonce field
* - [ timeout = null ] - set a timeout after this number of seconds ( or if null , none is set )
* - [ async = true ] - control whether the request is asynchronous ( almost always wanted ) or blocking ( would need to have a specific reason )
* - [ type = 'POST' ] - GET or POST
* /
function updraft _send _command ( action , data , callback , options ) {
default _options = {
json _parse : true ,
alert _on _error : true ,
action : 'updraft_ajax' ,
nonce : updraft _credentialtest _nonce ,
nonce _key : 'nonce' ,
timeout : null ,
async : true ,
type : 'POST'
}
if ( 'undefined' === typeof options ) options = { } ;
for ( var opt in default _options ) {
if ( ! options . hasOwnProperty ( opt ) ) { options [ opt ] = default _options [ opt ] ; }
}
var ajax _data = {
action : options . action ,
subaction : action ,
} ;
ajax _data [ options . nonce _key ] = options . nonce ;
// TODO: Once all calls are routed through here, change the listener in admin.php to always take the data from the 'data' attribute, instead of in the naked $_POST/$_GET
if ( typeof data == 'object' ) {
for ( var attrname in data ) { ajax _data [ attrname ] = data [ attrname ] ; }
} else {
ajax _data . action _data = data ;
}
var ajax _opts = {
type : options . type ,
url : ajaxurl ,
data : ajax _data ,
success : function ( response , status ) {
if ( options . json _parse ) {
try {
var resp = ud _parse _json ( response ) ;
} catch ( e ) {
console . log ( e ) ;
console . log ( response ) ;
if ( options . alert _on _error ) { alert ( updraftlion . unexpectedresponse + ' ' + response ) ; }
return ;
}
if ( 'function' == typeof callback ) callback ( resp , status , response ) ;
} else {
if ( 'function' == typeof callback ) callback ( response , status ) ;
}
} ,
error : function ( response , status , error _code ) {
if ( 'function' == typeof options . error _callback ) {
options . error _callback ( response , status , error _code ) ;
} else {
console . log ( "updraft_send_command: error: " + status + " (" + error _code + ")" ) ;
console . log ( response ) ;
}
} ,
dataType : 'text' ,
async : options . async
} ;
if ( null != options . timeout ) { ajax _opts . timeout = options . timeout ; }
jQuery . ajax ( ajax _opts ) ;
}
/ * *
* Opens the dialog box for confirmation of whether to delete a backup , plus options if relevant
*
* @ param { string } key - The UNIX timestamp of the backup
* @ param { string } nonce - The backup job ID
* @ param { boolean } showremote - Whether or not to show the "also delete from remote storage?" checkbox
* /
2016-11-28 21:52:15 -08:00
function updraft _delete ( key , nonce , showremote ) {
jQuery ( '#updraft_delete_timestamp' ) . val ( key ) ;
jQuery ( '#updraft_delete_nonce' ) . val ( nonce ) ;
if ( showremote ) {
jQuery ( '#updraft-delete-remote-section, #updraft_delete_remote' ) . removeAttr ( 'disabled' ) . show ( ) ;
} else {
jQuery ( '#updraft-delete-remote-section, #updraft_delete_remote' ) . hide ( ) . attr ( 'disabled' , 'disabled' ) ;
}
if ( key . indexOf ( ',' ) > - 1 ) {
jQuery ( '#updraft_delete_question_singular' ) . hide ( ) ;
jQuery ( '#updraft_delete_question_plural' ) . show ( ) ;
} else {
jQuery ( '#updraft_delete_question_plural' ) . hide ( ) ;
jQuery ( '#updraft_delete_question_singular' ) . show ( ) ;
}
jQuery ( '#updraft-delete-modal' ) . dialog ( 'open' ) ;
}
function updraft _remote _storage _tab _activation ( the _method ) {
jQuery ( '.updraftplusmethod' ) . hide ( ) ;
jQuery ( '.remote-tab' ) . data ( 'active' , false ) ;
jQuery ( '.remote-tab' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '.updraftplusmethod.' + the _method ) . show ( ) ;
jQuery ( '.remote-tab-' + the _method ) . data ( 'active' , true ) ;
jQuery ( '.remote-tab-' + the _method ) . addClass ( 'nav-tab-active' ) ;
}
2018-01-26 15:50:15 +01:00
/ * *
* Check how many cron jobs are overdue , and display a message if it is several ( as determined by the back - end )
* /
function updraft _check _overduecrons ( ) {
updraft _send _command ( 'check_overdue_crons' , null , function ( response ) {
if ( response && response . hasOwnProperty ( 'm' ) ) {
jQuery ( '#updraft-insert-admin-warning' ) . html ( response . m ) ;
}
} , { alert _on _error : false } ) ;
}
2016-11-28 21:52:15 -08:00
function updraft _remote _storage _tabs _setup ( ) {
var anychecked = 0 ;
var set = jQuery ( '.updraft_servicecheckbox:checked' ) ;
jQuery ( set ) . each ( function ( ind , obj ) {
var ser = jQuery ( obj ) . val ( ) ;
2018-01-26 15:50:15 +01:00
if ( jQuery ( obj ) . attr ( 'id' ) != 'updraft_servicecheckbox_none' ) {
2016-11-28 21:52:15 -08:00
anychecked ++ ;
}
jQuery ( '.remote-tab-' + ser ) . show ( ) ;
2018-01-26 15:50:15 +01:00
if ( ind == jQuery ( set ) . length - 1 ) {
2016-11-28 21:52:15 -08:00
updraft _remote _storage _tab _activation ( ser ) ;
}
} ) ;
2018-01-26 15:50:15 +01:00
2016-11-28 21:52:15 -08:00
if ( anychecked > 0 ) {
jQuery ( '.updraftplusmethod.none' ) . hide ( ) ;
}
2018-01-26 15:50:15 +01:00
// To allow labelauty remote storage buttons to be used with keyboard
2016-11-28 21:52:15 -08:00
jQuery ( document ) . keyup ( function ( event ) {
2018-01-26 15:50:15 +01:00
if ( 32 === event . keyCode || 13 === event . keyCode ) {
if ( jQuery ( document . activeElement ) . is ( "input.labelauty + label" ) ) {
2016-11-28 21:52:15 -08:00
var for _box = jQuery ( document . activeElement ) . attr ( "for" ) ;
2018-01-26 15:50:15 +01:00
if ( for _box ) {
2016-11-28 21:52:15 -08:00
jQuery ( "#" + for _box ) . change ( ) ;
}
}
}
} ) ;
jQuery ( '.updraft_servicecheckbox' ) . change ( function ( ) {
var sclass = jQuery ( this ) . attr ( 'id' ) ;
if ( 'updraft_servicecheckbox_' == sclass . substring ( 0 , 24 ) ) {
var serv = sclass . substring ( 24 ) ;
if ( null != serv && '' != serv ) {
if ( jQuery ( this ) . is ( ':checked' ) ) {
anychecked ++ ;
jQuery ( '.remote-tab-' + serv ) . fadeIn ( ) ;
updraft _remote _storage _tab _activation ( serv ) ;
} else {
anychecked -- ;
jQuery ( '.remote-tab-' + serv ) . hide ( ) ;
2018-01-26 15:50:15 +01:00
// Check if this was the active tab, if yes, switch to another
if ( jQuery ( '.remote-tab-' + serv ) . data ( 'active' ) == true ) {
2016-11-28 21:52:15 -08:00
updraft _remote _storage _tab _activation ( jQuery ( '.remote-tab:visible' ) . last ( ) . attr ( 'name' ) ) ;
}
}
}
}
2018-01-26 15:50:15 +01:00
2016-11-28 21:52:15 -08:00
if ( anychecked <= 0 ) {
jQuery ( '.updraftplusmethod.none' ) . fadeIn ( ) ;
} else {
jQuery ( '.updraftplusmethod.none' ) . hide ( ) ;
}
} ) ;
2018-01-26 15:50:15 +01:00
// Add stuff for free version
jQuery ( '.updraft_servicecheckbox:not(.multi)' ) . change ( function ( ) {
2016-11-28 21:52:15 -08:00
var svalue = jQuery ( this ) . attr ( 'value' ) ;
if ( jQuery ( this ) . is ( ':not(:checked)' ) ) {
jQuery ( '.updraftplusmethod.' + svalue ) . hide ( ) ;
jQuery ( '.updraftplusmethod.none' ) . fadeIn ( ) ;
} else {
jQuery ( '.updraft_servicecheckbox' ) . not ( this ) . prop ( 'checked' , false ) ;
}
} ) ;
var servicecheckbox = jQuery ( '.updraft_servicecheckbox' ) ;
if ( typeof servicecheckbox . labelauty === 'function' ) { servicecheckbox . labelauty ( ) ; }
}
2018-01-26 15:50:15 +01:00
/ * *
* Carries out a remote storage test
*
* @ param { string } method - The identifier for the remote storage
* @ param { callback } result _callback - A callback function to be called with the result
* @ param { string } instance _id - The particular instance ( if any ) of the remote storage to be tested ( for methods supporting multiple instances )
* /
function updraft _remote _storage _test ( method , result _callback , instance _id ) {
var $the _button ;
var settings _selector ;
if ( instance _id ) {
$the _button = jQuery ( '#updraft-' + method + '-test-' + instance _id ) ;
settings _selector = '.updraftplusmethod.' + method + '-' + instance _id ;
} else {
$the _button = jQuery ( '#updraft-' + method + '-test' ) ;
settings _selector = '.updraftplusmethod.' + method ;
}
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
var method _label = $the _button . data ( 'method_label' ) ;
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
$the _button . html ( updraftlion . testing _settings . replace ( '%s' , method _label ) ) ;
2016-11-28 21:52:15 -08:00
var data = {
2018-01-26 15:50:15 +01:00
method : method
2016-11-28 21:52:15 -08:00
} ;
// Add the other items to the data object. The expert mode settings are for the generic SSL options.
2018-01-26 15:50:15 +01:00
jQuery ( '#updraft-navtab-settings-content ' + settings _selector + ' input[data-updraft_settings_test], #updraft-navtab-settings-content .expertmode input[data-updraft_settings_test]' ) . each ( function ( index , item ) {
2016-11-28 21:52:15 -08:00
var item _key = jQuery ( item ) . data ( 'updraft_settings_test' ) ;
var input _type = jQuery ( item ) . attr ( 'type' ) ;
if ( ! item _key ) { return ; }
if ( ! input _type ) {
console . log ( "UpdraftPlus: settings test input item with no type found" ) ;
console . log ( item ) ;
// A default
input _type = 'text' ;
}
var value = null ;
if ( 'checkbox' == input _type ) {
value = jQuery ( item ) . is ( ':checked' ) ? 1 : 0 ;
} else if ( 'text' == input _type || 'password' == input _type ) {
value = jQuery ( item ) . val ( ) ;
} else {
console . log ( "UpdraftPlus: settings test input item with unrecognised type (" + input _type + ") found" ) ;
console . log ( item ) ;
}
data [ item _key ] = value ;
} ) ;
// Data from any text areas or select drop-downs
2018-01-26 15:50:15 +01:00
jQuery ( '#updraft-navtab-settings-content ' + settings _selector + ' textarea[data-updraft_settings_test], #updraft-navtab-settings-content ' + settings _selector + ' select[data-updraft_settings_test]' ) . each ( function ( index , item ) {
2016-11-28 21:52:15 -08:00
var item _key = jQuery ( item ) . data ( 'updraft_settings_test' ) ;
data [ item _key ] = jQuery ( item ) . val ( ) ;
} ) ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'test_storage_settings' , data , function ( response , status ) {
$the _button . html ( updraftlion . test _settings . replace ( '%s' , method _label ) ) ;
2016-11-28 21:52:15 -08:00
if ( 'undefined' !== typeof result _callback && false != result _callback ) {
result _callback = result _callback . call ( this , response , status , data ) ;
}
2018-01-26 15:50:15 +01:00
if ( 'undefined' !== typeof result _callback && false === result _callback ) {
alert ( updraftlion . settings _test _result . replace ( '%s' , method _label ) + ' ' + response . output ) ;
if ( response . hasOwnProperty ( 'data' ) ) {
console . log ( response . data ) ;
}
2016-11-28 21:52:15 -08:00
}
} ) ;
}
function backupnow _whichfiles _checked ( onlythesefileentities ) {
jQuery ( '#backupnow_includefiles_moreoptions input[type="checkbox"]' ) . each ( function ( index ) {
if ( ! jQuery ( this ) . is ( ':checked' ) ) { return ; }
var name = jQuery ( this ) . attr ( 'name' ) ;
if ( name . substring ( 0 , 16 ) != 'updraft_include_' ) { return ; }
var entity = name . substring ( 16 ) ;
if ( onlythesefileentities != '' ) { onlythesefileentities += ',' ; }
onlythesefileentities += entity ;
} ) ;
2018-01-26 15:50:15 +01:00
// console.log(onlythesefileentities);
2016-11-28 21:52:15 -08:00
return onlythesefileentities ;
}
2018-01-26 15:50:15 +01:00
/ * *
* A method to get all the selected table values from the backup now modal
*
* @ param { string } onlythesetableentities an empty string to append values to
*
* @ return { string } a string that contains the values of all selected table entities and the database the belong to
* /
function backupnow _whichtables _checked ( onlythesetableentities ) {
var send _list = false ;
jQuery ( '#backupnow_database_moreoptions input[type="checkbox"]' ) . each ( function ( index ) {
if ( ! jQuery ( this ) . is ( ':checked' ) ) { send _list = true ; return ; }
} ) ;
onlythesetableentities = jQuery ( "input[name^='updraft_include_tables_']" ) . serializeArray ( ) ;
if ( send _list ) {
return onlythesetableentities ;
} else {
return true ;
}
}
2016-11-28 21:52:15 -08:00
function updraft _deleteallselected ( ) {
var howmany = 0 ;
var remote _exists = 0 ;
var key _all = '' ;
var nonce _all = '' ;
var remote _all = '' ;
jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected' ) . each ( function ( index ) {
howmany ++ ;
var nonce = jQuery ( this ) . data ( 'nonce' ) ;
if ( nonce _all ) { nonce _all += ',' ; }
nonce _all += nonce ;
var key = jQuery ( this ) . data ( 'key' ) ;
if ( key _all ) { key _all += ',' ; }
key _all += key ;
var has _remote = jQuery ( this ) . find ( '.updraftplus-remove' ) . data ( 'hasremote' ) ;
if ( remote _all ) { remote _all += ',' ; }
remote _all += has _remote ;
} ) ;
updraft _delete ( key _all , nonce _all , remote _all ) ;
}
function updraft _openrestorepanel ( toggly ) {
2018-01-26 15:50:15 +01:00
// jQuery('.download-backups').slideDown(); updraft_historytimertoggle(1); jQuery('html,body').animate({scrollTop: jQuery('#updraft_lastlogcontainer').offset().top},'slow');
2016-11-28 21:52:15 -08:00
updraft _console _focussed _tab = 2 ;
updraft _historytimertoggle ( toggly ) ;
jQuery ( '#updraft-navtab-status-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-expert-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-settings-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-addons-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-backups-content' ) . show ( ) ;
jQuery ( '#updraft-navtab-backups' ) . addClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-expert' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-settings' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-status' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-addons' ) . removeClass ( 'nav-tab-active' ) ;
}
function updraft _delete _old _dirs ( ) {
return true ;
}
function updraft _initiate _restore ( whichset ) {
jQuery ( '#updraft-migrate-modal' ) . dialog ( 'close' ) ;
jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups button[data-backup_timestamp="' + whichset + '"]' ) . click ( ) ;
}
function updraft _restore _setoptions ( entities ) {
var howmany = 0 ;
2018-01-26 15:50:15 +01:00
jQuery ( 'input[name="updraft_restore[]"]' ) . each ( function ( x , y ) {
2016-11-28 21:52:15 -08:00
var entity = jQuery ( y ) . val ( ) ;
var epat = entity + '=([0-9,]+)' ;
var eregex = new RegExp ( epat ) ;
var ematch = entities . match ( eregex ) ;
if ( ematch ) {
jQuery ( y ) . removeAttr ( 'disabled' ) . data ( 'howmany' , ematch [ 1 ] ) . parent ( ) . show ( ) ;
howmany ++ ;
if ( 'db' == entity ) { howmany += 4.5 ; }
if ( jQuery ( y ) . is ( ':checked' ) ) {
// This element may or may not exist. The purpose of explicitly calling show() is that Firefox, when reloading (including via forwards/backwards navigation) will remember checkbox states, but not which DOM elements were showing/hidden - which can result in some being hidden when they should be shown, and the user not seeing the options that are/are not checked.
jQuery ( '#updraft_restorer_' + entity + 'options' ) . show ( ) ;
}
} else {
jQuery ( y ) . attr ( 'disabled' , 'disabled' ) . parent ( ) . hide ( ) ;
}
} ) ;
var cryptmatch = entities . match ( /dbcrypted=1/ ) ;
if ( cryptmatch ) {
jQuery ( '.updraft_restore_crypteddb' ) . show ( ) ;
} else {
jQuery ( '.updraft_restore_crypteddb' ) . hide ( ) ;
}
var dmatch = entities . match ( /meta_foreign=([12])/ ) ;
if ( dmatch ) {
jQuery ( '#updraft_restore_meta_foreign' ) . val ( dmatch [ 1 ] ) ;
} else {
jQuery ( '#updraft_restore_meta_foreign' ) . val ( '0' ) ;
}
var height = 336 + howmany * 20 ;
jQuery ( '#updraft-restore-modal' ) . dialog ( "option" , "height" , height ) ;
}
function updraft _backup _dialog _open ( ) {
jQuery ( '#backupnow_includefiles_moreoptions' ) . hide ( ) ;
2018-01-26 15:50:15 +01:00
if ( updraft _settings _form _changed ) {
if ( window . confirm ( updraftlion . unsavedsettingsbackup ) ) {
jQuery ( '#backupnow_label' ) . val ( '' ) ;
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-backupnow-modal' ) . dialog ( 'open' ) ;
}
} else {
2018-01-26 15:50:15 +01:00
jQuery ( '#backupnow_label' ) . val ( '' ) ;
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-backupnow-modal' ) . dialog ( 'open' ) ;
}
}
var onlythesefileentities = backupnow _whichfiles _checked ( '' ) ;
if ( '' == onlythesefileentities ) {
jQuery ( "#backupnow_includefiles_moreoptions" ) . show ( ) ;
} else {
jQuery ( "#backupnow_includefiles_moreoptions" ) . hide ( ) ;
}
function updraft _migrate _dialog _open ( ) {
jQuery ( '#updraft_migrate_modal_alt' ) . hide ( ) ;
updraft _migrate _modal _default _buttons = { } ;
2018-01-26 15:50:15 +01:00
updraft _migrate _modal _default _buttons [ updraftlion . close ] = function ( ) {
jQuery ( this ) . dialog ( "close" ) ; } ;
2016-11-28 21:52:15 -08:00
jQuery ( "#updraft-migrate-modal" ) . dialog ( "option" , "buttons" , updraft _migrate _modal _default _buttons ) ;
jQuery ( '#updraft-migrate-modal' ) . dialog ( 'open' ) ;
jQuery ( '#updraft_migrate_modal_main' ) . show ( ) ;
}
var updraft _restore _stage = 1 ;
var lastlog _lastmessage = "" ;
var lastlog _lastdata = "" ;
var lastlog _jobs = "" ;
// var lastlog_sdata = { action: 'updraft_ajax', subaction: 'lastlog' };
var updraft _activejobs _nextupdate = ( new Date ) . getTime ( ) + 1000 ;
// Bits: main tab displayed (1); restore dialog open (uses downloader) (2); tab not visible (4)
var updraft _page _is _visible = 1 ;
var updraft _console _focussed _tab = 1 ;
var updraft _settings _form _changed = false ;
window . onbeforeunload = function ( e ) {
if ( updraft _settings _form _changed ) return updraftlion . unsavedsettings ;
}
2018-01-26 15:50:15 +01:00
/ * *
* N . B . This function works on both the UD settings page and elsewhere
*
* @ param { boolean } firstload Check if this is first load
* /
2016-11-28 21:52:15 -08:00
function updraft _check _page _visibility ( firstload ) {
if ( 'hidden' == document [ "visibilityState" ] ) {
updraft _page _is _visible = 0 ;
} else {
updraft _page _is _visible = 1 ;
if ( 1 !== firstload ) { updraft _activejobs _update ( true ) ; }
} ;
}
// See http://caniuse.com/#feat=pagevisibility for compatibility (we don't bother with prefixes)
if ( typeof document . hidden !== "undefined" ) {
2018-01-26 15:50:15 +01:00
document . addEventListener ( 'visibilitychange' , function ( ) {
updraft _check _page _visibility ( 0 ) ; } , false ) ;
2016-11-28 21:52:15 -08:00
}
updraft _check _page _visibility ( 1 ) ;
var updraft _poplog _log _nonce ;
var updraft _poplog _log _pointer = 0 ;
var updraft _poplog _lastscroll = - 1 ;
var updraft _last _forced _jobid = - 1 ;
var updraft _last _forced _resumption = - 1 ;
var updraft _last _forced _when = - 1 ;
var updraft _backupnow _nonce = '' ;
var updraft _activejobslist _backupnownonce _only = 0 ;
var updraft _inpage _hasbegun = 0 ;
2018-01-26 15:50:15 +01:00
/ * *
* Run a backup with show modal with progress .
*
* @ param { Function } success _callback callback function after backup
* @ param { String } onlythisfileentity csv list of file entities to be backed up
* @ param { Array } extradata any extra data to be added
* @ param { Integer } backupnow _nodb Indicate whether the database should be backed up . Valid values : 0 , 1
* @ param { Integer } backupnow _nofiles Indicate whether any files should be backed up . Valid values : 0 , 1
* @ param { Integer } backupnow _nocloud Indicate whether the backup should be uploaded to cloud storage . Valid values : 0 , 1
* @ param { String } label An optional label to be added to a backup
* /
function updraft _backupnow _inpage _go ( success _callback , onlythisfileentity , extradata , backupnow _nodb , backupnow _nofiles , backupnow _nocloud , label ) {
backupnow _nodb = ( 'undefined' === typeof backupnow _nodb ) ? 0 : backupnow _nodb ;
backupnow _nofiles = ( 'undefined' === typeof backupnow _nofiles ) ? 0 : backupnow _nofiles ;
backupnow _nocloud = ( 'undefined' === typeof backupnow _nocloud ) ? 0 : backupnow _nocloud ;
label = ( 'undefined' === typeof label ) ? updraftlion . automaticbackupbeforeupdate : label ;
2016-11-28 21:52:15 -08:00
// N.B. This function should never be called on the UpdraftPlus settings page - it is assumed we are elsewhere. So, it is safe to fake the console-focussing parameter.
updraft _console _focussed _tab = 1 ;
updraft _inpage _success _callback = success _callback ;
var updraft _inpage _modal _buttons = { } ;
2018-01-26 15:50:15 +01:00
var inpage _modal _exists = jQuery ( '#updraft-backupnow-inpage-modal' ) . length ;
if ( inpage _modal _exists ) {
jQuery ( '#updraft-backupnow-inpage-modal' ) . dialog ( 'option' , 'buttons' , updraft _inpage _modal _buttons ) ;
}
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft_inpage_prebackup' ) . hide ( ) ;
2018-01-26 15:50:15 +01:00
if ( inpage _modal _exists ) {
jQuery ( '#updraft-backupnow-inpage-modal' ) . dialog ( 'open' ) ;
}
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft_inpage_backup' ) . show ( ) ;
updraft _activejobslist _backupnownonce _only = 1 ;
updraft _inpage _hasbegun = 0 ;
2018-01-26 15:50:15 +01:00
updraft _backupnow _go ( backupnow _nodb , backupnow _nofiles , backupnow _nocloud , onlythisfileentity , extradata , label , '' ) ;
2016-11-28 21:52:15 -08:00
}
function updraft _activejobs _update ( force ) {
var timenow = ( new Date ) . getTime ( ) ;
if ( false == force && timenow < updraft _activejobs _nextupdate ) { return ; }
updraft _activejobs _nextupdate = timenow + 5500 ;
var downloaders = '' ;
2018-01-26 15:50:15 +01:00
jQuery ( '.ud_downloadstatus .updraftplus_downloader, #ud_downloadstatus2 .updraftplus_downloader' ) . each ( function ( x , y ) {
2016-11-28 21:52:15 -08:00
var dat = jQuery ( y ) . data ( 'downloaderfor' ) ;
if ( typeof dat == 'object' ) {
if ( downloaders != '' ) { downloaders = downloaders + ':' ; }
downloaders = downloaders + dat . base + ',' + dat . nonce + ',' + dat . what + ',' + dat . index ;
}
} ) ;
var gdata = {
downloaders : downloaders
}
try {
if ( jQuery ( "#updraft-poplog" ) . dialog ( "isOpen" ) ) {
gdata . log _fetch = 1 ;
gdata . log _nonce = updraft _poplog _log _nonce ;
gdata . log _pointer = updraft _poplog _log _pointer
}
} catch ( err ) {
console . log ( err ) ;
}
if ( updraft _activejobslist _backupnownonce _only && typeof updraft _backupnow _nonce !== 'undefined' && updraft _backupnow _nonce != '' ) {
gdata . thisjobonly = updraft _backupnow _nonce ;
}
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'activejobs_list' , gdata , function ( response ) {
try {
resp = ud _parse _json ( response ) ;
// if (repeat) { setTimeout(function(){updraft_activejobs_update(true);}, nexttimer);}
2016-11-28 21:52:15 -08:00
if ( resp . hasOwnProperty ( 'l' ) ) {
if ( resp . l ) {
jQuery ( '#updraft_lastlogmessagerow' ) . show ( ) ;
jQuery ( '#updraft_lastlogcontainer' ) . html ( resp . l ) ;
} else {
jQuery ( '#updraft_lastlogmessagerow' ) . hide ( ) ;
jQuery ( '#updraft_lastlogcontainer' ) . html ( '(' + updraftlion . nothing _yet _logged + ')' ) ;
}
}
var lastactivity = - 1 ;
jQuery ( '#updraft_activejobs' ) . html ( resp . j ) ;
jQuery ( '#updraft_activejobs .updraft_jobtimings' ) . each ( function ( ind , element ) {
var $el = jQuery ( element ) ;
// lastactivity, nextresumption, nextresumptionafter
if ( $el . data ( 'lastactivity' ) && $el . data ( 'jobid' ) ) {
var jobid = $el . data ( 'jobid' ) ;
var new _lastactivity = $el . data ( 'lastactivity' ) ;
if ( lastactivity == - 1 || new _lastactivity < lastactivity ) { lastactivity = new _lastactivity ; }
var nextresumptionafter = $el . data ( 'nextresumptionafter' ) ;
var nextresumption = $el . data ( 'nextresumption' ) ;
2018-01-26 15:50:15 +01:00
// console.log("Job ID: "+jobid+", Next resumption: "+nextresumption+", Next resumption after: "+nextresumptionafter+", Last activity: "+new_lastactivity);
2016-11-28 21:52:15 -08:00
// Milliseconds
timenow = ( new Date ) . getTime ( ) ;
if ( new _lastactivity > 50 && nextresumption > 0 && nextresumptionafter < - 30 && timenow > updraft _last _forced _when + 100000 && ( updraft _last _forced _jobid != jobid || nextresumption != updraft _last _forced _resumption ) ) {
updraft _last _forced _resumption = nextresumption ;
updraft _last _forced _jobid = jobid ;
updraft _last _forced _when = timenow ;
console . log ( 'UpdraftPlus: force resumption: job_id=' + jobid + ', resumption=' + nextresumption ) ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'forcescheduledresumption' , {
2016-11-28 21:52:15 -08:00
resumption : nextresumption ,
job _id : jobid
} , function ( response ) {
console . log ( response ) ;
2018-01-26 15:50:15 +01:00
} , { json _parse : false , alert _on _error : false } ) ;
2016-11-28 21:52:15 -08:00
}
}
} ) ;
timenow = ( new Date ) . getTime ( ) ;
updraft _activejobs _nextupdate = timenow + 180000 ;
// More rapid updates needed if a) we are on the main console, or b) a downloader is open (which can only happen on the restore console)
if ( updraft _page _is _visible == 1 && ( 1 == updraft _console _focussed _tab || ( 2 == updraft _console _focussed _tab && downloaders != '' ) ) ) {
if ( lastactivity > - 1 ) {
if ( lastactivity < 5 ) {
2018-01-26 15:50:15 +01:00
updraft _activejobs _nextupdate = timenow + 1750 ;
2016-11-28 21:52:15 -08:00
} else {
2018-01-26 15:50:15 +01:00
updraft _activejobs _nextupdate = timenow + 5000 ;
2016-11-28 21:52:15 -08:00
}
} else if ( lastlog _lastdata == response ) {
2018-01-26 15:50:15 +01:00
updraft _activejobs _nextupdate = timenow + 7500 ;
2016-11-28 21:52:15 -08:00
} else {
2018-01-26 15:50:15 +01:00
updraft _activejobs _nextupdate = timenow + 1750 ;
2016-11-28 21:52:15 -08:00
}
}
lastlog _lastdata = response ;
if ( resp . j != null && resp . j != '' ) {
jQuery ( '#updraft_activejobsrow' ) . show ( ) ;
if ( gdata . hasOwnProperty ( 'thisjobonly' ) && ! updraft _inpage _hasbegun && jQuery ( '#updraft-jobid-' + gdata . thisjobonly ) . length ) {
updraft _inpage _hasbegun = 1 ;
console . log ( 'UpdraftPlus: the start of the requested backup job has been detected' ) ;
} else if ( ! updraft _inpage _hasbegun && updraft _activejobslist _backupnownonce _only && jQuery ( '.updraft_jobtimings.isautobackup' ) . length ) {
autobackup _nonce = jQuery ( '.updraft_jobtimings.isautobackup' ) . first ( ) . data ( 'jobid' ) ;
if ( autobackup _nonce ) {
updraft _inpage _hasbegun = 1 ;
updraft _backupnow _nonce = autobackup _nonce ;
gdata . thisjobonly = autobackup _nonce ;
console . log ( 'UpdraftPlus: the start of the requested backup job has been detected; id: ' + autobackup _nonce ) ;
}
} else if ( updraft _inpage _hasbegun == 1 && jQuery ( '#updraft-jobid-' + gdata . thisjobonly + '.updraft_finished' ) . length ) {
// This block used to be a straightforward 'if'... switching to 'else if' ensures that it cannot fire on the same run. (If the backup hasn't started, it may be detected as finished before to it began, on an overloaded server if there's a race).
// Don't reset to 0 - this will cause the 'began' event to be detected again
updraft _inpage _hasbegun = 2 ;
2018-01-26 15:50:15 +01:00
// var updraft_inpage_modal_buttons = {};
// updraft_inpage_modal_buttons[updraftlion.close] = function() {
// jQuery(this).dialog("close");
// };
// jQuery('#updraft-backupnow-inpage-modal').dialog('option', 'buttons', updraft_inpage_modal_buttons);
2016-11-28 21:52:15 -08:00
console . log ( 'UpdraftPlus: the end of the requested backup job has been detected' ) ;
if ( typeof updraft _inpage _success _callback !== 'undefined' && updraft _inpage _success _callback != '' ) {
// Move on to next page
updraft _inpage _success _callback . call ( false ) ;
} else {
jQuery ( '#updraft-backupnow-inpage-modal' ) . dialog ( 'close' ) ;
}
}
if ( '' == lastlog _jobs ) {
2018-01-26 15:50:15 +01:00
setTimeout ( function ( ) {
jQuery ( '#updraft_backup_started' ) . slideUp ( ) ; } , 3500 ) ;
2016-11-28 21:52:15 -08:00
}
} else {
if ( ! jQuery ( '#updraft_activejobsrow' ) . is ( ':hidden' ) ) {
// Backup has now apparently finished - hide the row. If using this for detecting a finished job, be aware that it may never have shown in the first place - so you'll need more than this.
if ( typeof lastbackup _laststatus != 'undefined' ) { updraft _showlastbackup ( ) ; }
jQuery ( '#updraft_activejobsrow' ) . hide ( ) ;
}
}
lastlog _jobs = resp . j ;
// Download status
if ( resp . ds != null && resp . ds != '' ) {
2018-01-26 15:50:15 +01:00
jQuery ( resp . ds ) . each ( function ( x , dstatus ) {
2016-11-28 21:52:15 -08:00
if ( dstatus . base != '' ) {
updraft _downloader _status _update ( dstatus . base , dstatus . timestamp , dstatus . what , dstatus . findex , dstatus , response ) ;
}
} ) ;
}
if ( resp . u != null && resp . u != '' && jQuery ( "#updraft-poplog" ) . dialog ( "isOpen" ) ) {
var log _append _array = resp . u ;
if ( log _append _array . nonce == updraft _poplog _log _nonce ) {
updraft _poplog _log _pointer = log _append _array . pointer ;
2018-01-26 15:50:15 +01:00
if ( log _append _array . log != null && log _append _array . log != '' ) {
2016-11-28 21:52:15 -08:00
var oldscroll = jQuery ( '#updraft-poplog' ) . scrollTop ( ) ;
2018-01-26 15:50:15 +01:00
jQuery ( '#updraft-poplog-content' ) . append ( log _append _array . log ) ;
2016-11-28 21:52:15 -08:00
if ( updraft _poplog _lastscroll == oldscroll || updraft _poplog _lastscroll == - 1 ) {
jQuery ( '#updraft-poplog' ) . scrollTop ( jQuery ( '#updraft-poplog-content' ) . prop ( "scrollHeight" ) ) ;
updraft _poplog _lastscroll = jQuery ( '#updraft-poplog' ) . scrollTop ( ) ;
}
}
}
}
2018-01-26 15:50:15 +01:00
} catch ( err ) {
2016-11-28 21:52:15 -08:00
console . log ( updraftlion . unexpectedresponse + ' ' + response ) ;
console . log ( err ) ;
}
2018-01-26 15:50:15 +01:00
} , { json _parse : false , type : 'GET' } ) ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
/ * *
* Opens a dialog window showing the requested ( or latest ) log file , plus an option to download it
*
* @ param { string } backup _nonce - the nonce of the log to display , or empty for the latest one
* /
function updraft _popuplog ( backup _nonce ) {
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
var loading _message = updraftlion . loading _log _file ;
if ( backup _nonce ) { loading _message += ' (log.' + backup _nonce + '.txt)' ; }
jQuery ( '#updraft-poplog' ) . dialog ( "option" , "title" , loading _message ) ;
jQuery ( '#updraft-poplog-content' ) . html ( '<em>' + loading _message + ' ...</em> ' ) ;
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-poplog' ) . dialog ( "open" ) ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'get_log' , backup _nonce , function ( resp ) {
2016-11-28 21:52:15 -08:00
updraft _poplog _log _pointer = resp . pointer ;
updraft _poplog _log _nonce = resp . nonce ;
var download _url = '?page=updraftplus&action=downloadlog&force_download=1&updraftplus_backup_nonce=' + resp . nonce ;
2018-01-26 15:50:15 +01:00
jQuery ( '#updraft-poplog-content' ) . html ( resp . log ) ;
2016-11-28 21:52:15 -08:00
var log _popup _buttons = { } ;
2018-01-26 15:50:15 +01:00
log _popup _buttons [ updraftlion . downloadlogfile ] = function ( ) {
window . location . href = download _url ; } ;
log _popup _buttons [ updraftlion . close ] = function ( ) {
jQuery ( this ) . dialog ( "close" ) ; } ;
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
// Set the dialog buttons: Download log, Close log
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-poplog' ) . dialog ( "option" , "buttons" , log _popup _buttons ) ;
jQuery ( '#updraft-poplog' ) . dialog ( "option" , "title" , 'log.' + resp . nonce + '.txt' ) ;
updraft _poplog _lastscroll = - 1 ;
2018-01-26 15:50:15 +01:00
} , { type : 'GET' , timeout : 60000 , error _callback : function ( response , status , error _code ) {
var msg = ( status == error _code ) ? error _code : error _code + " (" + status + ")" ;
jQuery ( '#updraft-poplog-content' ) . append ( msg ) ;
console . log ( response ) ;
} } ) ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
function updraft _showlastbackup ( ) {
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'get_fragment' , 'last_backup_html' , function ( resp ) {
response = resp . output ;
2016-11-28 21:52:15 -08:00
if ( lastbackup _laststatus == response ) {
2018-01-26 15:50:15 +01:00
setTimeout ( function ( ) {
updraft _showlastbackup ( ) ; } , 7000 ) ;
2016-11-28 21:52:15 -08:00
} else {
jQuery ( '#updraft_last_backup' ) . html ( response ) ;
}
lastbackup _laststatus = response ;
2018-01-26 15:50:15 +01:00
} , { type : 'GET' } ) ;
2016-11-28 21:52:15 -08:00
}
var updraft _historytimer = 0 ;
var calculated _diskspace = 0 ;
var updraft _historytimer _notbefore = 0 ;
var updraft _history _lastchecksum = false ;
function updraft _historytimertoggle ( forceon ) {
if ( ! updraft _historytimer || forceon == 1 ) {
updraft _updatehistory ( 0 , 0 ) ;
2018-01-26 15:50:15 +01:00
updraft _historytimer = setInterval ( function ( ) {
updraft _updatehistory ( 0 , 0 ) ; } , 30000 ) ;
2016-11-28 21:52:15 -08:00
if ( ! calculated _diskspace ) {
updraftplus _diskspace ( ) ;
2018-01-26 15:50:15 +01:00
calculated _diskspace = 1 ;
2016-11-28 21:52:15 -08:00
}
} else {
clearTimeout ( updraft _historytimer ) ;
updraft _historytimer = 0 ;
}
}
function updraft _updatehistory ( rescan , remotescan ) {
var unixtime = Math . round ( new Date ( ) . getTime ( ) / 1000 ) ;
if ( 1 == rescan || 1 == remotescan ) {
updraft _historytimer _notbefore = unixtime + 30 ;
} else {
if ( unixtime < updraft _historytimer _notbefore ) {
console . log ( "Update history skipped: " + unixtime . toString ( ) + " < " + updraft _historytimer _notbefore . toString ( ) ) ;
return ;
}
}
if ( rescan == 1 ) {
if ( remotescan == 1 ) {
updraft _history _lastchecksum = false ;
jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups' ) . html ( '<p style="text-align:center;"><em>' + updraftlion . rescanningremote + '</em></p>' ) ;
} else {
updraft _history _lastchecksum = false ;
jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups' ) . html ( '<p style="text-align:center;"><em>' + updraftlion . rescanning + '</em></p>' ) ;
}
}
2018-01-26 15:50:15 +01:00
var what _op = remotescan ? 'remotescan' : ( rescan ? 'rescan' : false ) ;
updraft _send _command ( 'rescan' , what _op , function ( resp ) {
if ( resp . hasOwnProperty ( 'logs_exist' ) && resp . logs _exist ) {
// Show the "most recently modified log" link, in case it was previously hidden (if there were no logs until now)
jQuery ( '#updraft_lastlogmessagerow .updraft-log-link' ) . show ( ) ;
}
if ( resp . hasOwnProperty ( 'migrate_modal' ) && resp . migrate _modal ) {
jQuery ( '#updraft_migrate_modal_main' ) . replaceWith ( resp . migrate _modal ) ;
}
if ( resp . n != null ) { jQuery ( '#updraft-navtab-backups' ) . html ( resp . n ) ; }
if ( resp . t != null ) {
if ( resp . cksum != null ) {
if ( resp . cksum == updraft _history _lastchecksum ) {
// Avoid unnecessarily refreshing the HTML if the data is the same. This helps avoid resetting the DOM (annoying when debugging), and keeps user row selections.
return ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
updraft _history _lastchecksum = resp . cksum ;
}
jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups' ) . html ( resp . t ) ;
if ( resp . data ) {
console . log ( resp . data ) ;
2016-11-28 21:52:15 -08:00
}
}
} ) ;
}
var updraft _interval _week _val = false ;
var updraft _interval _month _val = false ;
function updraft _intervals _monthly _or _not ( selector _id , now _showing ) {
var selector = '#updraft-navtab-settings-content #' + selector _id ;
var current _length = jQuery ( selector + ' option' ) . length ;
var is _monthly = ( 'monthly' == now _showing ) ? true : false ;
var existing _is _monthly = false ;
if ( current _length > 10 ) { existing _is _monthly = true ; }
if ( ! is _monthly && ! existing _is _monthly ) {
return ;
}
if ( is _monthly && existing _is _monthly ) {
if ( 'monthly' == now _showing ) {
// existing_is_monthly does not mean the same as now_showing=='monthly'. existing_is_monthly refers to the drop-down, not whether the drop-down is being displayed. We may need to add these words back.
jQuery ( '.updraft_monthly_extra_words_' + selector _id ) . remove ( ) ;
jQuery ( selector ) . before ( '<span class="updraft_monthly_extra_words_' + selector _id + '">' + updraftlion . day + ' </span>' ) . after ( '<span class="updraft_monthly_extra_words_' + selector _id + '"> ' + updraftlion . inthemonth + ' </span>' ) ;
}
return ;
}
jQuery ( '.updraft_monthly_extra_words_' + selector _id ) . remove ( ) ;
if ( is _monthly ) {
// Save the old value
updraft _interval _week _val = jQuery ( selector + ' option:selected' ) . val ( ) ;
jQuery ( selector ) . html ( updraftlion . mdayselector ) . before ( '<span class="updraft_monthly_extra_words_' + selector _id + '">' + updraftlion . day + ' </span>' ) . after ( '<span class="updraft_monthly_extra_words_' + selector _id + '"> ' + updraftlion . inthemonth + ' </span>' ) ;
var select _mday = ( updraft _interval _month _val === false ) ? 1 : updraft _interval _month _val ;
// Convert from day of the month (ordinal) to option index (starts at 0)
select _mday = select _mday - 1 ;
jQuery ( selector + " option:eq(" + select _mday + ")" ) . prop ( 'selected' , true ) ;
} else {
// Save the old value
updraft _interval _month _val = jQuery ( selector + ' option:selected' ) . val ( ) ;
jQuery ( selector ) . html ( updraftlion . dayselector ) ;
var select _day = ( updraft _interval _week _val === false ) ? 1 : updraft _interval _week _val ;
jQuery ( selector + " option:eq(" + select _day + ")" ) . prop ( 'selected' , true ) ;
}
}
function updraft _check _same _times ( ) {
var dbmanual = 0 ;
var file _interval = jQuery ( '#updraft-navtab-settings-content .updraft_interval' ) . val ( ) ;
if ( file _interval == 'manual' ) {
2018-01-26 15:50:15 +01:00
// jQuery('#updraft_files_timings').css('opacity', '0.25');
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-navtab-settings-content .updraft_files_timings' ) . hide ( ) ;
} else {
2018-01-26 15:50:15 +01:00
// jQuery('#updraft_files_timings').css('opacity', 1);
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-navtab-settings-content .updraft_files_timings' ) . show ( ) ;
}
if ( 'weekly' == file _interval || 'fortnightly' == file _interval || 'monthly' == file _interval ) {
updraft _intervals _monthly _or _not ( 'updraft_startday_files' , file _interval ) ;
jQuery ( '#updraft-navtab-settings-content #updraft_startday_files' ) . show ( ) ;
} else {
jQuery ( '.updraft_monthly_extra_words_updraft_startday_files' ) . remove ( ) ;
jQuery ( '#updraft-navtab-settings-content #updraft_startday_files' ) . hide ( ) ;
}
var db _interval = jQuery ( '#updraft-navtab-settings-content .updraft_interval_database' ) . val ( ) ;
if ( db _interval == 'manual' ) {
dbmanual = 1 ;
2018-01-26 15:50:15 +01:00
// jQuery('#updraft_db_timings').css('opacity', '0.25');
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-navtab-settings-content .updraft_db_timings' ) . hide ( ) ;
}
if ( 'weekly' == db _interval || 'fortnightly' == db _interval || 'monthly' == db _interval ) {
updraft _intervals _monthly _or _not ( 'updraft_startday_db' , db _interval ) ;
jQuery ( '#updraft-navtab-settings-content #updraft_startday_db' ) . show ( ) ;
} else {
jQuery ( '.updraft_monthly_extra_words_updraft_startday_db' ) . remove ( ) ;
jQuery ( '#updraft-navtab-settings-content #updraft_startday_db' ) . hide ( ) ;
}
if ( db _interval == file _interval ) {
2018-01-26 15:50:15 +01:00
// jQuery('#updraft_db_timings').css('opacity','0.25');
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-navtab-settings-content .updraft_db_timings' ) . hide ( ) ;
2018-01-26 15:50:15 +01:00
// jQuery('#updraft_same_schedules_message').show();
2016-11-28 21:52:15 -08:00
if ( 0 == dbmanual ) {
jQuery ( '#updraft-navtab-settings-content .updraft_same_schedules_message' ) . show ( ) ;
} else {
jQuery ( '#updraft-navtab-settings-content .updraft_same_schedules_message' ) . hide ( ) ;
}
} else {
jQuery ( '#updraft-navtab-settings-content .updraft_same_schedules_message' ) . hide ( ) ;
if ( 0 == dbmanual ) {
2018-01-26 15:50:15 +01:00
// jQuery('#updraft_db_timings').css('opacity', '1');
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-navtab-settings-content .updraft_db_timings' ) . show ( ) ;
}
}
}
// Visit the site in the background every 3.5 minutes - ensures that backups can progress if you've got the UD settings page open
2018-01-26 15:50:15 +01:00
if ( 'undefined' !== typeof updraft _siteurl ) {
setInterval ( function ( ) {
jQuery . get ( updraft _siteurl + '/wp-cron.php' ) ; } , 210000 ) ;
}
2016-11-28 21:52:15 -08:00
function updraft _activejobs _delete ( jobid ) {
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'activejobs_delete' , jobid , function ( resp ) {
if ( resp . ok == 'Y' ) {
jQuery ( '#updraft-jobid-' + jobid ) . html ( resp . m ) . fadeOut ( 'slow' ) . remove ( ) ;
} else if ( 'N' == resp . ok ) {
alert ( resp . m ) ;
} else {
alert ( updraftlion . unexpectedresponse ) ;
console . log ( resp ) ;
2016-11-28 21:52:15 -08:00
}
} ) ;
}
function updraftplus _diskspace _entity ( key ) {
jQuery ( '#updraft_diskspaceused_' + key ) . html ( '<em>' + updraftlion . calculating + '</em>' ) ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'get_fragment' , { fragment : 'disk_usage' , data : key } , function ( response ) {
jQuery ( '#updraft_diskspaceused_' + key ) . html ( response . output ) ;
} , { type : 'GET' } ) ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
/ * *
* Open a modal with content fetched from an iframe
*
* @ param { String } getwhat - the subaction parameter to pass to UD ' s AJAX handler
* @ param { String } title - the title for the modal
* /
2016-11-28 21:52:15 -08:00
function updraft _iframe _modal ( getwhat , title ) {
2018-01-26 15:50:15 +01:00
var width = 780 ;
var height = 500 ;
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-iframe-modal-innards' ) . html ( '<iframe width="100%" height="430px" src="' + ajaxurl + '?action=updraft_ajax&subaction=' + getwhat + '&nonce=' + updraft _credentialtest _nonce + '"></iframe>' ) ;
jQuery ( '#updraft-iframe-modal' ) . dialog ( 'option' , 'title' , title ) . dialog ( 'option' , 'width' , width ) . dialog ( 'option' , 'height' , height ) . dialog ( 'open' ) ;
}
function updraft _html _modal ( showwhat , title , width , height ) {
jQuery ( '#updraft-iframe-modal-innards' ) . html ( showwhat ) ;
var updraft _html _modal _buttons = { } ;
if ( width < 450 ) {
2018-01-26 15:50:15 +01:00
updraft _html _modal _buttons [ updraftlion . close ] = function ( ) {
jQuery ( this ) . dialog ( "close" ) ; } ;
2016-11-28 21:52:15 -08:00
}
jQuery ( '#updraft-iframe-modal' ) . dialog ( 'option' , 'title' , title ) . dialog ( 'option' , 'width' , width ) . dialog ( 'option' , 'height' , height ) . dialog ( 'option' , 'buttons' , updraft _html _modal _buttons ) . dialog ( 'open' ) ;
}
function updraftplus _diskspace ( ) {
jQuery ( '#updraft-navtab-backups-content .updraft_diskspaceused' ) . html ( '<em>' + updraftlion . calculating + '</em>' ) ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'get_fragment' , { fragment : 'disk_usage' , data : 'updraft' } , function ( response ) {
jQuery ( '#updraft-navtab-backups-content .updraft_diskspaceused' ) . html ( response . output ) ;
} , { type : 'GET' } ) ;
2016-11-28 21:52:15 -08:00
}
var lastlog _lastmessage = "" ;
function updraftplus _deletefromserver ( timestamp , type , findex ) {
if ( ! findex ) findex = 0 ;
var pdata = {
stage : 'delete' ,
timestamp : timestamp ,
type : type ,
2018-01-26 15:50:15 +01:00
findex : findex
2016-11-28 21:52:15 -08:00
} ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'updraft_download_backup' , pdata , null , { action : 'updraft_download_backup' , nonce : updraft _download _nonce , nonce _key : '_wpnonce' } ) ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
2016-11-28 21:52:15 -08:00
function updraftplus _downloadstage2 ( timestamp , type , findex ) {
2018-01-26 15:50:15 +01:00
location . href = ajaxurl + '?_wpnonce=' + updraft _download _nonce + '×tamp=' + timestamp + '&type=' + type + '&stage=2&findex=' + findex + '&action=updraft_download_backup' ;
}
function updraftplus _show _contents ( timestamp , type , findex ) {
var modal _content = '<div id="updraft_zip_files_container" class="hidden-in-updraftcentral" style="clear:left;"><div id="updraft_zip_info_container"><p><span id="updraft_zip_path_text">' + updraftlion . zip _file _contents _info + '</span> - <span id="updraft_zip_size_text"></span></p>' + updraftlion . browse _download _link + '</div><div id="updraft_zip_files_jstree_container"><input type="search" id="zip_files_jstree_search" name="zip_files_jstree_search" placeholder="' + updraftlion . search + '"><div id="updraft_zip_files_jstree"></div></div></div>' ;
updraft _html _modal ( modal _content , updraftlion . zip _file _contents , 780 , 500 ) ;
zip _files _jstree ( 'zipbrowser' , timestamp , type , findex ) ;
}
/ * *
* Creates the jstree and makes a call to the backend to dynamically get the tree nodes
*
* @ param { string } entity Entity for the jstree
* @ param { integer } timestamp Timestamp of the jstree
* @ param { string } type Type of file to display in the JS tree
* @ param { array } findex Index of Zip
* /
function zip _files _jstree ( entity , timestamp , type , findex ) {
jQuery ( '#updraft_zip_files_jstree' ) . jstree ( {
"core" : {
"multiple" : false ,
"data" : function ( nodeid , callback ) {
updraft _send _command ( 'get_jstree_directory_nodes' , { entity : entity , node : nodeid , timestamp : timestamp , type : type , findex : findex } , function ( response ) {
if ( response . hasOwnProperty ( 'error' ) ) {
alert ( response . error ) ;
} else {
callback . call ( this , response . nodes ) ;
}
} ) ;
} ,
"error" : function ( error ) {
alert ( error ) ;
console . log ( error ) ;
} ,
} ,
"search" : {
"show_only_matches" : true
} ,
"plugins" : [ "search" , "sort" ] ,
} ) ;
// Update modal title once tree loads
jQuery ( '#updraft_zip_files_jstree' ) . on ( 'ready.jstree' , function ( e , data ) {
jQuery ( '#updraft-iframe-modal' ) . dialog ( 'option' , 'title' , updraftlion . zip _file _contents + ': ' + data . instance . get _node ( '#' ) . children [ 0 ] )
} ) ;
// Search function for jstree, this will hide nodes that don't match the search
var timeout = false ;
jQuery ( '#zip_files_jstree_search' ) . keyup ( function ( ) {
if ( timeout ) { clearTimeout ( timeout ) ; }
timeout = setTimeout ( function ( ) {
var value = jQuery ( '#zip_files_jstree_search' ) . val ( ) ;
jQuery ( '#updraft_zip_files_jstree' ) . jstree ( true ) . search ( value ) ;
} , 250 ) ;
} ) ;
// Detect change on the tree and update the input that has been marked as editing
jQuery ( '#updraft_zip_files_jstree' ) . on ( "changed.jstree" , function ( e , data ) {
jQuery ( '#updraft_zip_path_text' ) . text ( data . node . li _attr . path ) ;
if ( data . node . li _attr . size ) {
jQuery ( '#updraft_zip_size_text' ) . text ( data . node . li _attr . size ) ;
jQuery ( '#updraft_zip_download_item' ) . show ( ) ;
} else {
jQuery ( '#updraft_zip_size_text' ) . text ( '' ) ;
jQuery ( '#updraft_zip_download_item' ) . hide ( ) ;
}
} ) ;
jQuery ( '#updraft_zip_download_item' ) . click ( function ( event ) {
event . preventDefault ( ) ;
var path = jQuery ( '#updraft_zip_path_text' ) . text ( ) ;
updraft _send _command ( 'get_zipfile_download' , { path : path , timestamp : timestamp , type : type , findex : findex } , function ( response ) {
if ( response . hasOwnProperty ( 'error' ) ) {
alert ( response . error ) ;
} else if ( response . hasOwnProperty ( 'path' ) ) {
location . href = ajaxurl + '?_wpnonce=' + updraft _download _nonce + '×tamp=' + timestamp + '&type=' + type + '&stage=2&findex=' + findex + '&filepath=' + response . path + '&action=updraft_download_backup' ;
} else {
alert ( updraftlion . download _timeout ) ;
}
} ) ;
} ) ;
2016-11-28 21:52:15 -08:00
}
function updraft _downloader ( base , backup _timestamp , what , whicharea , set _contents , prettydate , async ) {
if ( typeof set _contents !== "string" ) set _contents = set _contents . toString ( ) ;
var set _contents = set _contents . split ( ',' ) ;
for ( var i = 0 ; i < set _contents . length ; i ++ ) {
// Create somewhere for the status to be found
var stid = base + backup _timestamp + '_' + what + '_' + set _contents [ i ] ;
var stid _selector = '.' + stid ;
var show _index = parseInt ( set _contents [ i ] ) ; show _index ++ ;
2018-01-26 15:50:15 +01:00
var itext = ( 0 == set _contents [ i ] ) ? '' : ' (' + show _index + ')' ;
2016-11-28 21:52:15 -08:00
if ( ! jQuery ( stid _selector ) . length ) {
var prdate = ( prettydate ) ? prettydate : backup _timestamp ;
jQuery ( whicharea ) . append ( '<div style="clear:left; border: 1px solid; padding: 8px; margin-top: 4px; max-width:840px;" class="' + stid + ' updraftplus_downloader"><button onclick="jQuery(this).parent().fadeOut().remove();" type="button" style="float:right; margin-bottom: 8px;">X</button><strong>' + updraftlion . download + ' ' + what + itext + ' (' + prdate + ')</strong>:<div class="raw">' + updraftlion . begunlooking + '</div><div class="file ' + stid + '_st"><div class="dlfileprogress" style="width: 0;"></div></div></div>' ) ;
2018-01-26 15:50:15 +01:00
jQuery ( stid _selector ) . data ( 'downloaderfor' , { base : base , nonce : backup _timestamp , what : what , index : set _contents [ i ] } ) ;
setTimeout ( function ( ) {
updraft _activejobs _update ( true ) ; } , 1500 ) ;
2016-11-28 21:52:15 -08:00
}
jQuery ( stid _selector ) . data ( 'lasttimebegan' , ( new Date ) . getTime ( ) ) ;
// Now send the actual request to kick it all off
async = async ? true : false ;
// Old-style, from when it was a form
2018-01-26 15:50:15 +01:00
// var data = jQuery('#updraft-navtab-backups-content .uddownloadform_'+what+'_'+backup_timestamp+'_'+set_contents[i]).serialize();
var nonce = jQuery ( '#updraft-navtab-backups-content .uddownloadform_' + what + '_' + backup _timestamp + '_' + set _contents [ i ] ) . data ( 'wp_nonce' ) . toString ( )
2016-11-28 21:52:15 -08:00
var data = {
type : what ,
timestamp : backup _timestamp ,
findex : set _contents [ i ]
} ;
2018-01-26 15:50:15 +01:00
var options = {
action : 'updraft_download_backup' ,
nonce _key : '_wpnonce' ,
nonce : nonce ,
2016-11-28 21:52:15 -08:00
timeout : 10000 ,
2018-01-26 15:50:15 +01:00
async : async
}
updraft _send _command ( 'updraft_download_backup' , data , function ( response ) { } , options ) ;
2016-11-28 21:52:15 -08:00
}
// We don't want the form to submit as that replaces the document
return false ;
}
2018-01-26 15:50:15 +01:00
/ * *
* Parse JSON string , including automatically detecting unwanted extra input and skipping it
*
* @ param { string } json _mix _str - JSON string which need to parse and convert to object
*
* @ throws SyntaxError | String ( including passing on what JSON . parse may throw ) if a parsing error occurs .
*
* @ returns Mixed parsed JSON object . Will only return if parsing is successful ( otherwise , will throw )
* /
function ud _parse _json ( json _mix _str ) {
// Here taking first and last char in variable, because these are used more than once in this function
var first _char = json _mix _str . charAt ( 0 ) ;
var last _char = json _mix _str . charAt ( json _mix _str . length - 1 ) ;
// Just try it - i.e. the 'default' case where things work (which can include extra whitespace/line-feeds, and simple strings, etc.).
try {
var result = JSON . parse ( json _mix _str ) ;
return result ;
} catch ( e ) {
console . log ( "UpdraftPlus: Exception when trying to parse JSON (1) - will attempt to fix/re-parse" ) ;
console . log ( json _mix _str ) ;
}
var json _start _pos = json _mix _str . indexOf ( '{' ) ;
var json _last _pos = json _mix _str . lastIndexOf ( '}' ) ;
// Case where some php notice may be added after or before json string
if ( json _start _pos > - 1 && json _last _pos > - 1 ) {
var json _str = json _mix _str . slice ( json _start _pos , json _last _pos + 1 ) ;
try {
var parsed = JSON . parse ( json _str ) ;
console . log ( "UpdraftPlus: JSON re-parse successful" ) ;
return parsed ;
} catch ( e ) {
console . log ( "UpdraftPlus: Exception when trying to parse JSON (2)" ) ;
// Throw it again, so that our function works just like JSON.parse() in its behaviour.
throw e ;
}
}
throw "UpdraftPlus: could not parse the JSON" ;
}
2016-11-28 21:52:15 -08:00
// Catch HTTP errors if the download status check returns them
2018-01-26 15:50:15 +01:00
jQuery ( document ) . ajaxError ( function ( event , jqxhr , settings , exception ) {
2016-11-28 21:52:15 -08:00
if ( exception == null || exception == '' ) return ;
if ( jqxhr . responseText == null || jqxhr . responseText == '' ) return ;
console . log ( "Error caught by UpdraftPlus ajaxError handler (follows) for " + settings . url ) ;
console . log ( exception ) ;
if ( settings . url . search ( ajaxurl ) == 0 ) {
// TODO subaction=downloadstatus is no longer used. This should be adjusted to the current set-up.
if ( settings . url . search ( 'subaction=downloadstatus' ) >= 0 ) {
var timestamp = settings . url . match ( /timestamp=\d+/ ) ;
var type = settings . url . match ( /type=[a-z]+/ ) ;
var findex = settings . url . match ( /findex=\d+/ ) ;
var base = settings . url . match ( /base=[a-z_]+/ ) ;
findex = ( findex instanceof Array ) ? parseInt ( findex [ 0 ] . substr ( 7 ) ) : 0 ;
type = ( type instanceof Array ) ? type [ 0 ] . substr ( 5 ) : '' ;
base = ( base instanceof Array ) ? base [ 0 ] . substr ( 5 ) : '' ;
timestamp = ( timestamp instanceof Array ) ? parseInt ( timestamp [ 0 ] . substr ( 10 ) ) : 0 ;
if ( '' != base && '' != type && timestamp > 0 ) {
var stid = base + timestamp + '_' + type + '_' + findex ;
jQuery ( '.' + stid + ' .raw' ) . html ( '<strong>' + updraftlion . error + '</strong> ' + updraftlion . servererrorcode ) ;
}
} else if ( settings . url . search ( 'subaction=restore_alldownloaded' ) >= 0 ) {
2018-01-26 15:50:15 +01:00
// var timestamp = settings.url.match(/timestamp=\d+/);
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-restore-modal-stage2a' ) . append ( '<br><strong>' + updraftlion . error + '</strong> ' + updraftlion . servererrorcode + ': ' + exception ) ;
}
}
} ) ;
function updraft _restorer _checkstage2 ( doalert ) {
// How many left?
var stilldownloading = jQuery ( '#ud_downloadstatus2 .file' ) . length ;
if ( stilldownloading > 0 ) {
if ( doalert ) { alert ( updraftlion . stilldownloading ) ; }
return ;
}
// Allow pressing 'Restore' to proceed
jQuery ( '#updraft-restore-modal-stage2a' ) . html ( updraftlion . processing ) ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'restore_alldownloaded' , {
2016-11-28 21:52:15 -08:00
timestamp : jQuery ( '#updraft_restore_timestamp' ) . val ( ) ,
restoreopts : jQuery ( '#updraft_restore_form' ) . serialize ( )
} , function ( data ) {
var info = null ;
jQuery ( '#updraft_restorer_restore_options' ) . val ( '' ) ;
try {
2018-01-26 15:50:15 +01:00
var resp = ud _parse _json ( data ) ;
2016-11-28 21:52:15 -08:00
if ( null == resp ) {
jQuery ( '#updraft-restore-modal-stage2a' ) . html ( updraftlion . emptyresponse ) ;
return ;
}
var report = resp . m ;
if ( resp . w != '' ) {
report = report + "<p><strong>" + updraftlion . warnings + '</strong><br>' + resp . w + "</p>" ;
}
if ( resp . e != '' ) {
report = report + "<p><strong>" + updraftlion . errors + '</strong><br>' + resp . e + "</p>" ;
} else {
updraft _restore _stage = 3 ;
}
if ( resp . hasOwnProperty ( 'i' ) ) {
// Store the information passed back from the backup scan
try {
2018-01-26 15:50:15 +01:00
info = ud _parse _json ( resp . i ) ;
// if (info.hasOwnProperty('multisite') && info.multisite && info.hasOwnProperty('same_url') && info.same_url) {
2016-11-28 21:52:15 -08:00
if ( info . hasOwnProperty ( 'addui' ) ) {
console . log ( "Further UI options are being displayed" ) ;
var addui = info . addui ;
report += '<div id="updraft_restoreoptions_ui" style="clear:left; padding-top:10px;">' + addui + '</div>' ;
if ( typeof JSON == 'object' && typeof JSON . stringify == 'function' ) {
// If possible, remove from the stored info, to prevent passing back potentially large amounts of unwanted data
delete info . addui ;
resp . i = JSON . stringify ( info ) ;
}
}
2018-01-26 15:50:15 +01:00
} catch ( err ) {
2016-11-28 21:52:15 -08:00
console . log ( err ) ;
console . log ( resp ) ;
}
jQuery ( '#updraft_restorer_backup_info' ) . val ( resp . i ) ;
} else {
jQuery ( '#updraft_restorer_backup_info' ) . val ( ) ;
}
jQuery ( '#updraft-restore-modal-stage2a' ) . html ( report ) ;
if ( jQuery ( '#updraft-restore-modal-stage2a .updraft_select2' ) . length > 0 ) {
jQuery ( '#updraft-restore-modal-stage2a .updraft_select2' ) . select2 ( ) ;
}
2018-01-26 15:50:15 +01:00
} catch ( err ) {
2016-11-28 21:52:15 -08:00
console . log ( data ) ;
console . log ( err ) ;
jQuery ( '#updraft-restore-modal-stage2a' ) . text ( updraftlion . jsonnotunderstood + ' ' + updraftlion . errordata + ": " + data ) . html ( ) ;
}
2018-01-26 15:50:15 +01:00
} , { json _parse : false } ) ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
2016-11-28 21:52:15 -08:00
function updraft _downloader _status ( base , nonce , what , findex ) {
2018-01-26 15:50:15 +01:00
// Short-circuit. See previous versions for the old code.
return ;
2016-11-28 21:52:15 -08:00
}
function updraft _downloader _status _update ( base , backup _timestamp , what , findex , resp , response ) {
var stid = base + backup _timestamp + '_' + what + '_' + findex ;
var stid _selector = '.' + stid ;
var cancel _repeat = 0 ;
if ( resp . e != null ) {
jQuery ( stid _selector + ' .raw' ) . html ( '<strong>' + updraftlion . error + '</strong> ' + resp . e ) ;
console . log ( resp ) ;
} else if ( resp . p != null ) {
jQuery ( stid _selector + '_st .dlfileprogress' ) . width ( resp . p + '%' ) ;
2018-01-26 15:50:15 +01:00
// jQuery(stid_selector+'_st .dlsofar').html(Math.round(resp.s/1024));
// jQuery(stid_selector+'_st .dlsize').html(Math.round(resp.t/1024));
2016-11-28 21:52:15 -08:00
// Is a restart appropriate?
// resp.a, if set, indicates that a) the download is incomplete and b) the value is the number of seconds since the file was last modified...
if ( resp . a != null && resp . a > 0 ) {
var timenow = ( new Date ) . getTime ( ) ;
var lasttimebegan = jQuery ( stid _selector ) . data ( 'lasttimebegan' ) ;
// Remember that this is in milliseconds
var sincelastrestart = timenow - lasttimebegan ;
if ( resp . a > 90 && sincelastrestart > 60000 ) {
console . log ( backup _timestamp + " " + what + " " + findex + ": restarting download: file_age=" + resp . a + ", sincelastrestart_ms=" + sincelastrestart ) ;
jQuery ( stid _selector ) . data ( 'lasttimebegan' , ( new Date ) . getTime ( ) ) ;
var $original _button = jQuery ( '#updraft-navtab-backups-content .uddownloadform_' + what + '_' + backup _timestamp + '_' + findex ) ;
var data = {
type : what ,
timestamp : backup _timestamp ,
findex : findex
} ;
2018-01-26 15:50:15 +01:00
var options = {
action : 'updraft_download_backup' ,
nonce _key : '_wpnonce' ,
nonce : $original _button . data ( 'wp_nonce' ) . toString ( ) ,
timeout : 10000
} ;
updraft _send _command ( 'updraft_download_backup' , data , function ( response ) { } , options ) ;
2016-11-28 21:52:15 -08:00
jQuery ( stid _selector ) . data ( 'lasttimebegan' , ( new Date ) . getTime ( ) ) ;
}
}
if ( resp . m != null ) {
2018-01-26 15:50:15 +01:00
if ( resp . p >= 100 && 'udrestoredlstatus_' == base ) {
2016-11-28 21:52:15 -08:00
jQuery ( stid _selector + ' .raw' ) . html ( resp . m ) ;
2018-01-26 15:50:15 +01:00
jQuery ( stid _selector ) . fadeOut ( 'slow' , function ( ) {
jQuery ( this ) . remove ( ) ; updraft _restorer _checkstage2 ( 0 ) ; } ) ;
2016-11-28 21:52:15 -08:00
} else if ( resp . p < 100 || base != 'uddlstatus_' ) {
jQuery ( stid _selector + ' .raw' ) . html ( resp . m ) ;
} else {
2018-01-26 15:50:15 +01:00
var file _ready _actions = updraftlion . fileready + ' ' + updraftlion . actions + ' : \
< button type = "button" onclick = "updraftplus_downloadstage2(\''+backup_timestamp+'\', \''+what+'\', \''+findex+'\')\" > '+updraftlion.downloadtocomputer+' < / b u t t o n > \
< button id = "uddownloaddelete_'+backup_timestamp+'_'+what+'" type = "button" onclick = "updraftplus_deletefromserver(\''+backup_timestamp+'\', \''+what+'\', \''+findex+'\')\" > '+updraftlion.deletefromserver+' < / b u t t o n > ' ;
if ( resp . hasOwnProperty ( 'can_show_contents' ) && resp . can _show _contents ) {
file _ready _actions += ' <button type="button" onclick="updraftplus_show_contents(\'' + backup _timestamp + '\', \'' + what + '\', \'' + findex + '\')\">' + updraftlion . browse _contents + '</button>' ;
}
jQuery ( stid _selector + ' .raw' ) . html ( file _ready _actions ) ;
2016-11-28 21:52:15 -08:00
}
}
2018-01-26 15:50:15 +01:00
// dlstatus_lastlog = response;
2016-11-28 21:52:15 -08:00
} else if ( resp . m != null ) {
jQuery ( stid _selector + ' .raw' ) . html ( resp . m ) ;
} else {
jQuery ( stid _selector + ' .raw' ) . html ( updraftlion . jsonnotunderstood + ' (' + response + ')' ) ;
cancel _repeat = 1 ;
}
return cancel _repeat ;
}
2018-01-26 15:50:15 +01:00
/ * *
* Function that sets up a ajax call to start a backup
*
* @ param { Integer } backupnow _nodb Indicate whether the database should be backed up : valid values are 0 , 1
* @ param { Integer } backupnow _nofiles Indicate whether any files should be backed up : valid values are 0 , 1
* @ param { Integer } backupnow _nocloud Indicate whether the backup should be uploaded to cloud storage : valid values are 0 , 1
* @ param { String } onlythesefileentities A csv list of file entities to be backed up
* @ param { String } onlythesetableentities A csv list of table entities to be backed up
* @ param { Array } extradata any extra data to be added
* @ param { String } label A optional label to be added to a backup
* /
function updraft _backupnow _go ( backupnow _nodb , backupnow _nofiles , backupnow _nocloud , onlythesefileentities , extradata , label , onlythesetableentities ) {
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft_backup_started' ) . html ( '<em>' + updraftlion . requeststart + '</em>' ) . slideDown ( '' ) ;
2018-01-26 15:50:15 +01:00
setTimeout ( function ( ) {
jQuery ( '#updraft_backup_started' ) . fadeOut ( 'slow' ) ; } , 75000 ) ;
2016-11-28 21:52:15 -08:00
var params = {
backupnow _nodb : backupnow _nodb ,
backupnow _nofiles : backupnow _nofiles ,
backupnow _nocloud : backupnow _nocloud ,
backupnow _label : label ,
extradata : extradata
} ;
if ( '' != onlythesefileentities ) {
params . onlythisfileentity = onlythesefileentities ;
}
2018-01-26 15:50:15 +01:00
if ( '' != onlythesetableentities ) {
params . onlythesetableentities = onlythesetableentities ;
}
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'backupnow' , params , function ( resp ) {
jQuery ( '#updraft_backup_started' ) . html ( resp . m ) ;
if ( resp . hasOwnProperty ( 'nonce' ) ) {
// Can't return it from this context
updraft _backupnow _nonce = resp . nonce ;
console . log ( "UpdraftPlus: ID of started job: " + updraft _backupnow _nonce ) ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
setTimeout ( function ( ) {
updraft _activejobs _update ( true ) ; } , 500 ) ;
2016-11-28 21:52:15 -08:00
} ) ;
}
2018-01-26 15:50:15 +01:00
jQuery ( document ) . ready ( function ( $ ) {
// Advanced settings new menu button listeners
2016-11-28 21:52:15 -08:00
$ ( '.expertmode .advanced_settings_container .advanced_tools_button' ) . click ( function ( ) {
advanced _tool _hide ( $ ( this ) . attr ( "id" ) ) ;
} ) ;
function advanced _tool _hide ( show _tool ) {
$ ( '.expertmode .advanced_settings_container .advanced_tools:not(".' + show _tool + '")' ) . hide ( ) ;
$ ( '.expertmode .advanced_settings_container .advanced_tools.' + show _tool ) . fadeIn ( 'slow' ) ;
$ ( '.expertmode .advanced_settings_container .advanced_tools_button:not(#' + show _tool + ')' ) . removeClass ( 'active' ) ;
$ ( '.expertmode .advanced_settings_container .advanced_tools_button#' + show _tool ) . addClass ( 'active' ) ;
}
// https://github.com/select2/select2/issues/1246#issuecomment-71710835
if ( jQuery . ui && jQuery . ui . dialog && jQuery . ui . dialog . prototype . _allowInteraction ) {
var ui _dialog _interaction = jQuery . ui . dialog . prototype . _allowInteraction ;
jQuery . ui . dialog . prototype . _allowInteraction = function ( e ) {
if ( jQuery ( e . target ) . closest ( '.select2-dropdown' ) . length ) return true ;
return ui _dialog _interaction . apply ( this , arguments ) ;
} ;
}
2018-01-26 15:50:15 +01:00
$ ( '#updraftcentral_keys' ) . on ( 'click' , 'a.updraftcentral_keys_show' , function ( e ) {
e . preventDefault ( ) ;
$ ( this ) . remove ( ) ;
$ ( '#updraftcentral_keys_table' ) . slideDown ( ) ;
} ) ;
2016-11-28 21:52:15 -08:00
$ ( '#updraftcentral_keycreate_altmethod_moreinfo_get' ) . click ( function ( e ) {
e . preventDefault ( ) ;
$ ( this ) . remove ( ) ;
$ ( '#updraftcentral_keycreate_altmethod_moreinfo' ) . slideDown ( ) ;
} ) ;
// Update WebDAV URL as user edits
2018-01-26 15:50:15 +01:00
$ ( '#updraft-navtab-settings-content #remote-storage-holder' ) . on ( 'change keyup paste' , '.updraft_webdav_settings' , function ( ) {
2016-11-28 21:52:15 -08:00
var updraft _webdav _settings = [ ] ;
$ ( '.updraft_webdav_settings' ) . each ( function ( index , item ) {
var id = $ ( item ) . attr ( 'id' ) ;
2018-01-26 15:50:15 +01:00
if ( id && 'updraft_webdav_' == id . substring ( 0 , 15 ) ) {
var which _one = id . substring ( 15 ) ;
id _split = which _one . split ( '_' ) ;
which _one = id _split [ 0 ] ;
var instance _id = id _split [ 1 ] ;
if ( 'undefined' == typeof updraft _webdav _settings [ instance _id ] ) updraft _webdav _settings [ instance _id ] = [ ] ;
updraft _webdav _settings [ instance _id ] [ which _one ] = this . value ;
2016-11-28 21:52:15 -08:00
}
} ) ;
2018-01-26 15:50:15 +01:00
2016-11-28 21:52:15 -08:00
var updraft _webdav _url = "" ;
var host = "@" ;
var slash = "/" ;
var colon = ":" ;
var colon _port = ":" ;
2018-01-26 15:50:15 +01:00
for ( var instance _id in updraft _webdav _settings ) {
if ( updraft _webdav _settings [ instance _id ] [ 'host' ] . indexOf ( "@" ) >= 0 || "" === updraft _webdav _settings [ instance _id ] [ 'host' ] ) {
host = "" ;
}
if ( updraft _webdav _settings [ instance _id ] [ 'host' ] . indexOf ( "/" ) >= 0 ) {
$ ( '#updraft_webdav_host_error' ) . show ( ) ;
} else {
$ ( '#updraft_webdav_host_error' ) . hide ( ) ;
}
if ( 0 == updraft _webdav _settings [ instance _id ] [ 'path' ] . indexOf ( "/" ) || "" === updraft _webdav _settings [ instance _id ] [ 'path' ] ) {
slash = "" ;
}
if ( "" === updraft _webdav _settings [ instance _id ] [ 'user' ] || "" === updraft _webdav _settings [ instance _id ] [ 'pass' ] ) {
colon = "" ;
}
if ( "" === updraft _webdav _settings [ instance _id ] [ 'host' ] || "" === updraft _webdav _settings [ instance _id ] [ 'port' ] ) {
colon _port = "" ;
}
updraft _webdav _url = updraft _webdav _settings [ instance _id ] [ 'webdav' ] + updraft _webdav _settings [ instance _id ] [ 'user' ] + colon + updraft _webdav _settings [ instance _id ] [ 'pass' ] + host + encodeURIComponent ( updraft _webdav _settings [ instance _id ] [ 'host' ] ) + colon _port + updraft _webdav _settings [ instance _id ] [ 'port' ] + slash + updraft _webdav _settings [ instance _id ] [ 'path' ] ;
$ ( '#updraft_webdav_url_' + instance _id ) . val ( updraft _webdav _url ) ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
if ( updraft _webdav _settings [ 'host' ] . indexOf ( "/" ) >= 0 ) {
2016-11-28 21:52:15 -08:00
$ ( '#updraft_webdav_host_error' ) . show ( ) ;
} else {
$ ( '#updraft_webdav_host_error' ) . hide ( ) ;
}
2018-01-26 15:50:15 +01:00
if ( 0 == updraft _webdav _settings [ 'path' ] . indexOf ( "/" ) || "" === updraft _webdav _settings [ 'path' ] ) {
2016-11-28 21:52:15 -08:00
slash = "" ;
}
2018-01-26 15:50:15 +01:00
if ( "" === updraft _webdav _settings [ 'user' ] || "" === updraft _webdav _settings [ 'pass' ] ) {
2016-11-28 21:52:15 -08:00
colon = "" ;
}
2018-01-26 15:50:15 +01:00
if ( "" === updraft _webdav _settings [ 'host' ] || "" === updraft _webdav _settings [ 'port' ] ) {
2016-11-28 21:52:15 -08:00
colon _port = "" ;
}
2018-01-26 15:50:15 +01:00
updraft _webdav _url = updraft _webdav _settings [ 'webdav' ] + updraft _webdav _settings [ 'user' ] + colon + encodeURIComponent ( updraft _webdav _settings [ 'pass' ] ) + host + encodeURIComponent ( updraft _webdav _settings [ 'host' ] ) + colon _port + updraft _webdav _settings [ 'port' ] + slash + updraft _webdav _settings [ 'path' ] ;
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
$ ( '#updraft_webdav_url_' + instance _id ) . val ( updraft _webdav _url ) ;
2016-11-28 21:52:15 -08:00
} ) ;
$ ( '#updraft-navtab-backups-content' ) . on ( 'click' , '.updraft_existing_backups .updraft_existing_backups_row' , function ( e ) {
2018-01-26 15:50:15 +01:00
if ( ! e . ctrlKey && ! e . metaKey ) return ;
2016-11-28 21:52:15 -08:00
$ ( this ) . toggleClass ( 'backuprowselected' ) ;
if ( $ ( '#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected' ) . length > 0 ) {
$ ( '#ud_massactions' ) . show ( ) ;
} else {
$ ( '#ud_massactions' ) . hide ( ) ;
}
} ) ;
2018-01-26 15:50:15 +01:00
$ ( '#updraft-navtab-settings-content #remote-storage-holder' ) . on ( 'click' , '.updraftplusmethod a.updraft_add_instance' , function ( e ) {
e . preventDefault ( ) ;
updraft _settings _form _changed = true ;
var method = $ ( this ) . data ( 'method' ) ;
add _new _instance ( method ) ;
} ) ;
$ ( '#updraft-navtab-settings-content #remote-storage-holder' ) . on ( 'click' , '.updraftplusmethod a.updraft_delete_instance' , function ( e ) {
e . preventDefault ( ) ;
updraft _settings _form _changed = true ;
var method = $ ( this ) . data ( 'method' ) ;
var instance _id = $ ( this ) . data ( 'instance_id' ) ;
if ( 1 === $ ( '.' + method + '_updraft_remote_storage_border' ) . length ) {
add _new _instance ( method ) ;
}
$ ( '.' + method + '-' + instance _id ) . hide ( 'slow' , function ( ) {
$ ( this ) . remove ( ) ;
} ) ;
} ) ;
$ ( '#updraft-navtab-settings-content #remote-storage-holder' ) . on ( 'click' , '.updraftplusmethod .updraft_edit_label_instance' , function ( e ) {
$ ( this ) . find ( 'span' ) . hide ( ) ;
$ ( this ) . attr ( 'contentEditable' , true ) . focus ( ) ;
} ) ;
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
$ ( '#updraft-navtab-settings-content #remote-storage-holder' ) . on ( 'keyup' , '.updraftplusmethod .updraft_edit_label_instance' , function ( e ) {
2016-11-28 21:52:15 -08:00
var method = jQuery ( this ) . data ( 'method' ) ;
2018-01-26 15:50:15 +01:00
var instance _id = jQuery ( this ) . data ( 'instance_id' ) ;
var content = jQuery ( this ) . text ( ) ;
$ ( '#updraft_' + method + '_instance_label_' + instance _id ) . val ( content ) ;
} ) ;
$ ( '#updraft-navtab-settings-content #remote-storage-holder' ) . on ( 'blur' , '.updraftplusmethod .updraft_edit_label_instance' , function ( e ) {
$ ( this ) . attr ( 'contentEditable' , false ) ;
$ ( this ) . find ( 'span' ) . show ( ) ;
} ) ;
$ ( '#updraft-navtab-settings-content #remote-storage-holder' ) . on ( 'keypress' , '.updraftplusmethod .updraft_edit_label_instance' , function ( e ) {
if ( 13 === e . which ) {
$ ( this ) . attr ( 'contentEditable' , false ) ;
$ ( this ) . find ( 'span' ) . show ( ) ;
$ ( this ) . blur ( ) ;
}
} ) ;
/ * *
* This method will get the default options and compile a template with them
*
* @ param { string } method - the remote storage name
* @ param { boolean } first _instance - indicates if this is the first instance of this type
* /
function add _new _instance ( method ) {
var template = Handlebars . compile ( updraftlion . remote _storage _templates [ method ] ) ;
var context = updraftlion . remote _storage _options [ method ] [ 'default' ] ;
context [ 'instance_id' ] = 's-' + generate _instance _id ( 32 ) ;
context [ 'instance_enabled' ] = 1 ;
var html = template ( context ) ;
jQuery ( html ) . hide ( ) . insertAfter ( '.' + method + '_add_instance_container:first' ) . show ( 'slow' ) ;
}
/ * *
* This method will return a random instance id string
*
* @ param { integer } length - the length of the string to be generated
*
* @ return string - the instance id
* /
function generate _instance _id ( length ) {
var uuid = '' ;
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' ;
for ( var i = 0 ; i < length ; i ++ ) {
uuid += characters . charAt ( Math . floor ( Math . random ( ) * characters . length ) ) ;
}
return uuid ;
}
jQuery ( '#updraft-navtab-settings-content #remote-storage-holder' ) . on ( "change" , "input[class='updraft_instance_toggle']" , function ( ) {
updraft _settings _form _changed = true ;
if ( jQuery ( this ) . is ( ':checked' ) ) {
jQuery ( this ) . siblings ( 'label' ) . html ( updraftlion . instance _enabled ) ;
} else {
jQuery ( this ) . siblings ( 'label' ) . html ( updraftlion . instance _disabled ) ;
}
} ) ;
jQuery ( '#updraft-navtab-settings-content #remote-storage-holder' ) . on ( 'click' , '.updraftplusmethod button.updraft-test-button' , function ( ) {
var method = jQuery ( this ) . data ( 'method' ) ;
var instance _id = jQuery ( this ) . data ( 'instance_id' ) ;
2016-11-28 21:52:15 -08:00
updraft _remote _storage _test ( method , function ( response , status , data ) {
if ( 'sftp' != method ) { return false ; }
if ( data . hasOwnProperty ( 'scp' ) && data . scp ) {
2018-01-26 15:50:15 +01:00
alert ( updraftlion . settings _test _result . replace ( '%s' , 'SCP' ) + ' ' + response . output ) ;
2016-11-28 21:52:15 -08:00
} else {
2018-01-26 15:50:15 +01:00
alert ( updraftlion . settings _test _result . replace ( '%s' , 'SFTP' ) + ' ' + response . output ) ;
}
if ( response . hasOwnProperty ( 'data' ) ) {
console . log ( response . data ) ;
2016-11-28 21:52:15 -08:00
}
return true ;
2018-01-26 15:50:15 +01:00
} , instance _id ) ;
2016-11-28 21:52:15 -08:00
} ) ;
$ ( '#updraft-navtab-settings-content select.updraft_interval, #updraft-navtab-settings-content select.updraft_interval_database' ) . change ( function ( ) {
updraft _check _same _times ( ) ;
} ) ;
$ ( '#backupnow_includefiles_showmoreoptions' ) . click ( function ( e ) {
e . preventDefault ( ) ;
$ ( '#backupnow_includefiles_moreoptions' ) . toggle ( ) ;
} ) ;
2018-01-26 15:50:15 +01:00
$ ( '#backupnow_database_showmoreoptions' ) . click ( function ( e ) {
e . preventDefault ( ) ;
$ ( '#backupnow_database_moreoptions' ) . toggle ( ) ;
} ) ;
2016-11-28 21:52:15 -08:00
$ ( '#updraft-navtab-backups-content a.updraft_diskspaceused_update' ) . click ( function ( e ) {
e . preventDefault ( ) ;
updraftplus _diskspace ( ) ;
} ) ;
$ ( '#updraft-navtab-backups-content a.updraft_uploader_toggle' ) . click ( function ( e ) {
e . preventDefault ( ) ;
$ ( '#updraft-plupload-modal' ) . slideToggle ( ) ;
} ) ;
$ ( '#updraft-navtab-backups-content a.updraft_rescan_local' ) . click ( function ( e ) {
e . preventDefault ( ) ;
updraft _updatehistory ( 1 , 0 ) ;
} ) ;
$ ( '#updraft-navtab-backups-content a.updraft_rescan_remote' ) . click ( function ( e ) {
e . preventDefault ( ) ;
updraft _updatehistory ( 1 , 1 ) ;
} ) ;
function updraftcentral _keys _setupform ( on _page _load ) {
var is _other = jQuery ( '#updraftcentral_mothership_other' ) . is ( ':checked' ) ? true : false ;
if ( is _other ) {
jQuery ( '#updraftcentral_keycreate_mothership' ) . prop ( 'disabled' , false ) ;
if ( on _page _load ) {
jQuery ( '#updraftcentral_keycreate_mothership_firewalled_container' ) . show ( ) ;
} else {
2018-01-26 15:50:15 +01:00
jQuery ( '.updraftcentral_wizard_self_hosted_stage2' ) . show ( ) ;
2016-11-28 21:52:15 -08:00
jQuery ( '#updraftcentral_keycreate_mothership_firewalled_container' ) . slideDown ( ) ;
jQuery ( '#updraftcentral_keycreate_mothership' ) . focus ( ) ;
}
} else {
jQuery ( '#updraftcentral_keycreate_mothership' ) . prop ( 'disabled' , true ) ;
2018-01-26 15:50:15 +01:00
if ( ! on _page _load ) {
jQuery ( '.updraftcentral_wizard_self_hosted_stage2' ) . hide ( ) ;
updraftcentral _stage2 _go ( ) ;
}
2016-11-28 21:52:15 -08:00
}
}
2018-01-26 15:50:15 +01:00
function updraftcentral _stage2 _go ( ) {
// Reset the error message before we continue
jQuery ( '#updraftcentral_wizard_stage1_error' ) . text ( '' ) ;
var host = '' ;
if ( jQuery ( '#updraftcentral_mothership_updraftpluscom' ) . is ( ':checked' ) ) {
jQuery ( '.updraftcentral_keycreate_description' ) . hide ( ) ;
host = 'updraftplus.com' ;
} else if ( jQuery ( '#updraftcentral_mothership_other' ) . is ( ':checked' ) ) {
jQuery ( '.updraftcentral_keycreate_description' ) . show ( ) ;
var mothership = jQuery ( '#updraftcentral_keycreate_mothership' ) . val ( ) ;
if ( '' == mothership ) {
jQuery ( '#updraftcentral_wizard_stage1_error' ) . text ( updraftlion . updraftcentral _wizard _empty _url ) ;
return ;
}
try {
var url = new URL ( mothership ) ;
host = url . hostname ;
} catch ( e ) {
// Try and grab the host name a different way if it failed because of no URL object (e.g. IE 11).
if ( 'undefined' === typeof URL ) {
host = jQuery ( '<a>' ) . prop ( 'href' , mothership ) . prop ( 'hostname' ) ;
}
if ( ! host || 'undefined' !== typeof URL ) {
jQuery ( '#updraftcentral_wizard_stage1_error' ) . text ( updraftlion . updraftcentral _wizard _invalid _url ) ;
return ;
}
}
}
jQuery ( '#updraftcentral_keycreate_description' ) . val ( host ) ;
jQuery ( '.updraftcentral_wizard_stage1' ) . hide ( ) ;
jQuery ( '.updraftcentral_wizard_stage2' ) . show ( ) ;
}
jQuery ( '#updraftcentral_keys' ) . on ( 'click' , 'input[type="radio"]' , function ( ) {
2016-11-28 21:52:15 -08:00
updraftcentral _keys _setupform ( false ) ;
} ) ;
// Initial setup (for browsers, e.g. Firefox, that remember form selection state but not DOM state, which can leave an inconsistent state)
updraftcentral _keys _setupform ( true ) ;
jQuery ( '#updraftcentral_keys' ) . on ( 'click' , '#updraftcentral_view_log' , function ( e ) {
e . preventDefault ( ) ;
jQuery ( '#updraftcentral_view_log_container' ) . block ( { message : '<div style="margin: 8px; font-size:150%;"><img src="' + updraftlion . ud _url + '/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>' + updraftlion . fetching + '</div>' } ) ;
try {
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'updraftcentral_get_log' , null , function ( response ) {
2016-11-28 21:52:15 -08:00
jQuery ( '#updraftcentral_view_log_container' ) . unblock ( ) ;
2018-01-26 15:50:15 +01:00
if ( response . hasOwnProperty ( 'log_contents' ) ) {
jQuery ( '#updraftcentral_view_log_contents' ) . html ( '<div style="border:1px solid;padding: 2px;max-height: 400px; overflow-y:scroll;">' + response . log _contents + '</div>' ) ;
} else {
console . response ( resp ) ;
}
2016-11-28 21:52:15 -08:00
} ) ;
} catch ( err ) {
jQuery ( '#updraft_central_key' ) . html ( ) ;
console . log ( err ) ;
}
} ) ;
// UpdraftCentral
2018-01-26 15:50:15 +01:00
jQuery ( '#updraftcentral_keys' ) . on ( 'click' , '#updraftcentral_wizard_go' , function ( e ) {
jQuery ( '#updraftcentral_wizard_go' ) . hide ( ) ;
jQuery ( '.updraftcentral_wizard_success' ) . remove ( ) ;
jQuery ( '.create_key_container' ) . show ( ) ;
} ) ;
jQuery ( '#updraftcentral_keys' ) . on ( 'click' , '#updraftcentral_stage1_go' , function ( e ) {
e . preventDefault ( ) ;
jQuery ( '.updraftcentral_wizard_stage2' ) . hide ( ) ;
jQuery ( '.updraftcentral_wizard_stage1' ) . show ( ) ;
} ) ;
jQuery ( '#updraftcentral_keys' ) . on ( 'click' , '#updraftcentral_stage2_go' , function ( e ) {
e . preventDefault ( ) ;
updraftcentral _stage2 _go ( ) ;
} ) ;
2016-11-28 21:52:15 -08:00
jQuery ( '#updraftcentral_keys' ) . on ( 'click' , '#updraftcentral_keycreate_go' , function ( e ) {
e . preventDefault ( ) ;
var is _other = jQuery ( '#updraftcentral_mothership_other' ) . is ( ':checked' ) ? true : false ;
var key _description = jQuery ( '#updraftcentral_keycreate_description' ) . val ( ) ;
var key _size = jQuery ( '#updraftcentral_keycreate_keysize' ) . val ( ) ;
var where _send = '__updraftpluscom' ;
data = {
key _description : key _description ,
key _size : key _size ,
} ;
if ( is _other ) {
where _send = jQuery ( '#updraftcentral_keycreate_mothership' ) . val ( ) ;
if ( where _send . substring ( 0 , 4 ) != 'http' ) {
alert ( updraftlion . enter _mothership _url ) ;
return ;
}
}
data . mothership _firewalled = jQuery ( '#updraftcentral_keycreate_mothership_firewalled' ) . is ( ':checked' ) ? 1 : 0 ;
data . where _send = where _send ;
2018-01-26 15:50:15 +01:00
jQuery ( '.create_key_container' ) . hide ( ) ;
jQuery ( '.updraftcentral_wizard_stage1' ) . show ( ) ;
jQuery ( '.updraftcentral_wizard_stage2' ) . hide ( ) ;
2016-11-28 21:52:15 -08:00
jQuery ( '#updraftcentral_keys' ) . block ( { message : '<div style="margin: 8px; font-size:150%;"><img src="' + updraftlion . ud _url + '/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>' + updraftlion . creating _please _allow + '</div>' } ) ;
try {
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'updraftcentral_create_key' , data , function ( response ) {
2016-11-28 21:52:15 -08:00
jQuery ( '#updraftcentral_keys' ) . unblock ( ) ;
try {
2018-01-26 15:50:15 +01:00
resp = ud _parse _json ( response ) ;
2016-11-28 21:52:15 -08:00
if ( resp . hasOwnProperty ( 'error' ) ) {
alert ( resp . error ) ;
console . log ( resp ) ;
return ;
}
alert ( resp . r ) ;
2018-01-26 15:50:15 +01:00
if ( resp . hasOwnProperty ( 'bundle' ) && resp . hasOwnProperty ( 'keys_guide' ) ) {
jQuery ( '#updraftcentral_keys_content' ) . html ( resp . keys _guide ) ;
jQuery ( '#updraftcentral_keys_content' ) . append ( '<div class="updraftcentral_wizard_success">' + resp . r + '<br><textarea onclick="this.select();" style="width:620px; height:165px; word-wrap:break-word; border: 1px solid #aaa; border-radius: 3px; padding:4px;">' + resp . bundle + '</textarea></div>' ) ;
2016-11-28 21:52:15 -08:00
} else {
console . log ( resp ) ;
}
2018-01-26 15:50:15 +01:00
if ( resp . hasOwnProperty ( 'keys_table' ) ) {
jQuery ( '#updraftcentral_keys_content' ) . append ( resp . keys _table ) ;
}
jQuery ( '#updraftcentral_wizard_go' ) . show ( ) ;
2016-11-28 21:52:15 -08:00
} catch ( err ) {
alert ( updraftlion . unexpectedresponse + ' ' + response ) ;
console . log ( err ) ;
2018-01-26 15:50:15 +01:00
}
} , { json _parse : false } ) ;
2016-11-28 21:52:15 -08:00
} catch ( err ) {
jQuery ( '#updraft_central_key' ) . html ( ) ;
console . log ( err ) ;
}
} ) ;
jQuery ( '#updraftcentral_keys' ) . on ( 'click' , '.updraftcentral_key_delete' , function ( e ) {
e . preventDefault ( ) ;
var key _id = jQuery ( this ) . data ( 'key_id' ) ;
if ( 'undefined' == typeof key _id ) {
console . log ( "UpdraftPlus: .updraftcentral_key_delete clicked, but no key ID found" ) ;
return ;
}
jQuery ( '#updraftcentral_keys' ) . block ( { message : '<div style="margin: 8px; font-size:150%;"><img src="' + updraftlion . ud _url + '/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>' + updraftlion . deleting + '</div>' } ) ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'updraftcentral_delete_key' , { key _id : key _id } , function ( response ) {
2016-11-28 21:52:15 -08:00
jQuery ( '#updraftcentral_keys' ) . unblock ( ) ;
2018-01-26 15:50:15 +01:00
if ( response . hasOwnProperty ( 'keys_table' ) ) {
jQuery ( '#updraftcentral_keys_content' ) . html ( response . keys _table ) ;
2016-11-28 21:52:15 -08:00
}
} ) ;
} ) ;
jQuery ( '#updraft_reset_sid' ) . click ( function ( e ) {
e . preventDefault ( ) ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'reset_site_id' , null , function ( response ) {
jQuery ( '#updraft_show_sid' ) . html ( response ) ;
} , { json _parse : false } ) ;
2016-11-28 21:52:15 -08:00
} ) ;
2018-01-26 15:50:15 +01:00
jQuery ( "#updraft-navtab-settings-content form input:not('.udignorechange'), #updraft-navtab-settings-content form select" ) . change ( function ( e ) {
2016-11-28 21:52:15 -08:00
updraft _settings _form _changed = true ;
} ) ;
jQuery ( "#updraft-navtab-settings-content form input[type='submit']" ) . click ( function ( e ) {
updraft _settings _form _changed = false ;
} ) ;
var bigbutton _width = 180 ;
2018-01-26 15:50:15 +01:00
jQuery ( '.updraft-bigbutton' ) . each ( function ( x , y ) {
2016-11-28 21:52:15 -08:00
var bwid = jQuery ( y ) . width ( ) ;
if ( bwid > bigbutton _width ) bigbutton _width = bwid ;
} ) ;
if ( bigbutton _width > 180 ) jQuery ( '.updraft-bigbutton' ) . width ( bigbutton _width ) ;
2018-01-26 15:50:15 +01:00
// setTimeout(function(){updraft_showlastlog(true);}, 1200);
setInterval ( function ( ) {
updraft _activejobs _update ( false ) ; } , 1250 ) ;
2016-11-28 21:52:15 -08:00
// Prevent profusion of notices
2018-01-26 15:50:15 +01:00
setTimeout ( function ( ) {
jQuery ( '#setting-error-settings_updated' ) . slideUp ( ) ; } , 5000 ) ;
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
jQuery ( '#updraft_restore_db' ) . change ( function ( ) {
2016-11-28 21:52:15 -08:00
if ( jQuery ( '#updraft_restore_db' ) . is ( ':checked' ) ) {
jQuery ( '#updraft_restorer_dboptions' ) . slideDown ( ) ;
} else {
jQuery ( '#updraft_restorer_dboptions' ) . slideUp ( ) ;
}
} ) ;
updraft _check _same _times ( ) ;
var updraft _message _modal _buttons = { } ;
2018-01-26 15:50:15 +01:00
updraft _message _modal _buttons [ updraftlion . close ] = function ( ) {
jQuery ( this ) . dialog ( "close" ) ; } ;
jQuery ( "#updraft-message-modal" ) . dialog ( {
2016-11-28 21:52:15 -08:00
autoOpen : false , height : 350 , width : 520 , modal : true ,
buttons : updraft _message _modal _buttons
} ) ;
var updraft _delete _modal _buttons = { } ;
2018-01-26 15:50:15 +01:00
updraft _delete _modal _buttons [ updraftlion . deletebutton ] = function ( ) {
updraft _remove _backup _sets ( 0 , 0 , 0 , 0 ) ; } ;
2016-11-28 21:52:15 -08:00
function updraft _remove _backup _sets ( deleted _counter , backup _local , backup _remote , backup _sets ) {
jQuery ( '#updraft-delete-waitwarning' ) . slideDown ( ) ;
var deleted _files _counter = deleted _counter ;
var local _deleted = backup _local ;
var remote _deleted = backup _remote ;
var sets _deleted = backup _sets ;
var timestamps = jQuery ( '#updraft_delete_timestamp' ) . val ( ) . split ( ',' ) ;
2018-01-26 15:50:15 +01:00
var form _data = jQuery ( '#updraft_delete_form' ) . serializeArray ( ) ;
var data = { } ;
$ . each ( form _data , function ( ) {
if ( undefined !== data [ this . name ] ) {
if ( ! data [ this . name ] . push ) {
data [ this . name ] = [ data [ this . name ] ] ;
}
data [ this . name ] . push ( this . value || '' ) ;
} else {
data [ this . name ] = this . value || '' ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
} ) ;
data . remote _delete _limit = updraftlion . remote _delete _limit ;
delete data . action ;
delete data . subaction ;
delete data . nonce ;
updraft _send _command ( 'deleteset' , data , function ( resp ) {
if ( ! resp . hasOwnProperty ( 'result' ) || resp . result == null ) { return ; }
if ( resp . result == 'error' ) {
alert ( updraftlion . error + ' ' + resp . message ) ;
} else if ( resp . result == 'continue' ) {
deleted _files _counter = deleted _files _counter + resp . backup _local + resp . backup _remote ;
local _deleted = local _deleted + resp . backup _local ;
remote _deleted = remote _deleted + resp . backup _remote ;
sets _deleted = sets _deleted + resp . backup _sets ;
jQuery ( '#updraft-deleted-files-total' ) . text ( deleted _files _counter + ' ' + updraftlion . remote _files _deleted ) ;
updraft _remove _backup _sets ( deleted _files _counter , local _deleted , remote _deleted , sets _deleted ) ;
} else if ( resp . result == 'success' ) {
jQuery ( '#updraft-deleted-files-total' ) . text ( '' ) ;
jQuery ( '#updraft-delete-waitwarning' ) . slideUp ( ) ;
if ( resp . hasOwnProperty ( 'count_backups' ) ) {
jQuery ( '#updraft-navtab-backups' ) . html ( updraftlion . existing _backups + ' (' + resp . count _backups + ')' ) ;
}
for ( var i = 0 ; i < timestamps . length ; i ++ ) {
var timestamp = timestamps [ i ] ;
jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups_row_' + timestamp ) . slideUp ( ) . remove ( ) ;
}
if ( jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups .updraft_existing_backups_row.backuprowselected' ) . length < 1 ) {
jQuery ( '#ud_massactions' ) . hide ( ) ;
}
updraft _history _lastchecksum = false ;
jQuery ( "#updraft-delete-modal" ) . dialog ( 'close' ) ;
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
local _deleted = local _deleted + resp . backup _local ;
remote _deleted = remote _deleted + resp . backup _remote ;
sets _deleted = sets _deleted + resp . backup _sets ;
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
alert ( resp . set _message + " " + sets _deleted + "\n" + resp . local _message + " " + local _deleted + "\n" + resp . remote _message + " " + remote _deleted ) ;
2016-11-28 21:52:15 -08:00
}
} ) ;
} ;
2018-01-26 15:50:15 +01:00
updraft _delete _modal _buttons [ updraftlion . cancel ] = function ( ) {
jQuery ( this ) . dialog ( "close" ) ; } ;
jQuery ( "#updraft-delete-modal" ) . dialog ( {
autoOpen : false , height : 322 , width : 430 , modal : true ,
2016-11-28 21:52:15 -08:00
buttons : updraft _delete _modal _buttons
} ) ;
var updraft _restore _modal _buttons = { } ;
updraft _restore _modal _buttons [ updraftlion . restore ] = function ( ) {
var anyselected = 0 ;
var whichselected = [ ] ;
// Make a list of what files we want
var already _added _wpcore = 0 ;
var meta _foreign = jQuery ( '#updraft_restore_meta_foreign' ) . val ( ) ;
2018-01-26 15:50:15 +01:00
jQuery ( 'input[name="updraft_restore[]"]' ) . each ( function ( x , y ) {
2016-11-28 21:52:15 -08:00
if ( jQuery ( y ) . is ( ':checked' ) && ! jQuery ( y ) . is ( ':disabled' ) ) {
anyselected = 1 ;
var howmany = jQuery ( y ) . data ( 'howmany' ) ;
var type = jQuery ( y ) . val ( ) ;
if ( 1 == meta _foreign || ( 2 == meta _foreign && 'db' != type ) ) {
if ( 'wpcore' != type ) {
howmany = jQuery ( '#updraft_restore_form #updraft_restore_wpcore' ) . data ( 'howmany' ) ;
}
type = 'wpcore' ;
}
if ( 'wpcore' != type || already _added _wpcore == 0 ) {
var restobj = [ type , howmany ] ;
whichselected . push ( restobj ) ;
2018-01-26 15:50:15 +01:00
// alert(jQuery(y).val());
2016-11-28 21:52:15 -08:00
if ( 'wpcore' == type ) { already _added _wpcore = 1 ; }
}
}
} ) ;
2018-01-26 15:50:15 +01:00
if ( 1 == anyselected ) {
2016-11-28 21:52:15 -08:00
// Work out what to download
2018-01-26 15:50:15 +01:00
if ( 1 == updraft _restore _stage ) {
2016-11-28 21:52:15 -08:00
// meta_foreign == 1 : All-in-one format: the only thing to download, always, is wpcore
2018-01-26 15:50:15 +01:00
// if ('1' == meta_foreign) {
// whichselected = [];
// whichselected.push([ 'wpcore', 0 ]);
// } else if ('2' == meta_foreign) {
// jQuery(whichselected).each(function(x,y) {
// restobj = whichselected[x];
// });
// whichselected = [];
// whichselected.push([ 'wpcore', 0 ]);
// }
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft-restore-modal-stage1' ) . slideUp ( 'slow' ) ;
jQuery ( '#updraft-restore-modal-stage2' ) . show ( ) ;
updraft _restore _stage = 2 ;
var pretty _date = jQuery ( '.updraft_restore_date' ) . first ( ) . text ( ) ;
// Create the downloader active widgets
// See if we some are already known to be downloaded - in which case, skip creating the download widget. (That saves on HTTP round-trips, as each widget creates a new POST request. Of course, this is at the expense of one extra one here).
var which _to _download = whichselected ;
var backup _timestamp = jQuery ( '#updraft_restore_timestamp' ) . val ( ) ;
try {
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'whichdownloadsneeded' , {
2016-11-28 21:52:15 -08:00
downloads : whichselected ,
timestamp : backup _timestamp
} , function ( response ) {
2018-01-26 15:50:15 +01:00
if ( response . hasOwnProperty ( 'downloads' ) ) {
console . log ( 'UpdraftPlus: items which still require downloading follow' ) ;
which _to _download = response . downloads ;
console . log ( which _to _download ) ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
// Kick off any downloads, if needed
2016-11-28 21:52:15 -08:00
if ( which _to _download . length == 0 ) {
updraft _restorer _checkstage2 ( 0 ) ;
} else {
for ( var i = 0 ; i < which _to _download . length ; i ++ ) {
updraft _downloader ( 'udrestoredlstatus_' , backup _timestamp , which _to _download [ i ] [ 0 ] , '#ud_downloadstatus2' , which _to _download [ i ] [ 1 ] , pretty _date , false ) ;
}
}
2018-01-26 15:50:15 +01:00
} , { alert _on _error : false } ) ;
2016-11-28 21:52:15 -08:00
} catch ( err ) {
console . log ( "UpdraftPlus: error (follows) when looking for items needing downloading" ) ;
console . log ( err ) ;
alert ( updraftlion . jsonnotunderstood ) ;
}
// Make sure all are downloaded
2018-01-26 15:50:15 +01:00
} else if ( 2 == updraft _restore _stage ) {
2016-11-28 21:52:15 -08:00
updraft _restorer _checkstage2 ( 1 ) ;
2018-01-26 15:50:15 +01:00
} else if ( 3 == updraft _restore _stage ) {
2016-11-28 21:52:15 -08:00
var continue _restore = 1 ;
jQuery ( '#updraft_restoreoptions_ui input.required' ) . each ( function ( index ) {
if ( continue _restore == 0 ) return ;
var sitename = jQuery ( this ) . val ( ) ;
if ( sitename == '' ) {
alert ( updraftlion . pleasefillinrequired ) ;
continue _restore = 0 ;
} else if ( jQuery ( this ) . attr ( 'pattern' ) != '' ) {
var pattern = jQuery ( this ) . attr ( 'pattern' ) ;
var re = new RegExp ( pattern , "g" ) ;
if ( ! re . test ( sitename ) ) {
alert ( jQuery ( this ) . data ( 'invalidpattern' ) ) ;
continue _restore = 0 ;
}
}
} ) ;
if ( ! continue _restore ) return ;
var restore _options = jQuery ( '#updraft_restoreoptions_ui select, #updraft_restoreoptions_ui input' ) . serialize ( ) ;
console . log ( "Restore options: " + restore _options ) ;
jQuery ( '#updraft_restorer_restore_options' ) . val ( restore _options ) ;
// This must be done last, as it wipes out the section with #updraft_restoreoptions_ui
2018-01-26 15:50:15 +01:00
jQuery ( '#updraft-restore-modal-stage2a' ) . html ( updraftlion . restore _proceeding ) ;
2016-11-28 21:52:15 -08:00
jQuery ( '#updraft_restore_form' ) . submit ( ) ;
2018-01-26 15:50:15 +01:00
// In progress; prevent the button being pressed again
updraft _restore _stage = 4 ;
2016-11-28 21:52:15 -08:00
}
} else {
alert ( updraftlion . youdidnotselectany ) ;
}
} ;
2018-01-26 15:50:15 +01:00
updraft _restore _modal _buttons [ updraftlion . cancel ] = function ( ) {
jQuery ( this ) . dialog ( "close" ) ; } ;
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
jQuery ( "#updraft-restore-modal" ) . dialog ( {
2016-11-28 21:52:15 -08:00
autoOpen : false , height : 505 , width : 590 , modal : true ,
buttons : updraft _restore _modal _buttons
} ) ;
jQuery ( "#updraft-iframe-modal" ) . dialog ( {
autoOpen : false , height : 500 , width : 780 , modal : true
} ) ;
jQuery ( "#updraft-backupnow-inpage-modal" ) . dialog ( {
autoOpen : false , height : 345 , width : 580 , modal : true
} ) ;
var backupnow _modal _buttons = { } ;
backupnow _modal _buttons [ updraftlion . backupnow ] = function ( ) {
var backupnow _nodb = jQuery ( '#backupnow_includedb' ) . is ( ':checked' ) ? 0 : 1 ;
var backupnow _nofiles = jQuery ( '#backupnow_includefiles' ) . is ( ':checked' ) ? 0 : 1 ;
var backupnow _nocloud = jQuery ( '#backupnow_includecloud' ) . is ( ':checked' ) ? 0 : 1 ;
2018-01-26 15:50:15 +01:00
var onlythesetableentities = backupnow _whichtables _checked ( '' ) ;
if ( '' == onlythesetableentities && 0 == backupnow _nodb ) {
alert ( updraftlion . notableschosen ) ;
jQuery ( '#backupnow_includefiles_moreoptions' ) . show ( ) ;
return ;
}
if ( typeof onlythesetableentities === 'boolean' ) {
onlythesetableentities = null ;
}
2016-11-28 21:52:15 -08:00
var onlythesefileentities = backupnow _whichfiles _checked ( '' ) ;
if ( '' == onlythesefileentities && 0 == backupnow _nofiles ) {
alert ( updraftlion . nofileschosen ) ;
jQuery ( '#backupnow_includefiles_moreoptions' ) . show ( ) ;
return ;
}
if ( backupnow _nodb && backupnow _nofiles ) {
alert ( updraftlion . excludedeverything ) ;
return ;
}
jQuery ( this ) . dialog ( "close" ) ;
setTimeout ( function ( ) {
jQuery ( '#updraft_lastlogmessagerow' ) . fadeOut ( 'slow' , function ( ) {
jQuery ( this ) . fadeIn ( 'slow' ) ;
} ) ;
} , 1700 ) ;
2018-01-26 15:50:15 +01:00
updraft _backupnow _go ( backupnow _nodb , backupnow _nofiles , backupnow _nocloud , onlythesefileentities , '' , jQuery ( '#backupnow_label' ) . val ( ) , onlythesetableentities ) ;
2016-11-28 21:52:15 -08:00
} ;
2018-01-26 15:50:15 +01:00
backupnow _modal _buttons [ updraftlion . cancel ] = function ( ) {
jQuery ( this ) . dialog ( "close" ) ; } ;
2016-11-28 21:52:15 -08:00
jQuery ( "#updraft-backupnow-modal" ) . dialog ( {
autoOpen : false , height : 472 , width : 610 , modal : true ,
buttons : backupnow _modal _buttons
} ) ;
jQuery ( "#updraft-migrate-modal" ) . dialog ( {
autoOpen : false , height : updraftlion . migratemodalheight , width : updraftlion . migratemodalwidth , modal : true ,
} ) ;
2018-01-26 15:50:15 +01:00
jQuery ( "#updraft-poplog" ) . dialog ( {
2016-11-28 21:52:15 -08:00
autoOpen : false , height : 600 , width : '75%' , modal : true ,
} ) ;
jQuery ( '#updraft-navtab-settings-content .enableexpertmode' ) . click ( function ( ) {
jQuery ( '#updraft-navtab-settings-content .expertmode' ) . fadeIn ( ) ;
2018-01-26 15:50:15 +01:00
jQuery ( '#updraft-navtab-settings-content .enableexpertmode' ) . off ( 'click' ) ;
2016-11-28 21:52:15 -08:00
return false ;
} ) ;
jQuery ( '#updraft-navtab-settings-content .backupdirrow' ) . on ( 'click' , 'a.updraft_backup_dir_reset' , function ( ) {
jQuery ( '#updraft_dir' ) . val ( 'updraft' ) ; return false ;
} ) ;
function setup _file _entity _exclude _field ( field , instant ) {
if ( jQuery ( '#updraft-navtab-settings-content #updraft_include_' + field ) . is ( ':checked' ) ) {
if ( instant ) {
jQuery ( '#updraft-navtab-settings-content #updraft_include_' + field + '_exclude' ) . show ( ) ;
} else {
jQuery ( '#updraft-navtab-settings-content #updraft_include_' + field + '_exclude' ) . slideDown ( ) ;
}
} else {
if ( instant ) {
jQuery ( '#updraft-navtab-settings-content #updraft_include_' + field + '_exclude' ) . hide ( ) ;
} else {
jQuery ( '#updraft-navtab-settings-content #updraft_include_' + field + '_exclude' ) . slideUp ( ) ;
}
}
}
jQuery ( '#updraft-navtab-settings-content .updraft_include_entity' ) . click ( function ( ) {
var has _exclude _field = jQuery ( this ) . data ( 'toggle_exclude_field' ) ;
if ( has _exclude _field ) {
setup _file _entity _exclude _field ( has _exclude _field , false ) ;
}
} ) ;
// TODO: This is suspected to be obsolete. Confirm + remove.
jQuery ( '#updraft-navtab-settings-content .updraft-service' ) . change ( function ( ) {
var active _class = jQuery ( this ) . val ( ) ;
jQuery ( '#updraft-navtab-settings-content .updraftplusmethod' ) . hide ( ) ;
jQuery ( '#updraft-navtab-settings-content .' + active _class ) . show ( ) ;
} ) ;
jQuery ( '#updraft-navtab-settings-content a.updraft_show_decryption_widget' ) . click ( function ( e ) {
e . preventDefault ( ) ;
jQuery ( '#updraftplus_db_decrypt' ) . val ( jQuery ( '#updraft_encryptionphrase' ) . val ( ) ) ;
jQuery ( '#updraft-manualdecrypt-modal' ) . slideToggle ( ) ;
} ) ;
jQuery ( '#updraftplus-phpinfo' ) . click ( function ( e ) {
e . preventDefault ( ) ;
updraft _iframe _modal ( 'phpinfo' , updraftlion . phpinfo ) ;
} ) ;
jQuery ( '#updraftplus-rawbackuphistory' ) . click ( function ( e ) {
e . preventDefault ( ) ;
updraft _iframe _modal ( 'rawbackuphistory' , updraftlion . raw ) ;
} ) ;
// + Added addons navtab
jQuery ( '#updraft-navtab-status' ) . click ( function ( e ) {
e . preventDefault ( ) ;
jQuery ( this ) . addClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-expert-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-settings-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-backups-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-addons-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-status-content' ) . show ( ) ;
jQuery ( '#updraft-navtab-expert' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-backups' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-settings' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-addons' ) . removeClass ( 'nav-tab-active' ) ;
updraft _page _is _visible = 1 ;
updraft _console _focussed _tab = 1 ;
// Refresh the console, as its next update might be far away
updraft _activejobs _update ( true ) ;
} ) ;
jQuery ( '#updraft-navtab-expert' ) . click ( function ( e ) {
e . preventDefault ( ) ;
jQuery ( this ) . addClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-settings-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-status-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-backups-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-addons-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-expert-content' ) . show ( ) ;
jQuery ( '#updraft-navtab-status' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-backups' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-settings' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-addons' ) . removeClass ( 'nav-tab-active' ) ;
updraft _page _is _visible = 1 ;
updraft _console _focussed _tab = 4 ;
} ) ;
jQuery ( '#updraft-navtab-settings, #updraft-navtab-settings2, #updraft_backupnow_gotosettings' ) . click ( function ( e ) {
e . preventDefault ( ) ;
// These next two should only do anything if the relevant selector was clicked
jQuery ( this ) . parents ( '.updraftmessage' ) . remove ( ) ;
jQuery ( '#updraft-backupnow-modal' ) . dialog ( 'close' ) ;
jQuery ( '#updraft-navtab-status-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-backups-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-expert-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-addons-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-settings-content' ) . show ( ) ;
jQuery ( '#updraft-navtab-settings' ) . addClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-expert' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-backups' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-status' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-addons' ) . removeClass ( 'nav-tab-active' ) ;
updraft _page _is _visible = 1 ;
updraft _console _focussed _tab = 3 ;
} ) ;
jQuery ( '#updraft-navtab-addons' ) . click ( function ( e ) {
e . preventDefault ( ) ;
jQuery ( this ) . addClass ( 'b#nav-tab-active' ) ;
jQuery ( '#updraft-navtab-status-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-backups-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-expert-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-settings-content' ) . hide ( ) ;
jQuery ( '#updraft-navtab-addons-content' ) . show ( ) ;
jQuery ( '#updraft-navtab-addons' ) . addClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-expert' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-backups' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-status' ) . removeClass ( 'nav-tab-active' ) ;
jQuery ( '#updraft-navtab-settings' ) . removeClass ( 'nav-tab-active' ) ;
updraft _page _is _visible = 1 ;
updraft _console _focussed _tab = 5 ;
} ) ;
jQuery ( '#updraft-navtab-backups' ) . click ( function ( e ) {
e . preventDefault ( ) ;
updraft _openrestorepanel ( 1 ) ;
} ) ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'ping' , null , function ( data , response ) {
2016-11-28 21:52:15 -08:00
if ( 'success' == response && data != 'pong' && data . indexOf ( 'pong' ) >= 0 ) {
jQuery ( '#updraft-navtab-backups-content .ud-whitespace-warning' ) . show ( ) ;
console . log ( "UpdraftPlus: Extra output warning: response (which should be just (string)'pong') follows." ) ;
console . log ( data ) ;
}
2018-01-26 15:50:15 +01:00
} , { json _parse : false , type : 'GET' } ) ;
2016-11-28 21:52:15 -08:00
// Section: Plupload
try {
if ( typeof updraft _plupload _config !== 'undefined' ) {
plupload _init ( ) ;
}
} catch ( err ) {
console . log ( err ) ;
}
function plupload _init ( ) {
// create the uploader and pass the config from above
var uploader = new plupload . Uploader ( updraft _plupload _config ) ;
// checks if browser supports drag and drop upload, makes some css adjustments if necessary
2018-01-26 15:50:15 +01:00
uploader . bind ( 'Init' , function ( up ) {
2016-11-28 21:52:15 -08:00
var uploaddiv = jQuery ( '#plupload-upload-ui' ) ;
2018-01-26 15:50:15 +01:00
if ( up . features . dragdrop ) {
2016-11-28 21:52:15 -08:00
uploaddiv . addClass ( 'drag-drop' ) ;
jQuery ( '#drag-drop-area' )
2018-01-26 15:50:15 +01:00
. bind ( 'dragover.wp-uploader' , function ( ) {
uploaddiv . addClass ( 'drag-over' ) ; } )
. bind ( 'dragleave.wp-uploader, drop.wp-uploader' , function ( ) {
uploaddiv . removeClass ( 'drag-over' ) ; } ) ;
2016-11-28 21:52:15 -08:00
} else {
uploaddiv . removeClass ( 'drag-drop' ) ;
jQuery ( '#drag-drop-area' ) . unbind ( '.wp-uploader' ) ;
}
} ) ;
uploader . init ( ) ;
// a file was added in the queue
2018-01-26 15:50:15 +01:00
uploader . bind ( 'FilesAdded' , function ( up , files ) {
// var hundredmb = 100 * 1024 * 1024, max = parseInt(up.settings.max_file_size, 10);
plupload . each ( files , function ( file ) {
// @codingStandardsIgnoreLine
if ( ! /^backup_([\-0-9]{15})_.*_([0-9a-f]{12})-[\-a-z]+([0-9]+?)?(\.(zip|gz|gz\.crypt))?$/i . test ( file . name ) && ! /^log\.([0-9a-f]{12})\.txt$/ . test ( file . name ) ) {
var accepted _file = false ;
for ( var i = 0 ; i < updraft _accept _archivename . length ; i ++ ) {
if ( updraft _accept _archivename [ i ] . test ( file . name ) ) {
var accepted _file = true ;
}
}
if ( ! accepted _file ) {
if ( /\.(zip|tar|tar\.gz|tar\.bz2)$/i . test ( file . name ) || /\.sql(\.gz)?$/i . test ( file . name ) ) {
jQuery ( '#updraft-message-modal-innards' ) . html ( '<p><strong>' + file . name + "</strong></p> " + updraftlion . notarchive2 ) ;
jQuery ( '#updraft-message-modal' ) . dialog ( 'open' ) ;
} else {
alert ( file . name + ": " + updraftlion . notarchive ) ;
}
uploader . removeFile ( file ) ;
return ;
2016-11-28 21:52:15 -08:00
}
}
2018-01-26 15:50:15 +01:00
// a file was added, you may want to update your DOM here...
jQuery ( '#filelist' ) . append (
'<div class="file" id="' + file . id + '"><b>' +
file . name + '</b> (<span>' + plupload . formatSize ( 0 ) + '</span>/' + plupload . formatSize ( file . size ) + ') ' +
2016-11-28 21:52:15 -08:00
'<div class="fileprogress"></div></div>' ) ;
} ) ;
up . refresh ( ) ;
up . start ( ) ;
} ) ;
uploader . bind ( 'UploadProgress' , function ( up , file ) {
jQuery ( '#' + file . id + " .fileprogress" ) . width ( file . percent + "%" ) ;
jQuery ( '#' + file . id + " span" ) . html ( plupload . formatSize ( parseInt ( file . size * file . percent / 100 ) ) ) ;
2018-01-26 15:50:15 +01:00
if ( file . size == file . loaded ) {
2016-11-28 21:52:15 -08:00
jQuery ( '#' + file . id ) . html ( '<div class="file" id="' + file . id + '"><b>' +
file . name + '</b> (<span>' + plupload . formatSize ( parseInt ( file . size * file . percent / 100 ) ) + '</span>/' + plupload . formatSize ( file . size ) + ') - ' + updraftlion . complete +
'</div>' ) ; // Removed <div class="fileprogress"></div> (just before closing </div>) to make clearer it's complete.
jQuery ( '#' + file . id + " .fileprogress" ) . width ( file . percent + "%" ) ;
}
} ) ;
uploader . bind ( 'Error' , function ( up , error ) {
2018-01-26 15:50:15 +01:00
console . log ( error ) ;
var err _makesure ;
if ( error . code == "-200" ) {
err _makesure = '\n' + updraftlion . makesure2 ;
} else {
err _makesure = updraftlion . makesure ;
}
var msg = updraftlion . uploaderr + ' (code ' + error . code + ') : ' + error . message ;
if ( error . hasOwnProperty ( 'status' ) && error . status ) {
msg += ' (' + updraftlion . http _code + ' ' + error . status + ')' ;
}
if ( error . hasOwnProperty ( 'response' ) ) {
console . log ( 'UpdraftPlus: plupload error: ' + error . response ) ;
if ( error . response . length < 100 ) msg += ' ' + updraftlion . error + ' ' + error . response + '\n' ;
}
msg += ' ' + err _makesure ;
alert ( msg ) ;
2016-11-28 21:52:15 -08:00
} ) ;
2018-01-26 15:50:15 +01:00
// a file was uploaded
2016-11-28 21:52:15 -08:00
uploader . bind ( 'FileUploaded' , function ( up , file , response ) {
if ( response . status == '200' ) {
// this is your ajax response, update the DOM with it or something...
try {
2018-01-26 15:50:15 +01:00
resp = ud _parse _json ( response . response ) ;
2016-11-28 21:52:15 -08:00
if ( resp . e ) {
alert ( updraftlion . uploaderror + " " + resp . e ) ;
} else if ( resp . dm ) {
alert ( resp . dm ) ;
updraft _updatehistory ( 1 , 0 ) ;
} else if ( resp . m ) {
updraft _updatehistory ( 1 , 0 ) ;
} else {
alert ( 'Unknown server response: ' + response . response ) ;
}
2018-01-26 15:50:15 +01:00
} catch ( err ) {
2016-11-28 21:52:15 -08:00
console . log ( response ) ;
alert ( updraftlion . jsonnotunderstood ) ;
}
} else {
alert ( 'Unknown server response status: ' + response . code ) ;
console . log ( response ) ;
}
} ) ;
}
// Functions in the debugging console
jQuery ( '#updraftplus_httpget_go' ) . click ( function ( e ) {
e . preventDefault ( ) ;
updraftplus _httpget _go ( 0 ) ;
} ) ;
jQuery ( '#updraftplus_httpget_gocurl' ) . click ( function ( e ) {
e . preventDefault ( ) ;
updraftplus _httpget _go ( 1 ) ;
} ) ;
jQuery ( '#updraftplus_callwpaction_go' ) . click ( function ( e ) {
e . preventDefault ( ) ;
2018-01-26 15:50:15 +01:00
params = { wpaction : jQuery ( '#updraftplus_callwpaction' ) . val ( ) } ;
updraft _send _command ( 'call_wordpress_action' , params , function ( response ) {
if ( response . e ) {
alert ( response . e ) ;
} else if ( response . s ) {
// Silence
} else if ( response . r ) {
jQuery ( '#updraftplus_callwpaction_results' ) . html ( response . r ) ;
} else {
2016-11-28 21:52:15 -08:00
console . log ( response ) ;
alert ( updraftlion . jsonnotunderstood ) ;
}
} ) ;
} ) ;
function updraftplus _httpget _go ( curl ) {
2018-01-26 15:50:15 +01:00
params = { uri : jQuery ( '#updraftplus_httpget_uri' ) . val ( ) } ;
2016-11-28 21:52:15 -08:00
params . curl = curl ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'httpget' , params , function ( resp ) {
if ( resp . e ) { alert ( resp . e ) ; }
if ( resp . r ) {
jQuery ( '#updraftplus_httpget_results' ) . html ( '<pre>' + resp . r + '</pre>' ) ;
} else {
console . log ( resp ) ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
} , { type : 'GET' } ) ;
2016-11-28 21:52:15 -08:00
}
jQuery ( '#updraft_activejobs_table' ) . on ( 'click' , '.updraft_jobinfo_delete' , function ( e ) {
e . preventDefault ( ) ;
var job _id = jQuery ( this ) . data ( 'jobid' ) ;
if ( job _id ) {
updraft _activejobs _delete ( job _id ) ;
} else {
console . log ( "UpdraftPlus: A stop job link was clicked, but the Job ID could not be found" ) ;
}
} ) ;
jQuery ( '#updraft_activejobs_table, #updraft-navtab-backups-content .updraft_existing_backups, #updraft-backupnow-inpage-modal' ) . on ( 'click' , '.updraft-log-link' , function ( e ) {
e . preventDefault ( ) ;
var job _id = jQuery ( this ) . data ( 'jobid' ) ;
if ( job _id ) {
updraft _popuplog ( job _id ) ;
} else {
console . log ( "UpdraftPlus: A log link was clicked, but the Job ID could not be found" ) ;
}
} ) ;
function updraft _restore _setup ( entities , key , show _data ) {
updraft _restore _setoptions ( entities ) ;
jQuery ( '#updraft_restore_timestamp' ) . val ( key ) ;
jQuery ( '.updraft_restore_date' ) . html ( show _data ) ;
updraft _restore _stage = 1 ;
jQuery ( '#updraft-migrate-modal' ) . dialog ( 'close' ) ;
jQuery ( '#updraft-restore-modal' ) . dialog ( 'open' ) ;
jQuery ( '#updraft-restore-modal-stage1' ) . show ( ) ;
jQuery ( '#updraft-restore-modal-stage2' ) . hide ( ) ;
jQuery ( '#updraft-restore-modal-stage2a' ) . html ( '' ) ;
updraft _activejobs _update ( true ) ;
}
jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups' ) . on ( 'click' , 'button.choose-components-button' , function ( e ) {
var entities = jQuery ( this ) . data ( 'entities' ) ;
var backup _timestamp = jQuery ( this ) . data ( 'backup_timestamp' ) ;
var show _data = jQuery ( this ) . data ( 'showdata' ) ;
updraft _restore _setup ( entities , backup _timestamp , show _data ) ;
} ) ;
/ * *
* Get the value of a named URL parameter - https : //stackoverflow.com/questions/4548487/jquery-read-query-string
2018-01-26 15:50:15 +01:00
*
2016-11-28 21:52:15 -08:00
* @ param { string } name - URL parameter to return the value of
2018-01-26 15:50:15 +01:00
*
2016-11-28 21:52:15 -08:00
* @ returns { string }
* /
function get _parameter _by _name ( name ) {
name = name . replace ( /[\[]/ , "\\\[" ) . replace ( /[\]]/ , "\\\]" ) ;
2018-01-26 15:50:15 +01:00
var regex _s = "[\\?&]" + name + "=([^&#]*)" ;
var regex = new RegExp ( regex _s ) ;
var results = regex . exec ( window . location . href ) ;
if ( results == null ) {
return '' ;
2016-11-28 21:52:15 -08:00
} else {
2018-01-26 15:50:15 +01:00
return decodeURIComponent ( results [ 1 ] . replace ( /\+/g , ' ' ) ) ;
2016-11-28 21:52:15 -08:00
}
}
if ( get _parameter _by _name ( 'udaction' ) == 'initiate_restore' ) {
var entities = get _parameter _by _name ( 'entities' ) ;
var backup _timestamp = get _parameter _by _name ( 'backup_timestamp' ) ;
var show _data = get _parameter _by _name ( 'showdata' ) ;
updraft _restore _setup ( entities , backup _timestamp , show _data ) ;
}
jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups' ) . on ( 'click' , '.updraft-delete-link' , function ( e ) {
e . preventDefault ( ) ;
2018-01-26 15:50:15 +01:00
var hasremote = jQuery ( this ) . data ( 'hasremote' ) ;
2016-11-28 21:52:15 -08:00
var nonce = jQuery ( this ) . data ( 'nonce' ) . toString ( ) ;
var key = jQuery ( this ) . data ( 'key' ) . toString ( ) ;
if ( nonce ) {
updraft _delete ( key , nonce , hasremote ) ;
} else {
console . log ( "UpdraftPlus: A delete link was clicked, but the Job ID could not be found" ) ;
}
} ) ;
jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups' ) . on ( 'click' , 'button.updraft_download_button' , function ( e ) {
e . preventDefault ( ) ;
var base = 'uddlstatus_' ;
var backup _timestamp = jQuery ( this ) . data ( 'backup_timestamp' ) ;
var what = jQuery ( this ) . data ( 'what' ) ;
var whicharea = '.ud_downloadstatus' ;
var set _contents = jQuery ( this ) . data ( 'set_contents' ) ;
var prettydate = jQuery ( this ) . data ( 'prettydate' ) ;
var async = true ;
updraft _downloader ( base , backup _timestamp , what , whicharea , set _contents , prettydate , async ) ;
} ) ;
2018-01-26 15:50:15 +01:00
jQuery ( '#updraft-navtab-backups-content .updraft_existing_backups' ) . on ( 'dblclick' , '.updraft_existingbackup_date' , function ( e ) {
2016-11-28 21:52:15 -08:00
e . preventDefault ( ) ;
var data = jQuery ( this ) . data ( 'rawbackup' ) ;
if ( data != null && data != '' ) {
updraft _html _modal ( data , updraftlion . raw , 780 , 500 ) ;
}
} ) ;
} ) ;
// UpdraftPlus Vault
2018-01-26 15:50:15 +01:00
jQuery ( document ) . ready ( function ( $ ) {
2016-11-28 21:52:15 -08:00
var settings _css _prefix = '#updraft-navtab-settings-content ' ;
2018-01-26 15:50:15 +01:00
$ ( settings _css _prefix + '#remote-storage-holder' ) . on ( 'click' , '.updraftvault_backtostart' , function ( e ) {
2016-11-28 21:52:15 -08:00
e . preventDefault ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_showoptions' ) . slideUp ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_connect' ) . slideUp ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_connected' ) . slideUp ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_default' ) . slideDown ( ) ;
} ) ;
// Prevent default event when pressing return in the form
2018-01-26 15:50:15 +01:00
$ ( settings _css _prefix ) . on ( 'keypress' , '#updraftvault_settings_connect input' , function ( e ) {
if ( 13 == e . which ) {
2016-11-28 21:52:15 -08:00
$ ( settings _css _prefix + '#updraftvault_connect_go' ) . click ( ) ;
return false ;
}
} ) ;
2018-01-26 15:50:15 +01:00
$ ( settings _css _prefix + '#remote-storage-holder' ) . on ( 'click' , '#updraftvault_recountquota' , function ( e ) {
2016-11-28 21:52:15 -08:00
e . preventDefault ( ) ;
$ ( settings _css _prefix + '#updraftvault_recountquota' ) . html ( updraftlion . counting ) ;
try {
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'vault_recountquota' , { instance _id : $ ( '#updraftvault_settings_connect' ) . data ( 'instance_id' ) } , function ( response ) {
2016-11-28 21:52:15 -08:00
$ ( settings _css _prefix + '#updraftvault_recountquota' ) . html ( updraftlion . updatequotacount ) ;
2018-01-26 15:50:15 +01:00
if ( response . hasOwnProperty ( 'html' ) ) {
$ ( settings _css _prefix + '#updraftvault_settings_connected' ) . html ( response . html ) ;
if ( response . hasOwnProperty ( 'connected' ) ) {
if ( response . connected ) {
$ ( settings _css _prefix + '#updraftvault_settings_default' ) . hide ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_connected' ) . show ( ) ;
} else {
$ ( settings _css _prefix + '#updraftvault_settings_connected' ) . hide ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_default' ) . show ( ) ;
2016-11-28 21:52:15 -08:00
}
}
2018-01-26 15:50:15 +01:00
}
2016-11-28 21:52:15 -08:00
} ) ;
} catch ( err ) {
$ ( settings _css _prefix + '#updraftvault_recountquota' ) . html ( updraftlion . updatequotacount ) ;
console . log ( err ) ;
}
} ) ;
2018-01-26 15:50:15 +01:00
$ ( settings _css _prefix + '#remote-storage-holder' ) . on ( 'click' , '#updraftvault_disconnect' , function ( e ) {
2016-11-28 21:52:15 -08:00
e . preventDefault ( ) ;
$ ( settings _css _prefix + '#updraftvault_disconnect' ) . html ( updraftlion . disconnecting ) ;
try {
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'vault_disconnect' , { immediate _echo : true , instance _id : $ ( '#updraftvault_settings_connect' ) . data ( 'instance_id' ) } , function ( response ) {
2016-11-28 21:52:15 -08:00
$ ( settings _css _prefix + '#updraftvault_disconnect' ) . html ( updraftlion . disconnect ) ;
2018-01-26 15:50:15 +01:00
if ( response . hasOwnProperty ( 'html' ) ) {
$ ( settings _css _prefix + '#updraftvault_settings_connected' ) . html ( response . html ) . slideUp ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_default' ) . slideDown ( ) ;
}
2016-11-28 21:52:15 -08:00
} ) ;
} catch ( err ) {
$ ( settings _css _prefix + '#updraftvault_disconnect' ) . html ( updraftlion . disconnect ) ;
console . log ( err ) ;
}
} ) ;
2018-01-26 15:50:15 +01:00
$ ( settings _css _prefix + '#remote-storage-holder' ) . on ( 'click' , '#updraftvault_connect' , function ( e ) {
2016-11-28 21:52:15 -08:00
e . preventDefault ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_default' ) . slideUp ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_connect' ) . slideDown ( ) ;
} ) ;
2018-01-26 15:50:15 +01:00
$ ( settings _css _prefix + '#remote-storage-holder' ) . on ( 'click' , '#updraftvault_showoptions' , function ( e ) {
2016-11-28 21:52:15 -08:00
e . preventDefault ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_default' ) . slideUp ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_showoptions' ) . slideDown ( ) ;
} ) ;
2018-01-26 15:50:15 +01:00
$ ( settings _css _prefix + '#remote-storage-holder' ) . on ( 'click' , '#updraftvault_connect_go' , function ( e ) {
2016-11-28 21:52:15 -08:00
$ ( settings _css _prefix + '#updraftvault_connect_go' ) . html ( updraftlion . connecting ) ;
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'vault_connect' , {
2016-11-28 21:52:15 -08:00
email : $ ( '#updraftvault_email' ) . val ( ) ,
2018-01-26 15:50:15 +01:00
pass : $ ( '#updraftvault_pass' ) . val ( ) ,
instance _id : $ ( '#updraftvault_settings_connect' ) . data ( 'instance_id' ) ,
} , function ( resp , status , response ) {
2016-11-28 21:52:15 -08:00
$ ( settings _css _prefix + '#updraftvault_connect_go' ) . html ( updraftlion . connect ) ;
if ( resp . hasOwnProperty ( 'e' ) ) {
updraft _html _modal ( '<h4 style="margin-top:0px; padding-top:0px;">' + updraftlion . errornocolon + '</h4><p>' + resp . e + '</p>' , updraftlion . disconnect , 400 , 250 ) ;
if ( resp . hasOwnProperty ( 'code' ) && resp . code == 'no_quota' ) {
$ ( settings _css _prefix + '#updraftvault_settings_connect' ) . slideUp ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_default' ) . slideDown ( ) ;
}
} else if ( resp . hasOwnProperty ( 'connected' ) && resp . connected && resp . hasOwnProperty ( 'html' ) ) {
$ ( settings _css _prefix + '#updraftvault_settings_connect' ) . slideUp ( ) ;
$ ( settings _css _prefix + '#updraftvault_settings_connected' ) . html ( resp . html ) . slideDown ( ) ;
} else {
console . log ( resp ) ;
alert ( updraftlion . unexpectedresponse + ' ' + response ) ;
}
} ) ;
return false ;
} ) ;
} ) ;
// Next: the encrypted database pluploader
2018-01-26 15:50:15 +01:00
jQuery ( document ) . ready ( function ( $ ) {
2016-11-28 21:52:15 -08:00
try {
if ( typeof updraft _plupload _config2 !== 'undefined' ) {
plupload _init ( ) ;
}
} catch ( err ) {
console . log ( err ) ;
}
function plupload _init ( ) {
// create the uploader and pass the config from above
var uploader = new plupload . Uploader ( updraft _plupload _config2 ) ;
// checks if browser supports drag and drop upload, makes some css adjustments if necessary
2018-01-26 15:50:15 +01:00
uploader . bind ( 'Init' , function ( up ) {
2016-11-28 21:52:15 -08:00
var uploaddiv = jQuery ( '#plupload-upload-ui2' ) ;
2018-01-26 15:50:15 +01:00
if ( up . features . dragdrop ) {
2016-11-28 21:52:15 -08:00
uploaddiv . addClass ( 'drag-drop' ) ;
jQuery ( '#drag-drop-area2' )
2018-01-26 15:50:15 +01:00
. bind ( 'dragover.wp-uploader' , function ( ) {
uploaddiv . addClass ( 'drag-over' ) ; } )
. bind ( 'dragleave.wp-uploader, drop.wp-uploader' , function ( ) {
uploaddiv . removeClass ( 'drag-over' ) ; } ) ;
2016-11-28 21:52:15 -08:00
} else {
uploaddiv . removeClass ( 'drag-drop' ) ;
jQuery ( '#drag-drop-area2' ) . unbind ( '.wp-uploader' ) ;
}
} ) ;
uploader . init ( ) ;
// a file was added in the queue
2018-01-26 15:50:15 +01:00
uploader . bind ( 'FilesAdded' , function ( up , files ) {
// var hundredmb = 100 * 1024 * 1024, max = parseInt(up.settings.max_file_size, 10);
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
plupload . each ( files , function ( file ) {
// @codingStandardsIgnoreLine
if ( ! /^backup_([\-0-9]{15})_.*_([0-9a-f]{12})-db([0-9]+)?\.(gz\.crypt)$/i . test ( file . name ) ) {
2016-11-28 21:52:15 -08:00
alert ( file . name + ': ' + updraftlion . notdba ) ;
uploader . removeFile ( file ) ;
return ;
}
// a file was added, you may want to update your DOM here...
jQuery ( '#filelist2' ) . append (
'<div class="file" id="' + file . id + '"><b>' +
file . name + '</b> (<span>' + plupload . formatSize ( 0 ) + '</span>/' + plupload . formatSize ( file . size ) + ') ' +
2018-01-26 15:50:15 +01:00
'<div class="fileprogress"></div></div>' ) ;
2016-11-28 21:52:15 -08:00
} ) ;
up . refresh ( ) ;
up . start ( ) ;
} ) ;
uploader . bind ( 'UploadProgress' , function ( up , file ) {
jQuery ( '#' + file . id + " .fileprogress" ) . width ( file . percent + "%" ) ;
jQuery ( '#' + file . id + " span" ) . html ( plupload . formatSize ( parseInt ( file . size * file . percent / 100 ) ) ) ;
} ) ;
uploader . bind ( 'Error' , function ( up , error ) {
2018-01-26 15:50:15 +01:00
if ( '-200' == error . code ) {
err _makesure = '\n' + updraftlion . makesure2 ;
} else {
err _makesure = updraftlion . makesure ;
}
alert ( updraftlion . uploaderr + ' (code ' + error . code + ") : " + error . message + " " + err _makesure ) ;
2016-11-28 21:52:15 -08:00
} ) ;
2018-01-26 15:50:15 +01:00
// a file was uploaded
2016-11-28 21:52:15 -08:00
uploader . bind ( 'FileUploaded' , function ( up , file , response ) {
if ( response . status == '200' ) {
// this is your ajax response, update the DOM with it or something...
if ( response . response . substring ( 0 , 6 ) == 'ERROR:' ) {
alert ( updraftlion . uploaderror + " " + response . response . substring ( 6 ) ) ;
} else if ( response . response . substring ( 0 , 3 ) == 'OK:' ) {
bkey = response . response . substring ( 3 ) ;
jQuery ( '#' + file . id + " .fileprogress" ) . hide ( ) ;
jQuery ( '#' + file . id ) . append ( updraftlion . uploaded + ' <a href="?page=updraftplus&action=downloadfile&updraftplus_file=' + bkey + '&decrypt_key=' + encodeURIComponent ( jQuery ( '#updraftplus_db_decrypt' ) . val ( ) ) + '">' + updraftlion . followlink + '</a> ' + updraftlion . thiskey + ' ' + jQuery ( '#updraftplus_db_decrypt' ) . val ( ) . replace ( /&/g , "&" ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) ) ;
} else {
alert ( updraftlion . unknownresp + ' ' + response . response ) ;
}
} else {
alert ( updraftlion . ukrespstatus + ' ' + response . code ) ;
}
} ) ;
}
jQuery ( '#updraft-hidethis' ) . remove ( ) ;
2018-01-26 15:50:15 +01:00
/ *
* A Handlebarsjs helper function that is used to compare
* two values if they are equal . Please refer to the example below .
* Assuming "comment_status" contains the value of "spam" .
*
* @ param { mixed } a The first value to compare
* @ param { mixed } b The second value to compare
*
* @ example
* // returns "<span>I am spam!</span>", otherwise "<span>I am not a spam!</span>"
* { { # ifeq "spam" comment _status } }
* < span > I am spam ! < / s p a n >
* { { else } }
* < span > I am not a spam ! < / s p a n >
* { { / i f e q } }
*
* @ return { string }
* /
Handlebars . registerHelper ( 'ifeq' , function ( a , b , opts ) {
if ( 'string' !== typeof a && 'undefined' !== typeof a && null !== a ) a = a . toString ( ) ;
if ( 'string' !== typeof b && 'undefined' !== typeof b && null !== b ) b = b . toString ( ) ;
if ( a === b ) {
return opts . fn ( this ) ;
} else {
return opts . inverse ( this ) ;
}
} ) ;
// Add remote methods html using handlebarjs
if ( $ ( '#remote-storage-holder' ) . length ) {
var html = '' ;
for ( var method in updraftlion . remote _storage _templates ) {
if ( 'undefined' != typeof updraftlion . remote _storage _options [ method ] ) {
var template = Handlebars . compile ( updraftlion . remote _storage _templates [ method ] ) ;
var first _instance = true ;
for ( var instance _id in updraftlion . remote _storage _options [ method ] ) {
if ( 'default' === instance _id ) continue ;
var context = updraftlion . remote _storage _options [ method ] [ instance _id ] ;
context [ 'first_instance' ] = first _instance ;
if ( 'undefined' == typeof context [ 'instance_enabled' ] ) {
context [ 'instance_enabled' ] = 1 ;
}
html += template ( context ) ;
first _instance = false ;
}
} else {
html += updraftlion . remote _storage _templates [ method ] ;
}
}
$ ( '#remote-storage-holder' ) . append ( html ) . ready ( function ( ) {
$ ( '.updraftplusmethod' ) . not ( '.none' ) . hide ( ) ;
updraft _remote _storage _tabs _setup ( ) ;
} ) ;
}
2016-11-28 21:52:15 -08:00
} ) ;
// Save/Export/Import settings via AJAX
2018-01-26 15:50:15 +01:00
jQuery ( document ) . ready ( function ( $ ) {
2016-11-28 21:52:15 -08:00
// Pre-load the image so that it doesn't jerk when first used
var my _image = new Image ( ) ;
my _image . src = updraftlion . ud _url + '/images/udlogo-rotating.gif' ;
// When inclusion options for file entities in the settings tab, reflect that in the "Backup Now" dialog, to prevent unexpected surprises
$ ( '#updraft-navtab-settings-content input.updraft_include_entity' ) . change ( function ( e ) {
var event _target = $ ( this ) . attr ( 'id' ) ;
var checked = $ ( this ) . is ( ':checked' ) ;
var backup _target = '#backupnow_files_' + event _target ;
$ ( backup _target ) . prop ( 'checked' , checked ) ;
} ) ;
$ ( '#updraftplus-settings-save' ) . click ( function ( e ) {
e . preventDefault ( ) ;
$ . blockUI ( { message : '<div style="margin: 8px; font-size:150%;"><img src="' + updraftlion . ud _url + '/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>' + updraftlion . saving + '</div>' } ) ;
2018-01-26 15:50:15 +01:00
var form _data = gather _updraft _settings ( 'string' ) ;
2016-11-28 21:52:15 -08:00
// POST the settings back to the AJAX handler
2018-01-26 15:50:15 +01:00
updraft _send _command ( 'savesettings' , {
2016-11-28 21:52:15 -08:00
settings : form _data ,
2018-01-26 15:50:15 +01:00
updraftplus _version : updraftlion . updraftplus _version
2016-11-28 21:52:15 -08:00
} , function ( response ) {
// Add page updates etc based on response
updraft _handle _page _updates ( response ) ;
$ ( '#updraft-wrap .fade' ) . delay ( 6000 ) . fadeOut ( 2000 ) ;
$ ( 'html, body' ) . animate ( {
scrollTop : $ ( "#updraft-wrap" ) . offset ( ) . top
} , 1000 , function ( ) {
2018-01-26 15:50:15 +01:00
check _cloud _authentication ( )
} ) ;
2016-11-28 21:52:15 -08:00
$ . unblockUI ( ) ;
2018-01-26 15:50:15 +01:00
} , { action : 'updraft_savesettings' , nonce : updraftplus _settings _nonce , json _parse : false } ) ;
2016-11-28 21:52:15 -08:00
} ) ;
$ ( '#updraftplus-settings-export' ) . click ( function ( ) {
if ( updraft _settings _form _changed ) {
alert ( updraftlion . unsaved _settings _export ) ;
}
export _settings ( ) ;
} ) ;
$ ( '#updraftplus-settings-import' ) . click ( function ( ) {
$ . blockUI ( { message : '<div style="margin: 8px; font-size:150%;"><img src="' + updraftlion . ud _url + '/images/udlogo-rotating.gif" height="80" width="80" style="padding-bottom:10px;"><br>' + updraftlion . importing + '</div>' } ) ;
var updraft _import _file _input = document . getElementById ( 'import_settings' ) ;
if ( updraft _import _file _input . files . length == 0 ) {
alert ( updraftlion . import _select _file ) ;
$ . unblockUI ( ) ;
return ;
}
var updraft _import _file _file = updraft _import _file _input . files [ 0 ] ;
var updraft _import _file _reader = new FileReader ( ) ;
updraft _import _file _reader . onload = function ( ) {
import _settings ( this . result ) ;
} ;
updraft _import _file _reader . readAsText ( updraft _import _file _file ) ;
} ) ;
function export _settings ( ) {
2018-01-26 15:50:15 +01:00
var form _data = gather _updraft _settings ( 'object' ) ;
2016-11-28 21:52:15 -08:00
var date _now = new Date ( ) ;
form _data = JSON . stringify ( {
// Indicate the last time the format changed - i.e. do not update this unless there is a format change
2018-01-26 15:50:15 +01:00
version : '1.12.40' ,
2016-11-28 21:52:15 -08:00
epoch _date : date _now . getTime ( ) ,
local _date : date _now . toLocaleString ( ) ,
network _site _url : updraftlion . network _site _url ,
2018-01-26 15:50:15 +01:00
data : form _data
2016-11-28 21:52:15 -08:00
} ) ;
2018-01-26 15:50:15 +01:00
// Attach this data to an anchor on page
2016-11-28 21:52:15 -08:00
var link = document . body . appendChild ( document . createElement ( 'a' ) ) ;
2018-01-26 15:50:15 +01:00
link . setAttribute ( 'download' , updraftlion . export _settings _file _name ) ;
2016-11-28 21:52:15 -08:00
link . setAttribute ( 'style' , "display:none;" ) ;
link . setAttribute ( 'href' , 'data:text/json' + ';charset=UTF-8,' + encodeURIComponent ( form _data ) ) ;
link . click ( ) ;
}
function import _settings ( updraft _file _result ) {
var data = decodeURIComponent ( updraft _file _result ) ;
2018-01-26 15:50:15 +01:00
var parsed ;
try {
parsed = ud _parse _json ( data ) ;
} catch ( e ) {
$ . unblockUI ( ) ;
jQuery ( '#import_settings' ) . val ( '' ) ;
console . log ( data ) ;
console . log ( e ) ;
alert ( updraftlion . import _invalid _json _file ) ;
return ;
}
2016-11-28 21:52:15 -08:00
if ( window . confirm ( updraftlion . importing _data _from + ' ' + data [ 'network_site_url' ] + "\n" + updraftlion . exported _on + ' ' + data [ 'local_date' ] + "\n" + updraftlion . continue _import ) ) {
// GET the settings back to the AJAX handler
2018-01-26 15:50:15 +01:00
var stringified = JSON . stringify ( parsed [ 'data' ] ) ;
updraft _send _command ( 'importsettings' , {
settings : stringified ,
updraftplus _version : updraftlion . updraftplus _version ,
2016-11-28 21:52:15 -08:00
} , function ( response ) {
2018-01-26 15:50:15 +01:00
var resp = updraft _handle _page _updates ( response ) ;
if ( ! resp . hasOwnProperty ( 'saved' ) || resp . saved ) {
// Prevent the user being told they have unsaved settings
updraft _settings _form _changed = false ;
// Add page updates etc based on response
location . replace ( updraftlion . updraft _settings _url ) ;
} else {
$ . unblockUI ( ) ;
if ( resp . hasOwnProperty ( 'error_message' ) && resp . error _message ) {
alert ( resp . error _message ) ;
}
}
} , { action : 'updraft_importsettings' , nonce : updraftplus _settings _nonce , json _parse : false } ) ;
2016-11-28 21:52:15 -08:00
} else {
$ . unblockUI ( ) ;
}
}
2018-01-26 15:50:15 +01:00
/ * *
* Retrieve the current settings from the DOM
*
* @ param { string } output _format - the output format ; valid values are 'string' or 'object'
*
* @ returns String | Object
* /
function gather _updraft _settings ( output _format ) {
var form _data = '' ;
var output _format = ( 'undefined' === typeof output _format ) ? 'string' : output _format ;
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
if ( 'object' == output _format ) {
// Excluding the unnecessary 'action' input avoids triggering a very mis-conceived mod_security rule seen on one user's site
form _data = $ ( "#updraft-navtab-settings-content form input[name!='action'][name!='option_page'][name!='_wpnonce'][name!='_wp_http_referer'], #updraft-navtab-settings-content form textarea, #updraft-navtab-settings-content form select, #updraft-navtab-settings-content form input[type=checkbox]" ) . serializeJSON ( { checkboxUncheckedValue : '0' , useIntKeysAsArrayIndex : true } ) ;
} else {
// Excluding the unnecessary 'action' input avoids triggering a very mis-conceived mod_security rule seen on one user's site
form _data = $ ( "#updraft-navtab-settings-content form input[name!='action'], #updraft-navtab-settings-content form textarea, #updraft-navtab-settings-content form select" ) . serialize ( ) ;
// include unchecked checkboxes. user filter to only include unchecked boxes.
$ . each ( $ ( '#updraft-navtab-settings-content form input[type=checkbox]' )
. filter ( function ( idx ) {
return $ ( this ) . prop ( 'checked' ) == false
} ) ,
function ( idx , el ) {
// attach matched element names to the form_data with chosen value.
var empty _val = '0' ;
form _data += '&' + $ ( el ) . attr ( 'name' ) + '=' + empty _val ;
}
) ;
}
2016-11-28 21:52:15 -08:00
return form _data ;
}
2018-01-26 15:50:15 +01:00
/ * *
* Method to parse the response from the backend and update the page with the returned content or display error messages if failed
*
* @ param { string } response - the JSON - encoded response containing information to update the settings page with
*
* @ return { object } - the decoded response ( empty if decoding was not successful )
* /
2016-11-28 21:52:15 -08:00
function updraft _handle _page _updates ( response ) {
try {
2018-01-26 15:50:15 +01:00
var resp = ud _parse _json ( response ) ;
2016-11-28 21:52:15 -08:00
var messages = resp . messages ;
2018-01-26 15:50:15 +01:00
// var debug = resp.changed.updraft_debug_mode;
2016-11-28 21:52:15 -08:00
// If backup dir is not writable, change the text, and grey out the 'Backup Now' button
var backup _dir _writable = resp . backup _dir . writable ;
var backup _dir _message = resp . backup _dir . message ;
var backup _button _title = resp . backup _dir . button _title ;
} catch ( e ) {
console . log ( e ) ;
console . log ( response ) ;
alert ( updraftlion . jsonnotunderstood ) ;
$ . unblockUI ( ) ;
2018-01-26 15:50:15 +01:00
return { } ;
2016-11-28 21:52:15 -08:00
}
if ( resp . hasOwnProperty ( 'changed' ) ) {
console . log ( "UpdraftPlus: savesettings: some values were changed after being filtered" ) ;
console . log ( resp . changed ) ;
2018-01-26 15:50:15 +01:00
for ( prop in resp . changed ) {
if ( 'object' === typeof resp . changed [ prop ] ) {
for ( innerprop in resp . changed [ prop ] ) {
if ( ! $ ( "[name='" + innerprop + "']" ) . is ( ':checkbox' ) ) {
2016-11-28 21:52:15 -08:00
$ ( "[name='" + prop + "[" + innerprop + "]']" ) . val ( resp . changed [ prop ] [ innerprop ] ) ;
}
}
} else {
2018-01-26 15:50:15 +01:00
if ( ! $ ( "[name='" + prop + "']" ) . is ( ':checkbox' ) ) {
2016-11-28 21:52:15 -08:00
$ ( "[name='" + prop + "']" ) . val ( resp . changed [ prop ] ) ;
}
}
}
}
$ ( '#updraft_writable_mess' ) . html ( backup _dir _message ) ;
2018-01-26 15:50:15 +01:00
if ( false == backup _dir _writable ) {
2016-11-28 21:52:15 -08:00
$ ( '#updraft-backupnow-button' ) . attr ( 'disabled' , 'disabled' ) ;
$ ( '#updraft-backupnow-button' ) . attr ( 'title' , backup _button _title ) ;
$ ( '.backupdirrow' ) . css ( 'display' , 'table-row' ) ;
} else {
$ ( '#updraft-backupnow-button' ) . removeAttr ( 'disabled' ) ;
$ ( '#updraft-backupnow-button' ) . removeAttr ( 'title' ) ;
2018-01-26 15:50:15 +01:00
// $('.backupdirrow').hide();
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
if ( resp . hasOwnProperty ( 'updraft_include_more_path' ) ) {
$ ( '#backupnow_includefiles_moreoptions' ) . html ( resp . updraft _include _more _path ) ;
}
2016-11-28 21:52:15 -08:00
if ( resp . hasOwnProperty ( 'backup_now_message' ) ) { $ ( '#backupnow_remote_container' ) . html ( resp . backup _now _message ) ; }
// Move from 2 to 1
$ ( '.updraftmessage' ) . remove ( ) ;
$ ( '#updraft_backup_started' ) . before ( resp . messages ) ;
$ ( '#next-backup-table-inner' ) . html ( resp . scheduled ) ;
2018-01-26 15:50:15 +01:00
return resp ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
/ * *
* This function has the workings for checking if any cloud storage needs authentication
* If so , these are amended to the HTML and the popup is shown to the users .
* /
2016-11-28 21:52:15 -08:00
function check _cloud _authentication ( ) {
var show _auth _modal = false ;
jQuery ( '#updraft-authenticate-modal-innards' ) . html ( '' ) ;
jQuery ( "div[class*=updraft_authenticate_] a.updraft_authlink" ) . each ( function ( ) {
2018-01-26 15:50:15 +01:00
jQuery ( "#updraft-authenticate-modal-innards" ) . append ( '<p><a href="' + jQuery ( this ) . attr ( 'href' ) + '">' + jQuery ( this ) . html ( ) + '</a></p>' ) ;
show _auth _modal = true ;
2016-11-28 21:52:15 -08:00
} ) ;
2018-01-26 15:50:15 +01:00
if ( show _auth _modal ) {
2016-11-28 21:52:15 -08:00
var updraft _authenticate _modal _buttons = { } ;
2018-01-26 15:50:15 +01:00
updraft _authenticate _modal _buttons [ updraftlion . cancel ] = function ( ) {
jQuery ( this ) . dialog ( "close" ) ; } ;
2016-11-28 21:52:15 -08:00
2018-01-26 15:50:15 +01:00
jQuery ( '#updraft-authenticate-modal' ) . dialog ( { autoOpen : true ,
modal : true ,
resizable : false ,
2016-11-28 21:52:15 -08:00
draggable : false ,
buttons : updraft _authenticate _modal _buttons ,
width : 'auto' } ) . dialog ( 'open' ) ;
}
}
} ) ;
2018-01-26 15:50:15 +01:00
// For When character set and collate both are unsupported at restoration time and if user change anyone substitution dropdown from both, Other substitution select box value should be change respectively.
jQuery ( document ) . ready ( function ( $ ) {
jQuery ( '#updraft-restore-modal' ) . on ( 'change' , '#updraft_restorer_charset' , function ( e ) {
if ( $ ( '#updraft_restorer_charset' ) . length && $ ( '#updraft_restorer_collate' ) . length && $ ( '#collate_change_on_charset_selection_data' ) . length ) {
var updraft _restorer _charset = $ ( '#updraft_restorer_charset' ) . val ( ) ;
// For only show collate which are related to charset
$ ( '#updraft_restorer_collate option' ) . show ( ) ;
$ ( '#updraft_restorer_collate option[data-charset!=' + updraft _restorer _charset + ']' ) . hide ( ) ;
updraft _send _command ( 'collate_change_on_charset_selection' , {
collate _change _on _charset _selection _data : $ ( '#collate_change_on_charset_selection_data' ) . val ( ) ,
updraft _restorer _charset : updraft _restorer _charset ,
updraft _restorer _collate : $ ( '#updraft_restorer_collate' ) . val ( ) ,
} , function ( response ) {
if ( response . hasOwnProperty ( 'is_action_required' ) && 1 == response . is _action _required && response . hasOwnProperty ( 'similar_type_collate' ) ) {
$ ( '#updraft_restorer_collate' ) . val ( response . similar _type _collate ) ;
}
} ) ;
2016-11-28 21:52:15 -08:00
}
2018-01-26 15:50:15 +01:00
} ) ;
} ) ;