<?php // vars $button = __('Upgrade Sites'); // extract extract($args); ?> <div id="acf-upgrade-wrap" class="wrap"> <h1><?php _e("Advanced Custom Fields Database Upgrade",'acf'); ?></h1> <p><?php echo sprintf( __("The following sites require a DB upgrade. Check the ones you want to update and then click %s.", 'acf'), '"' . $button . '"'); ?></p> <p><input type="submit" name="upgrade" value="<?php echo $button; ?>" class="button" id="upgrade-sites"></p> <table class="wp-list-table widefat"> <thead> <tr> <td class="manage-column check-column" scope="col"><input type="checkbox" id="sites-select-all"></td> <th class="manage-column" scope="col" style="width:33%;"><label for="sites-select-all"><?php _e("Site", 'acf'); ?></label></th> <th><?php _e("Description", 'acf'); ?></th> </tr> </thead> <tfoot> <tr> <td class="manage-column check-column" scope="col"><input type="checkbox" id="sites-select-all-2"></td> <th class="manage-column" scope="col"><label for="sites-select-all-2"><?php _e("Site", 'acf'); ?></label></th> <th><?php _e("Description", 'acf'); ?></th> </tr> </tfoot> <tbody id="the-list"> <?php foreach( $sites as $i => $site ): ?> <tr<?php if( $i % 2 == 0 ): ?> class="alternate"<?php endif; ?>> <th class="check-column" scope="row"> <?php if( $site['updates'] ): ?> <input type="checkbox" value="<?php echo $site['blog_id']; ?>" name="checked[]"> <?php endif; ?> </th> <td> <strong><?php echo $site['name']; ?></strong><br /><?php echo $site['url']; ?> </td> <td> <?php if( $site['updates'] ): ?> <span class="response"><?php printf(__('Site requires database upgrade from %s to %s', 'acf'), $site['acf_version'], $plugin_version); ?></span> <?php else: ?> <?php _e("Site is up to date", 'acf'); ?> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table> <p><input type="submit" name="upgrade" value="<?php echo $button; ?>" class="button" id="upgrade-sites-2"></p> <p class="show-on-complete"><?php echo sprintf( __('Database Upgrade complete. <a href="%s">Return to network dashboard</a>', 'acf'), network_admin_url() ); ?></p> <style type="text/css"> /* hide show */ .show-on-complete { display: none; } </style> <script type="text/javascript"> (function($) { var upgrader = { $buttons: null, $inputs: null, i: 0, init : function(){ // reference var self = this; // vars this.$buttons = $('#upgrade-sites, #upgrade-sites-2'); // events this.$buttons.on('click', function( e ){ // prevent default e.preventDefault(); // confirm var answer = confirm("<?php _e('It is strongly recommended that you backup your database before proceeding. Are you sure you wish to run the updater now?', 'acf'); ?>"); // bail early if no confirm if( !answer ) { return; } // populate inputs self.$inputs = $('#the-list input:checked'); // upgrade self.upgrade(); }); // return return this; }, upgrade: function(){ // reference var self = this; // bail early if no sites if( !this.$inputs.length ) { return; } // complete if( this.i >= this.$inputs.length ) { this.complete(); return; } // disable buttons this.$buttons.attr('disabled', 'disabled'); // vars var $input = this.$inputs.eq( this.i ), $tr = $input.closest('tr'), text = '<?php _e('Upgrade complete', 'acf'); ?>'; // add loading $tr.find('.response').html('<i class="acf-loading"></i></span> <?php printf(__('Upgrading data to version %s', 'acf'), $plugin_version); ?>'); // get results var xhr = $.ajax({ url: '<?php echo admin_url('admin-ajax.php'); ?>', dataType: 'json', type: 'post', data: { action: 'acf/admin/db_update', nonce: '<?php echo wp_create_nonce('acf_db_update'); ?>', blog_id: $input.val(), }, success: function( json ){ // remove input $input.prop('checked', false); $input.remove(); // vars var message = acf.get_ajax_message(json); // bail early if no message text if( !message.text ) { return; } // update text text = '<pre>' + message.text + '</pre>'; }, complete: function(){ $tr.find('.response').html( text ); // upgrade next site self.next(); } }); }, next: function(){ this.i++; this.upgrade(); }, complete: function(){ // enable buttons this.$buttons.removeAttr('disabled'); // show message $('.show-on-complete').show(); } }.init(); })(jQuery); </script> </div>