mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-07-18 06:03:38 +09:00
- fixed upgrade process for big DB data;
- small fixes for notices;
This commit is contained in:
@@ -21,6 +21,8 @@ if ( ! class_exists( 'Admin_Upgrade' ) ) {
|
||||
* @var
|
||||
*/
|
||||
var $update_versions;
|
||||
var $update_packages;
|
||||
var $necessary_packages;
|
||||
|
||||
|
||||
/**
|
||||
@@ -34,18 +36,248 @@ if ( ! class_exists( 'Admin_Upgrade' ) ) {
|
||||
*/
|
||||
function __construct() {
|
||||
$this->packages_dir = plugin_dir_path( __FILE__ ) . 'packages' . DIRECTORY_SEPARATOR;
|
||||
$this->necessary_packages = $this->need_run_upgrades();
|
||||
|
||||
$um_last_version_upgrade = get_option( 'um_last_version_upgrade' );
|
||||
if ( ! empty( $this->necessary_packages ) ) {
|
||||
add_action( 'admin_notices', array( $this, 'need_upgrade' ) );
|
||||
|
||||
if ( ! $um_last_version_upgrade || version_compare( $um_last_version_upgrade, ultimatemember_version, '<' ) )
|
||||
add_action( 'admin_init', array( $this, 'packages' ), 10 );
|
||||
$this->init_packages_ajax();
|
||||
add_action( 'admin_menu', array( $this, 'admin_menu' ), 0 );
|
||||
|
||||
add_action( 'wp_ajax_um_run_package', array( $this, 'ajax_run_package' ) );
|
||||
add_action( 'wp_ajax_um_get_packages', array( $this, 'ajax_get_packages' ) );
|
||||
} else {
|
||||
add_action( 'admin_notices', array( $this, 'updated_successfully' ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function need_upgrade() {
|
||||
?>
|
||||
<div class="error"><p><?php printf( __( 'You need to run upgrade <a href="%s">here</a>', 'ultimate-member' ), add_query_arg( array( 'page' => 'um_upgrade' ), admin_url( 'admin.php' ) ) ) ?></p></div>
|
||||
<?php
|
||||
}
|
||||
|
||||
|
||||
function updated_successfully() {
|
||||
if ( isset( $_GET['msg'] ) && 'updated' == $_GET['msg'] ) { ?>
|
||||
<div class="updated"><p><?php _e( 'Successfully Upgraded', 'ultimate-member' ) ?></p></div>
|
||||
<?php }
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get array of necessary upgrade packages
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function need_run_upgrades() {
|
||||
$all_packages = $this->get_packages();
|
||||
$um_last_version_upgrade = get_option( 'um_last_version_upgrade' );
|
||||
|
||||
if ( ! $um_last_version_upgrade ) {
|
||||
return $all_packages;
|
||||
}
|
||||
|
||||
$diff_packages = array();
|
||||
foreach ( $all_packages as $package ) {
|
||||
if ( version_compare( $um_last_version_upgrade, $package, '<' ) ) {
|
||||
$diff_packages[] = $package;
|
||||
}
|
||||
}
|
||||
|
||||
return $diff_packages;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get all upgrade packages
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
function get_packages() {
|
||||
$update_versions = array();
|
||||
$handle = opendir( $this->packages_dir );
|
||||
if ( $handle ) {
|
||||
while ( false !== ( $filename = readdir( $handle ) ) ) {
|
||||
if ( $filename != '.' && $filename != '..' ) {
|
||||
if ( is_dir( $this->packages_dir . DIRECTORY_SEPARATOR . $filename ) ) {
|
||||
$update_versions[] = $filename;
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir( $handle );
|
||||
|
||||
usort( $update_versions, array( &$this, 'version_compare_sort' ) );
|
||||
}
|
||||
|
||||
return $update_versions;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function init_packages_ajax() {
|
||||
foreach ( $this->necessary_packages as $package ) {
|
||||
$hooks_file = $this->packages_dir . DIRECTORY_SEPARATOR . $package . DIRECTORY_SEPARATOR . 'hooks.php';
|
||||
if ( file_exists( $hooks_file ) ) {
|
||||
$pack_ajax_hooks = include $hooks_file;
|
||||
|
||||
foreach ( $pack_ajax_hooks as $action => $function ) {
|
||||
add_action( 'wp_ajax_um_' . $action, "um_upgrade_$function" );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function init_packages_ajax_handlers() {
|
||||
foreach ( $this->necessary_packages as $package ) {
|
||||
$handlers_file = $this->packages_dir . DIRECTORY_SEPARATOR . $package . DIRECTORY_SEPARATOR . 'functions.php';
|
||||
if ( file_exists( $handlers_file ) ) {
|
||||
include $handlers_file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Add Upgrades admin menu
|
||||
*/
|
||||
function admin_menu() {
|
||||
add_submenu_page( 'ultimatemember', __( 'Upgrade', 'ultimate-member' ), '<span style="color:#ca4a1f;">' . __( 'Upgrade', 'ultimate-member' ) . '</span>', 'manage_options', 'um_upgrade', array( &$this, 'upgrade_page' ) );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Upgrade Menu Callback Page
|
||||
*/
|
||||
function upgrade_page() {
|
||||
$um_last_version_upgrade = get_option( 'um_last_version_upgrade' ); ?>
|
||||
|
||||
<div class="wrap">
|
||||
<h2><?php _e( 'Ultimate Member - Upgrade Process', 'ultimate-member' ) ?></h2>
|
||||
<p>You have installed <?php echo ultimatemember_version ?> you need to upgrade your previous <?php echo $um_last_version_upgrade ?></p>
|
||||
<h4>Upgrade Log</h4>
|
||||
<div id="upgrade_log" style="width: 100%;height:300px; overflow: auto;border: 1px solid #a1a1a1;margin: 0 0 10px 0;"></div>
|
||||
<div>
|
||||
<input type="button" id="run_upgrade" class="button button-primary" value="<?php esc_attr_e( 'Run', 'ultimate-member' ) ?>"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var um_packages;
|
||||
|
||||
jQuery( document ).ready( function() {
|
||||
jQuery( '#run_upgrade' ).click( function() {
|
||||
jQuery(this).prop( 'disabled', true );
|
||||
|
||||
um_add_upgrade_log( 'Upgrade Process Started...' );
|
||||
um_add_upgrade_log( 'Get Upgrades Packages...' );
|
||||
|
||||
jQuery.ajax({
|
||||
url: '<?php echo admin_url( 'admin-ajax.php' ) ?>',
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
action: 'um_get_packages'
|
||||
},
|
||||
success: function( response ) {
|
||||
um_packages = response.data.packages;
|
||||
|
||||
um_add_upgrade_log( 'Upgrades Packages are ready, start unpacking...' );
|
||||
|
||||
//run first package....the running of the next packages will be at each init.php file
|
||||
um_run_upgrade();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @returns {boolean}
|
||||
*/
|
||||
function um_run_upgrade() {
|
||||
if ( um_packages.length ) {
|
||||
var pack = um_packages.shift();
|
||||
um_add_upgrade_log( '<br />=================================================================' );
|
||||
um_add_upgrade_log( '<h4 style="font-weight: bold;">Prepare package "' + pack + '" version...</h4>' );
|
||||
jQuery.ajax({
|
||||
url: '<?php echo admin_url( 'admin-ajax.php' ) ?>',
|
||||
type: 'POST',
|
||||
dataType: 'html',
|
||||
data: {
|
||||
action: 'um_run_package',
|
||||
pack: pack
|
||||
},
|
||||
success: function( html ) {
|
||||
um_add_upgrade_log( 'Package "' + pack + '" is ready. Start the execution...' );
|
||||
jQuery( '#run_upgrade' ).after( html );
|
||||
}
|
||||
});
|
||||
} else {
|
||||
window.location = '<?php echo add_query_arg( array( 'page' => 'ultimatemember', 'msg' => 'updated' ), admin_url( 'admin.php' ) ) ?>'
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param line
|
||||
*/
|
||||
function um_add_upgrade_log( line ) {
|
||||
var log_field = jQuery( '#upgrade_log' );
|
||||
var previous_html = log_field.html();
|
||||
log_field.html( previous_html + line + "<br />" );
|
||||
}
|
||||
|
||||
|
||||
function um_wrong_ajax() {
|
||||
um_add_upgrade_log( 'Wrong AJAX response...' );
|
||||
um_add_upgrade_log( 'Your upgrade was crashed, please contact with support' );
|
||||
}
|
||||
|
||||
|
||||
function um_something_wrong() {
|
||||
um_add_upgrade_log( 'Something went wrong with AJAX request...' );
|
||||
um_add_upgrade_log( 'Your upgrade was crashed, please contact with support' );
|
||||
}
|
||||
</script>
|
||||
|
||||
<?php
|
||||
|
||||
}
|
||||
|
||||
|
||||
function ajax_run_package() {
|
||||
if ( empty( $_POST['pack'] ) ) {
|
||||
exit('');
|
||||
} else {
|
||||
ob_start();
|
||||
include $this->packages_dir . DIRECTORY_SEPARATOR . $_POST['pack'] . DIRECTORY_SEPARATOR . 'init.php';
|
||||
ob_get_flush();
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function ajax_get_packages() {
|
||||
$update_versions = $this->need_run_upgrades();
|
||||
wp_send_json_success( array( 'packages' => $update_versions ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* Load packages
|
||||
*/
|
||||
public function packages() {
|
||||
/*public function packages() {
|
||||
if ( ! ini_get( 'safe_mode' ) ) {
|
||||
@set_time_limit(0);
|
||||
}
|
||||
@@ -70,7 +302,7 @@ if ( ! class_exists( 'Admin_Upgrade' ) ) {
|
||||
update_option( 'um_last_version_upgrade', $update_version );
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
/**
|
||||
@@ -93,6 +325,31 @@ if ( ! class_exists( 'Admin_Upgrade' ) ) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Parse packages dir for packages files
|
||||
*/
|
||||
/*function set_update_versions_() {
|
||||
$update_versions = array();
|
||||
$handle = opendir( $this->packages_dir );
|
||||
if ( $handle ) {
|
||||
while ( false !== ( $filename = readdir( $handle ) ) ) {
|
||||
if ( $filename != '.' && $filename != '..' ) {
|
||||
var_dump( $filename );
|
||||
if ( is_dir( $this->packages_dir . DIRECTORY_SEPARATOR . $filename ) ) {
|
||||
$update_versions[] = $filename;
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir( $handle );
|
||||
|
||||
usort( $update_versions, array( &$this, 'version_compare_sort' ) );
|
||||
|
||||
$this->update_packages = $update_versions;
|
||||
}
|
||||
}*/
|
||||
|
||||
|
||||
/**
|
||||
* Sort versions by version compare function
|
||||
* @param $a
|
||||
|
||||
Reference in New Issue
Block a user