- partially reviewed #1361 and DB update for these changes;

This commit is contained in:
Mykyta Synelnikov
2023-12-01 00:50:28 +02:00
parent 2c5f396795
commit ebec7d5f5f
3 changed files with 244 additions and 0 deletions
+132
View File
@@ -0,0 +1,132 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
function um_upgrade_usermeta_count280() {
UM()->admin()->check_ajax_nonce();
um_maybe_unset_time_limit();
global $wpdb;
$count = $wpdb->get_var(
"SELECT COUNT(*)
FROM {$wpdb->usermeta}
WHERE meta_key = 'use_gdpr_agreement' OR
meta_key = 'um_user_blocked__timestamp' OR
meta_key = '_um_last_login' OR
meta_key = 'submitted'"
);
wp_send_json_success( array( 'count' => $count ) );
}
function um_upgrade_metadata_per_user280() {
UM()->admin()->check_ajax_nonce();
um_maybe_unset_time_limit();
if ( empty( $_POST['page'] ) ) {
wp_send_json_error( __( 'Wrong data', 'ultimate-member' ) );
}
global $wpdb;
$per_page = 100;
$usermeta = $wpdb->get_results(
$wpdb->prepare(
"SELECT *
FROM {$wpdb->usermeta}
WHERE meta_key = 'use_gdpr_agreement' OR
meta_key = 'um_user_blocked__timestamp' OR
meta_key = '_um_last_login' OR
meta_key = 'submitted'
LIMIT %d, %d",
( absint( $_POST['page'] ) - 1 ) * $per_page,
$per_page
),
ARRAY_A
);
// Make non-GMT timestamp as GMT base on current wp_timezone().
$offset = (int) ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
foreach ( $usermeta as $usermeta_row ) {
$updated_meta = null;
if ( empty( $usermeta_row['meta_key'] ) ) {
continue;
}
$user_id = $usermeta_row['user_id'];
if ( 'use_gdpr_agreement' === $usermeta_row['meta_key'] ) {
if ( is_numeric( $usermeta_row['meta_value'] ) ) {
update_user_meta( $user_id, 'um_use_gdpr_agreement_backup', $usermeta_row['meta_value'] );
$updated_meta = gmdate( 'Y-m-d H:i:s', $usermeta_row['meta_value'] );
}
} elseif ( '_um_last_login' === $usermeta_row['meta_key'] ) {
if ( is_numeric( $usermeta_row['meta_value'] ) ) {
update_user_meta( $user_id, '_um_last_login_backup', $usermeta_row['meta_value'] );
if ( ! empty( $offset ) ) {
$updated_meta = (int) $usermeta_row['meta_value'] - $offset;
} else {
$updated_meta = (int) $usermeta_row['meta_value'];
}
$updated_meta = gmdate( 'Y-m-d H:i:s', $updated_meta );
}
} elseif ( 'submitted' === $usermeta_row['meta_key'] ) {
$unserialized_meta = maybe_unserialize( $usermeta_row['meta_value'] );
if ( isset( $unserialized_meta['use_gdpr_agreement'] ) && is_numeric( $unserialized_meta['use_gdpr_agreement'] ) ) {
update_user_meta( $user_id, 'submitted_backup', $unserialized_meta );
$unserialized_meta['use_gdpr_agreement'] = gmdate( 'Y-m-d H:i:s', $unserialized_meta['use_gdpr_agreement'] );
$updated_meta = maybe_serialize( $unserialized_meta );
}
} elseif ( 'um_user_blocked__timestamp' === $usermeta_row['meta_key'] ) {
if ( ! empty( $offset ) ) {
$last_scanned_time = $usermeta_row['meta_value'];
if ( ! empty( $last_scanned_time ) ) {
update_user_meta( $user_id, 'um_user_blocked__timestamp_backup', $last_scanned_time );
$last_scanned_time = strtotime( $last_scanned_time ) - $offset;
$updated_meta = gmdate( 'Y-m-d H:i:s', $last_scanned_time );
}
}
}
if ( isset( $updated_meta ) ) {
update_user_meta( $user_id, $usermeta_row['meta_key'], $updated_meta );
}
}
$from = ( absint( $_POST['page'] ) * $per_page ) - $per_page + 1;
$to = absint( $_POST['page'] ) * $per_page;
// translators: %1$s is a from; %2$s is a to.
wp_send_json_success( array( 'message' => sprintf( __( 'Metadata from %1$s to %2$s were upgraded successfully...', 'ultimate-member' ), $from, $to ) ) );
}
function um_upgrade_update_options280() {
UM()->admin()->check_ajax_nonce();
um_maybe_unset_time_limit();
$offset = (int) ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
if ( ! empty( $offset ) ) {
$last_scanned_time = get_option( 'um_secure_last_time_scanned' );
if ( ! empty( $last_scanned_time ) ) {
update_option( 'um_secure_last_time_scanned_backup', $last_scanned_time );
$last_scanned_time = strtotime( $last_scanned_time ) - $offset;
$last_scanned_time = gmdate( 'Y-m-d H:i:s', $last_scanned_time );
update_option( 'um_secure_last_time_scanned', $last_scanned_time );
}
}
// delete temporarily option for fields upgrade
update_option( 'um_last_version_upgrade', '2.8.0' );
wp_send_json_success( array( 'message' => __( 'Database has been updated successfully', 'ultimate-member' ) ) );
}
+10
View File
@@ -0,0 +1,10 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
return array(
'usermeta_count280' => 'usermeta_count280',
'metadata_per_user280' => 'metadata_per_user280',
'update_options280' => 'update_options280',
);
+102
View File
@@ -0,0 +1,102 @@
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
?>
<script type="text/javascript">
jQuery( document ).ready( function() {
var users_pages;
var current_page = 1;
var users_per_page = 100;
um_add_upgrade_log( '<?php echo esc_js( __( 'Upgrade user metadata...', 'ultimate-member' ) ); ?>' );
jQuery.ajax({
url: wp.ajax.settings.url,
type: 'POST',
dataType: 'json',
data: {
action: 'um_usermeta_count280',
nonce: um_admin_scripts.nonce
},
success: function( response ) {
if ( typeof response.data.count != 'undefined' ) {
um_add_upgrade_log( '<?php echo esc_js( __( 'There are ', 'ultimate-member' ) ); ?>' + response.data.count + '<?php echo esc_js( __( ' metarows...', 'ultimate-member' ) ); ?>' );
um_add_upgrade_log( '<?php echo esc_js( __( 'Start metadata upgrading...', 'ultimate-member' ) ); ?>' );
users_pages = Math.ceil( response.data.count / users_per_page );
setTimeout( function () {
um_update_metadata_per_user280();
}, um_request_throttle );
} else {
um_wrong_ajax();
}
},
error: function() {
um_something_wrong();
}
});
function um_update_metadata_per_user280() {
if ( current_page <= users_pages ) {
jQuery.ajax({
url: wp.ajax.settings.url,
type: 'POST',
dataType: 'json',
data: {
action: 'um_metadata_per_user280',
page: current_page,
nonce: um_admin_scripts.nonce
},
success: function( response ) {
if ( typeof response.data != 'undefined' ) {
um_add_upgrade_log( response.data.message );
current_page++;
setTimeout( function () {
um_update_metadata_per_user280();
}, um_request_throttle );
} else {
um_wrong_ajax();
}
},
error: function() {
um_something_wrong();
}
});
} else {
setTimeout( function () {
um_option_update280();
}, um_request_throttle );
}
}
//clear users cache
function um_option_update280() {
um_add_upgrade_log( '<?php echo esc_js( __( 'Update options table...', 'ultimate-member' ) ); ?>' );
jQuery.ajax({
url: wp.ajax.settings.url,
type: 'POST',
dataType: 'json',
data: {
action: 'um_update_options280',
nonce: um_admin_scripts.nonce
},
success: function( response ) {
if ( typeof response.data != 'undefined' ) {
um_add_upgrade_log( response.data.message );
//switch to the next package
um_run_upgrade();
} else {
um_wrong_ajax();
}
},
error: function() {
um_something_wrong();
}
});
}
});
</script>