laipower/wp-content/plugins/easy-digital-downloads/includes/admin/upgrades/upgrades.php

146 lines
4.0 KiB
PHP

<?php
/**
* Upgrade Screen
*
* @package EDD
* @subpackage Admin/Upgrades
* @copyright Copyright (c) 2018, Easy Digital Downloads, LLC
* @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
* @since 1.3.1
*/
// Exit if accessed directly
defined( 'ABSPATH' ) || exit;
/**
* Render Upgrades Screen
*
* @since 1.3.1
* @return void
*/
function edd_upgrades_screen() {
// Get the upgrade being performed
$action = isset( $_GET['edd-upgrade'] )
? sanitize_text_field( $_GET['edd-upgrade'] )
: ''; ?>
<div class="wrap">
<h1><?php _e( 'Upgrades', 'easy-digital-downloads' ); ?></h1>
<hr class="wp-header-end">
<?php if ( is_callable( 'edd_upgrade_render_' . $action ) ) {
// Until we have fully migrated all upgrade scripts to this new system,
// we will selectively enqueue the necessary scripts.
add_filter( 'edd_load_admin_scripts', '__return_true' );
edd_load_admin_scripts( 'edd-admin-upgrades' );
// This is the new method to register an upgrade routine, so we can use
// an ajax and progress bar to display any needed upgrades.
call_user_func( 'edd_upgrade_render_' . $action );
// Remove the above filter
remove_filter( 'edd_load_admin_scripts', '__return_true' );
} else {
// This is the legacy upgrade method, which requires a page refresh
// at each step.
$step = isset( $_GET['step'] ) ? absint( $_GET['step'] ) : 1;
$total = isset( $_GET['total'] ) ? absint( $_GET['total'] ) : false;
$custom = isset( $_GET['custom'] ) ? absint( $_GET['custom'] ) : 0;
$number = isset( $_GET['number'] ) ? absint( $_GET['number'] ) : 100;
$steps = round( ( $total / $number ), 0 );
// Bump step
if ( ( $steps * $number ) < $total ) {
$steps++;
}
// Update step option
update_option( 'edd_doing_upgrade', array(
'page' => 'edd-upgrades',
'edd-upgrade' => $action,
'step' => $step,
'total' => $total,
'custom' => $custom,
'steps' => $steps
) );
// Prevent step estimate from going over
if ( $step > $steps ) {
$steps = $step;
}
if ( ! empty( $action ) ) :
// Redirect URL
$redirect = add_query_arg(
array(
'edd_action' => sanitize_key( $action ),
'step' => absint( $step ),
'total' => absint( $total ),
'custom' => absint( $custom ),
'_wpnonce' => wp_create_nonce( 'edd-upgrade' ),
),
admin_url( 'index.php' )
);
?>
<div id="edd-upgrade-status">
<p><?php _e( 'The upgrade process has started, please be patient. This could take several minutes. You will be automatically redirected when the upgrade is finished.', 'easy-digital-downloads' ); ?></p>
<?php if ( ! empty( $total ) ) : ?>
<p><strong><?php printf( __( 'Step %d of approximately %d running', 'easy-digital-downloads' ), $step, $steps ); ?></strong></p>
<?php endif; ?>
</div>
<script type="text/javascript">
setTimeout( function() {
document.location.href = '<?php echo esc_url_raw( $redirect ); ?>';
}, 250 );
</script>
<?php else :
// Redirect URL
$redirect = admin_url( 'index.php' ); ?>
<div id="edd-upgrade-status">
<p>
<?php _e( 'The upgrade process has started, please be patient. This could take several minutes. You will be automatically redirected when the upgrade is finished.', 'easy-digital-downloads' ); ?>
<img src="<?php echo esc_url( EDD_PLUGIN_URL . 'assets/images/loading.gif' ); ?>" id="edd-upgrade-loader"/>
</p>
</div>
<script type="text/javascript">
jQuery( document ).ready( function() {
// Trigger upgrades on page load
var data = {
action: 'edd_trigger_upgrades',
nonce: '<?php echo esc_attr( wp_create_nonce( 'edd-upgrade' ) ); ?>'
};
jQuery.post( ajaxurl, data, function (response) {
if ( 'complete' !== response ) {
return;
}
jQuery( '#edd-upgrade-loader' ).hide();
setTimeout( function() {
document.location.href = '<?php echo esc_url_raw( $redirect ); ?>';
}, 250 );
});
});
</script>
<?php endif;
} ?>
</div>
<?php
}