- added ability to use metatable;

This commit is contained in:
nikitasinelnikov
2020-01-02 17:21:02 +02:00
parent 33ce6d7ae5
commit 8ae8d997bd
20 changed files with 690 additions and 264 deletions
+34 -14
View File
@@ -132,18 +132,32 @@ function um_members_hide_preloader( directory ) {
function um_set_range_label( slider, ui ) {
var placeholder = slider.siblings( '.um-slider-range' ).data( 'placeholder' );
var placeholder = '';
var placeholder_s = slider.siblings( '.um-slider-range' ).data( 'placeholder-s' );
var placeholder_p = slider.siblings( '.um-slider-range' ).data( 'placeholder-p' );
if( ui ) {
placeholder = placeholder.replace( '\{min_range\}', ui.values[ 0 ] )
.replace( '\{max_range\}', ui.values[ 1 ] )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
if ( ui ) {
if ( ui.values[ 0 ] === ui.values[ 1 ] ) {
placeholder = placeholder_s.replace( '\{value\}', ui.values[ 0 ] )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
} else {
placeholder = placeholder_p.replace( '\{min_range\}', ui.values[ 0 ] )
.replace( '\{max_range\}', ui.values[ 1 ] )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
}
} else {
placeholder = placeholder.replace( '\{min_range\}', slider.slider( "values", 0 ) )
.replace( '\{max_range\}', slider.slider( "values", 1 ) )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
if ( slider.slider( "values", 0 ) === slider.slider( "values", 1 ) ) {
placeholder = placeholder_s.replace( '\{value\}', slider.slider( "values", 0 ) )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
} else {
placeholder = placeholder_p.replace( '\{min_range\}', slider.slider( "values", 0 ) )
.replace( '\{max_range\}', slider.slider( "values", 1 ) )
.replace( '\{field_label\}', slider.siblings( '.um-slider-range' )
.data('label') );
}
}
slider.siblings( '.um-slider-range' ).html( placeholder );
@@ -500,11 +514,17 @@ function um_get_filters_data( directory ) {
return;
}
filter_title = filter.find('div.um-slider-range').data('label');
var filter_value_title;
if ( filter_value_from === filter_value_to ) {
filter_value_title = filter.find('div.um-slider-range').data( 'placeholder-s' ).replace( '\{value\}', filter_value_from )
.replace( '\{field_label\}', filter.find('div.um-slider-range').data('label') );
} else {
filter_value_title = filter.find('div.um-slider-range').data( 'placeholder-p' ).replace( '\{min_range\}', filter_value_from )
.replace( '\{max_range\}', filter_value_to )
.replace( '\{field_label\}', filter.find('div.um-slider-range').data('label') );
}
var filter_value_title = filter.find('div.um-slider-range').data( 'placeholder' ).replace( '\{min_range\}', filter_value_from )
.replace( '\{max_range\}', filter_value_to )
.replace( '\{field_label\}', filter.find('div.um-slider-range').data('label') );
filter_title = filter.find('div.um-slider-range').data('label');
filters_data.push( {'name':filter_name, 'label':filter_title, 'value_label':filter_value_title, 'value':[filter_value_from, filter_value_to], 'type':filter_type} );
}
+1 -1
View File
File diff suppressed because one or more lines are too long
@@ -291,4 +291,33 @@ textarea.um-forms-field.um-small-field {
.um-forms-line[data-conditional] {
display: none;
}
/* Same page update field */
.um-forms-line td .um-same-page-update-wrapper {
display: none;
margin: 7px 0 0 0;
}
.um-forms-line td .um-same-page-update-wrapper input.um-admin-form-same-page-update {
margin: 7px 0 0 0;
}
.um-forms-line td .um-same-page-update-wrapper .upgrade_log {
margin: 7px 0 0 0;
width:100%;
height:150px;
overflow: auto;
border: 1px solid #a1a1a1;
}
.um-forms-line[data-field_type="same_page_update"] {
vertical-align: baseline;
}
.um-forms-line[data-field_type="same_page_update"] th,
.um-forms-line[data-field_type="same_page_update"] td {
vertical-align: baseline;
}
+140
View File
@@ -1,6 +1,146 @@
jQuery(document).ready( function() {
/**
* Same page upgrade field
*/
jQuery( document.body ).on( 'click', '.um-forms-field[data-log-object]', function() {
var obj = jQuery( this ).data( 'log-object' );
if ( jQuery( this ).is( ':checked' ) ) {
jQuery( this ).siblings( '.um-same-page-update-' + obj ).show();
} else {
jQuery( this ).siblings( '.um-same-page-update-' + obj ).hide();
}
});
jQuery( document.body ).on( 'click', '.um-admin-form-same-page-update', function() {
var field_key = jQuery(this).data('upgrade_cb');
jQuery(this).prop( 'disabled', true );
um_add_same_page_log( field_key, wp.i18n.__( 'Upgrade Process Started...', 'ultimate-member' ) );
if ( field_key === 'sync_metatable' ) {
var metadata_pages = 0;
var metadata_per_page = 50;
var current_page;
jQuery.ajax({
url: wp.ajax.settings.url,
type: 'POST',
dataType: 'json',
data: {
action: 'um_same_page_update',
cb_func: 'um_usermeta_fields',
nonce: um_admin_scripts.nonce
},
success: function( response ) {
get_metadata();
},
error: function() {
um_same_page_something_wrong( field_key );
}
});
/**
*
* @returns {boolean}
*/
function get_metadata() {
current_page = 1;
um_add_same_page_log( field_key, wp.i18n.__( 'Getting metadata', 'ultimate-member' ) );
jQuery.ajax({
url: wp.ajax.settings.url,
type: 'POST',
dataType: 'json',
data: {
action: 'um_same_page_update',
cb_func: 'um_get_metadata',
nonce: um_admin_scripts.nonce
},
success: function( response ) {
if ( typeof response.data.count != 'undefined' ) {
um_add_same_page_log( field_key, wp.i18n.__( 'There are ', 'ultimate-member' ) + response.data.count + wp.i18n.__( ' metadata rows...', 'ultimate-member' ) );
um_add_same_page_log( field_key, wp.i18n.__( 'Start metadata upgrading...', 'ultimate-member' ) );
metadata_pages = Math.ceil( response.data.count / metadata_per_page );
update_metadata_per_page();
} else {
um_same_page_wrong_ajax( field_key );
}
},
error: function() {
um_same_page_something_wrong( field_key );
}
});
return false;
}
function update_metadata_per_page() {
if ( current_page <= metadata_pages ) {
jQuery.ajax({
url: wp.ajax.settings.url,
type: 'POST',
dataType: 'json',
data: {
action: 'um_same_page_update',
cb_func: 'um_update_metadata_per_page',
page: current_page,
nonce: um_admin_scripts.nonce
},
success: function( response ) {
if ( typeof response.data != 'undefined' ) {
um_add_same_page_log( field_key, response.data.message );
current_page++;
update_metadata_per_page();
} else {
um_same_page_wrong_ajax( field_key );
}
},
error: function() {
um_same_page_something_wrong( field_key );
}
});
} else {
return false;
}
}
}
});
/**
*
* @param field_key
* @param line
*/
function um_add_same_page_log( field_key, line ) {
var log_field = jQuery( '.um-same-page-update-' + field_key ).find( '.upgrade_log' );
var previous_html = log_field.html();
log_field.html( previous_html + line + "<br />" );
}
function um_same_page_wrong_ajax( field_key ) {
um_add_same_page_log( field_key, wp.i18n.__( 'Wrong AJAX response...', 'ultimate-member' ) );
um_add_same_page_log( field_key, wp.i18n.__( 'Your upgrade was crashed, please contact with support', 'ultimate-member' ) );
}
function um_same_page_something_wrong( field_key ) {
um_add_same_page_log( field_key, wp.i18n.__( 'Something went wrong with AJAX request...', 'ultimate-member' ) );
um_add_same_page_log( field_key, wp.i18n.__( 'Your upgrade was crashed, please contact with support', 'ultimate-member' ) );
}
/**
* Multi-selects sort
*/
@@ -28,6 +28,8 @@ if ( ! class_exists( 'um\admin\core\Admin_Ajax_Hooks' ) ) {
add_action( 'wp_ajax_um_populate_dropdown_options', array( UM()->builder(), 'populate_dropdown_options' ) );
add_action( 'wp_ajax_um_rated', array( UM()->admin_menu(), 'ultimatemember_rated' ) );
add_action( 'wp_ajax_um_member_directory_default_filter_settings', array( UM()->member_directory(), 'default_filter_settings' ) );
add_action( 'wp_ajax_um_same_page_update', array( UM()->admin_settings(), 'same_page_update_ajax' ) );
}
}
+54
View File
@@ -773,6 +773,60 @@ if ( ! class_exists( 'um\admin\core\Admin_Forms' ) ) {
}
/**
* @param $field_data
*
* @return bool|string
*/
function render_same_page_update( $field_data ) {
if ( empty( $field_data['id'] ) ) {
return false;
}
$id = ( ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] : '' ) . '_' . $field_data['id'];
$id_attr = ' id="' . esc_attr( $id ) . '" ';
$id_attr_hidden = ' id="' . esc_attr( $id ) . '_hidden" ';
$class = ! empty( $field_data['class'] ) ? $field_data['class'] : '';
$class .= ! empty( $field_data['size'] ) ? $field_data['size'] : 'um-long-field';
$class_attr = ' class="um-forms-field ' . esc_attr( $class ) . '" ';
$data = array(
'field_id' => $field_data['id']
);
if ( ! empty( $field_data['data'] ) ) {
$data = array_merge( $data, $field_data['data'] );
}
$data_attr = '';
foreach ( $data as $key => $value ) {
$data_attr .= ' data-' . $key . '="' . esc_attr( $value ) . '" ';
}
if ( ! empty( $field_data['upgrade_cb'] ) ) {
$data_attr .= ' data-log-object="' . esc_attr( $field_data['upgrade_cb'] ) . '" ';
}
$name = $field_data['id'];
$name = ! empty( $this->form_data['prefix_id'] ) ? $this->form_data['prefix_id'] . '[' . $name . ']' : $name;
$name_attr = ' name="' . $name . '" ';
$value = $this->get_field_value( $field_data );
$html = "<input type=\"hidden\" $id_attr_hidden $name_attr value=\"0\" />
<input type=\"checkbox\" $id_attr $class_attr $name_attr $data_attr " . checked( $value, true, false ) . " value=\"1\" />";
if ( ! empty( $field_data['upgrade_cb'] ) ) {
$html .= '<div class="um-same-page-update-wrapper um-same-page-update-' . esc_attr( $field_data['upgrade_cb'] ) . '"><div class="um-same-page-update-description">' . $field_data['upgrade_description'] . '</div><input type="button" data-upgrade_cb="' . $field_data['upgrade_cb'] . '" class="button button-primary um-admin-form-same-page-update" value="' . esc_attr__( 'Run', 'ultimate-member' ) . '"/>
<div class="upgrade_log"></div></div>';
}
return $html;
}
/**
* @param $field_data
*
+132 -181
View File
@@ -80,6 +80,113 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
}
function same_page_update_ajax() {
UM()->admin()->check_ajax_nonce();
if ( empty( $_POST['cb_func'] ) ) {
wp_send_json_error( __( 'Wrong callback', 'ultimate-member' ) );
}
if ( 'um_usermeta_fields' == $_POST['cb_func'] ) {
//first install metatable
global $wpdb;
$metakeys = array();
foreach ( UM()->builtin()->all_user_fields as $all_user_field ) {
if ( $all_user_field['type'] == 'user_location' ) {
$metakeys[] = $all_user_field['metakey'] . '_lat';
$metakeys[] = $all_user_field['metakey'] . '_lng';
$metakeys[] = $all_user_field['metakey'] . '_url';
} else {
$metakeys[] = $all_user_field['metakey'];
}
}
if ( is_multisite() ) {
$sites = get_sites( array( 'fields' => 'ids' ) );
foreach ( $sites as $blog_id ) {
$metakeys[] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities';
}
} else {
$blog_id = get_current_blog_id();
$metakeys[] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities';
}
//member directory data
$metakeys[] = 'um_member_directory_data';
$skip_fields = UM()->builtin()->get_fields_without_metakey();
$skip_fields = array_merge( $skip_fields, UM()->member_directory()->core_search_fields );
$real_usermeta = $wpdb->get_col( "SELECT DISTINCT meta_key FROM {$wpdb->usermeta}" );
$real_usermeta = ! empty( $real_usermeta ) ? $real_usermeta : array();
$real_usermeta = array_merge( $real_usermeta, array( 'um_member_directory_data' ) );
$wp_usermeta_option = array_intersect( array_diff( $metakeys, $skip_fields ), $real_usermeta );
update_option( 'um_usermeta_fields', $wp_usermeta_option );
update_option( 'um_member_directory_update_meta', time() );
wp_send_json_success();
} elseif ( 'um_get_metadata' == $_POST['cb_func'] ) {
global $wpdb;
$wp_usermeta_option = get_option( 'um_usermeta_fields', array() );
$count = $wpdb->get_var(
"SELECT COUNT(*)
FROM {$wpdb->usermeta}
WHERE meta_key IN ('" . implode( "','", $wp_usermeta_option ) . "')"
);
wp_send_json_success( array( 'count' => $count ) );
} elseif ( 'um_update_metadata_per_page' == $_POST['cb_func'] ) {
if ( empty( $_POST['page'] ) ) {
wp_send_json_error( __( 'Wrong data', 'ultimate-member' ) );
}
$per_page = 50;
$wp_usermeta_option = get_option( 'um_usermeta_fields', array() );
global $wpdb;
$metadata = $wpdb->get_results( $wpdb->prepare(
"SELECT *
FROM {$wpdb->usermeta}
WHERE meta_key IN ('" . implode( "','", $wp_usermeta_option ) . "')
LIMIT %d, %d",
( $_POST['page'] - 1 ) * $per_page,
$per_page
), ARRAY_A );
foreach ( $metadata as $metarow ) {
$wpdb->insert(
"{$wpdb->prefix}um_metadata",
array(
'user_id' => $metarow['user_id'],
'um_key' => $metarow['meta_key'],
'um_value' => $metarow['meta_value'],
),
array(
'%d',
'%s',
'%s',
)
);
}
$from = ( $_POST['page'] * $per_page ) - $per_page + 1;
$to = $_POST['page'] * $per_page;
wp_send_json_success( array( 'message' => sprintf( __( 'Metadata from %s to %s was upgraded successfully...', 'ultimate-member' ), $from, $to ) ) );
}
}
/**
*
*/
@@ -351,6 +458,22 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
'default' => UM()->options()->get_default( 'restricted_access_taxonomy_metabox' ),
) ) );
$latest_update = get_option( 'um_member_directory_update_meta', false );
$latest_truncate = get_option( 'um_member_directory_truncated', false );
$same_page_update = array(
'id' => 'member_directory_own_table',
'type' => 'same_page_update',
'label' => __( 'Enable custom table for usermeta', 'ultimate-member' ),
'tooltip' => __( 'Check this box if you would like to enable the use of a custom table for user metadata. Improved performance for member directory searches.', 'ultimate-member' ),
);
if ( empty( $latest_update ) || ( ! empty( $latest_truncate ) && $latest_truncate > $latest_update ) ) {
$same_page_update['upgrade_cb'] = 'sync_metatable';
$same_page_update['upgrade_description'] = '<p>' . __( 'We recommend creating a backup of your site before running the update process. Do not exit the page before the update process has complete.', 'ultimate-member' ) . '</p>
<p>' . __( 'After clicking the <strong>"Run"</strong> button, the update process will start. All information will be displayed in the field below.', 'ultimate-member' ) . '</p>
<p>' . __( 'If the update was successful, you will see a corresponding message. Otherwise, contact technical support if the update failed.', 'ultimate-member' ) . '</p>';
}
/**
* UM hook
@@ -1143,12 +1266,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
'2.0' => __( '2.0 version', 'ultimate-member' ),
),
),
array(
'id' => 'member_directory_own_table',
'type' => 'checkbox',
'label' => __( 'Enable custom table for usermeta', 'ultimate-member' ),
'tooltip' => __( 'Check this box if you would like to enable the using custom table with user metadata. It can be solution for the complex search.', 'ultimate-member' ),
),
$same_page_update,
array(
'id' => 'uninstall_on_delete',
'type' => 'checkbox',
@@ -1669,6 +1787,7 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
*/
function on_settings_save() {
if ( ! empty( $_POST['um_options'] ) ) {
if ( ! empty( $_POST['um_options']['pages_settings'] ) ) {
$post_ids = new \WP_Query( array(
'post_type' => 'page',
@@ -1709,184 +1828,16 @@ if ( ! class_exists( 'um\admin\core\Admin_Settings' ) ) {
}
}
}
} elseif ( ! empty( $_POST['um_options']['member_directory_own_table'] ) ) {
//first install metatable
global $wpdb;
} elseif ( isset( $_POST['um_options']['member_directory_own_table'] ) ) {
if ( empty( $_POST['um_options']['member_directory_own_table'] ) ) {
global $wpdb;
$metakeys = array();
foreach ( UM()->builtin()->all_user_fields as $all_user_field ) {
if ( $all_user_field['type'] == 'user_location' ) {
$metakeys[] = $all_user_field['metakey'] . '_lat';
$metakeys[] = $all_user_field['metakey'] . '_lng';
$metakeys[] = $all_user_field['metakey'] . '_url';
} else {
$metakeys[] = $all_user_field['metakey'];
$results = $wpdb->get_row( "SELECT * FROM {$wpdb->prefix}um_metadata LIMIT 1", ARRAY_A );
if ( ! empty( $results ) ) {
$wpdb->query("TRUNCATE TABLE IF EXISTS {$wpdb->prefix}um_metadata" );
update_option( 'um_member_directory_truncated', time() );
}
}
if ( is_multisite() ) {
$sites = get_sites( array( 'fields' => 'ids' ) );
foreach ( $sites as $blog_id ) {
$metakeys[] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities';
}
} else {
$blog_id = get_current_blog_id();
$metakeys[] = $wpdb->get_blog_prefix( $blog_id ) . 'capabilities';
}
//member directory data
$metakeys[] = 'um_member_directory_data';
$skip_fields = UM()->builtin()->get_fields_without_metakey();
$skip_fields = array_merge( $skip_fields, UM()->member_directory()->core_search_fields );
$real_usermeta = $wpdb->get_col( "SELECT DISTINCT meta_key FROM {$wpdb->usermeta}" );
$wp_usermeta_option = array();
foreach ( $metakeys as $metakey ) {
if ( in_array( $metakey, $skip_fields ) ) {
continue;
}
if ( ! in_array( $metakey, $real_usermeta ) && $metakey != 'um_member_directory_data' ) {
continue;
}
$wp_usermeta_option[] = $metakey;
}
update_option( 'um_usermeta_fields', $wp_usermeta_option );
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE {$wpdb->prefix}um_metadata (
umeta_id bigint(20) unsigned NOT NULL auto_increment,
user_id bigint(20) unsigned NOT NULL default '0',
um_key varchar(255) default NULL,
um_value longtext default NULL,
PRIMARY KEY (umeta_id),
KEY user_id_indx (user_id),
KEY meta_key_indx (um_key),
KEY meta_value_indx (um_value(191))
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
$md_metadata = $wpdb->get_results(
"SELECT u.ID as user_id, um.meta_value AS account_status, um2.meta_value AS hide_in_members
FROM {$wpdb->users} u
LEFT JOIN {$wpdb->usermeta} um ON ( um.user_id = u.ID AND um.meta_key = 'account_status' )
LEFT JOIN {$wpdb->usermeta} um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'hide_in_members' )",
ARRAY_A );
$md_metadata2 = $wpdb->get_results(
"SELECT u.ID as user_id, um.meta_value AS synced_gravatar_hashed_id, um2.meta_value AS synced_profile_photo
FROM {$wpdb->users} u
LEFT JOIN {$wpdb->usermeta} um ON ( um.user_id = u.ID AND um.meta_key = 'synced_gravatar_hashed_id' )
LEFT JOIN {$wpdb->usermeta} um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'synced_profile_photo' )",
ARRAY_A );
$md_metadata3 = $wpdb->get_results(
"SELECT u.ID as user_id, um.meta_value AS profile_photo, um2.meta_value AS cover_photo
FROM {$wpdb->users} u
LEFT JOIN {$wpdb->usermeta} um ON ( um.user_id = u.ID AND um.meta_key = 'profile_photo' )
LEFT JOIN {$wpdb->usermeta} um2 ON ( um2.user_id = u.ID AND um2.meta_key = 'cover_photo' )",
ARRAY_A );
$md_metadata4 = $wpdb->get_results(
"SELECT u.ID as user_id, um.meta_value AS verified
FROM {$wpdb->users} u
LEFT JOIN {$wpdb->usermeta} um ON ( um.user_id = u.ID AND um.meta_key = '_um_verified' )",
ARRAY_A );
$users_map = array();
foreach ( $md_metadata as $md_metadatarow ) {
$hide_in_members = false;
if ( ! empty( $md_metadatarow['hide_in_members'] ) ) {
if ( $md_metadatarow['hide_in_members'] == 'Yes' || $md_metadatarow['hide_in_members'] == __( 'Yes', 'ultimate-member' ) ||
$md_metadatarow['hide_in_members'] == serialize( array( 'Yes' ) ) || $md_metadatarow['hide_in_members'] == serialize( array( __( 'Yes', 'ultimate-member' ) ) ) ) {
$hide_in_members = true;
}
}
$users_map[ $md_metadatarow['user_id'] ] = array(
'account_status' => $md_metadatarow['account_status'],
'hide_in_members' => $hide_in_members,
);
}
foreach ( $md_metadata3 as $md_metadatarow ) {
if ( ! isset( $users_map[ $md_metadatarow['user_id'] ] ) ) {
$users_map[ $md_metadatarow['user_id'] ] = array();
}
$users_map[ $md_metadatarow['user_id'] ] = array_merge( $users_map[ $md_metadatarow['user_id'] ], array(
'profile_photo' => ! empty( $md_metadatarow['profile_photo'] ),
'cover_photo' => ! empty( $md_metadatarow['cover_photo'] ),
) );
}
foreach ( $md_metadata2 as $md_metadatarow ) {
if ( ! isset( $users_map[ $md_metadatarow['user_id'] ] ) ) {
$users_map[ $md_metadatarow['user_id'] ] = array();
}
if ( ! empty( $users_map[ $md_metadatarow['user_id'] ]['profile_photo'] ) ) {
continue;
} else {
$users_map[ $md_metadatarow['user_id'] ]['profile_photo'] = ( ! empty( $md_metadatarow['synced_gravatar_hashed_id'] ) || ! empty( $md_metadatarow['synced_profile_photo'] ) );
}
}
foreach ( $md_metadata4 as $md_metadatarow ) {
if ( ! isset( $users_map[ $md_metadatarow['user_id'] ] ) ) {
$users_map[ $md_metadatarow['user_id'] ] = array();
}
$users_map[ $md_metadatarow['user_id'] ] = array_merge( $users_map[ $md_metadatarow['user_id'] ], array(
'verified' => $md_metadatarow['verified'] == 'verified' ? true : false,
) );
}
if ( ! empty( $users_map ) ) {
remove_action( 'updated_user_meta', array( UM()->member_directory(), 'on_update_usermeta' ), 10 );
remove_action( 'added_user_meta', array( UM()->member_directory(), 'on_update_usermeta' ), 10 );
foreach ( $users_map as $user_id => $metavalue ) {
update_user_meta( $user_id, 'um_member_directory_data', $metavalue );
}
add_action( 'updated_user_meta', array( UM()->member_directory(), 'on_update_usermeta' ), 10, 4 );
add_action( 'added_user_meta', array( UM()->member_directory(), 'on_update_usermeta' ), 10, 4 );
}
$metadata = $wpdb->get_results(
"SELECT *
FROM {$wpdb->usermeta}
WHERE meta_key IN ('" . implode( "','", $wp_usermeta_option ) . "')",
ARRAY_A );
foreach ( $metadata as $metarow ) {
$wpdb->insert(
"{$wpdb->prefix}um_metadata",
array(
'user_id' => $metarow['user_id'],
'um_key' => $metarow['meta_key'],
'um_value' => $metarow['meta_value'],
),
array(
'%d',
'%s',
'%s',
)
);
}
}
}
}
+3 -8
View File
@@ -246,15 +246,10 @@ if ( ! class_exists( 'um\admin\core\Admin_Upgrade' ) ) {
<div class="wrap">
<h2><?php printf( __( '%s - Upgrade Process', 'ultimate-member' ), ultimatemember_plugin_name ) ?></h2>
<p><?php printf( __( 'You have installed %s version. Your latest DB version is %s. Before the click to "Run" button make sure that did the following:', 'ultimate-member' ), ultimatemember_version, $um_last_version_upgrade ) ?></p>
<ul style="list-style: inside;">
<li><?php _e( 'Create full site\'s backup.', 'ultimate-member' ) ?></li>
<li><?php _e( 'Set maintenance mode (if you need)', 'ultimate-member' ) ?></li>
<li><?php _e( 'You have nice Internet connection', 'ultimate-member' ) ?></li>
</ul>
<p><?php _e( 'After the click to "Run" button, the update process will be started. All information will be displayed in "Upgrade Log" field.', 'ultimate-member' ); ?></p>
<p><?php printf( __( 'You have installed <strong>%s</strong> version. Your latest DB version is <strong>%s</strong>. We recommend creating a backup of your site before running the update process. Do not exit the page before the update process has complete.', 'ultimate-member' ), ultimatemember_version, $um_last_version_upgrade ) ?></p>
<p><?php _e( 'After clicking the <strong>"Run"</strong> button, the update process will start. All information will be displayed in the <strong>"Upgrade Log"</strong> field.', 'ultimate-member' ); ?></p>
<p><?php _e( 'If the update was successful, you will see a corresponding message. Otherwise, contact technical support if the update failed.', 'ultimate-member' ); ?></p>
<h4><?php printf( __( 'Upgrade Log' ), ultimatemember_plugin_name ) ?></h4>
<h4><?php _e( 'Upgrade Log', 'ultimate-member' ) ?></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' ) ?>"/>
@@ -0,0 +1,144 @@
<?php if ( ! defined( 'ABSPATH' ) ) exit;
function um_upgrade_users_count213beta3() {
UM()->admin()->check_ajax_nonce();
um_maybe_unset_time_limit();
$users = get_users( array(
'number' => '',
'fields' => 'ids'
) );
$count = count( $users );
wp_send_json_success( array( 'count' => $count ) );
}
function um_upgrade_metadata_per_user213beta3() {
UM()->admin()->check_ajax_nonce();
um_maybe_unset_time_limit();
if ( empty( $_POST['page'] ) ) {
wp_send_json_error( __( 'Wrong data', 'ultimate-member' ) );
}
$per_page = 50;
global $wpdb;
$min_max = $wpdb->get_row( $wpdb->prepare(
"SELECT MIN(ID) AS MinID, MAX(ID) AS MaxID
FROM (
SELECT u.ID
FROM wpbultimate_users as u
ORDER BY u.ID
LIMIT %d, %d
) as dt",
( $_POST['page'] - 1 ) * $per_page,
$per_page
), ARRAY_A );
$metadata = $wpdb->get_results( $wpdb->prepare(
"SELECT u.ID as user_id,
um.meta_key as meta_key,
um.meta_value as meta_value
FROM wpbultimate_users u
LEFT JOIN wpbultimate_usermeta um ON ( um.user_id = u.ID AND um.meta_key IN( 'account_status','hide_in_members','synced_gravatar_hashed_id','synced_profile_photo','profile_photo','cover_photo','_um_verified' ) )
WHERE u.ID >= %d AND
u.ID <= %d",
$min_max['MinID'],
$min_max['MaxID']
), ARRAY_A );
$users_map = array();
foreach ( $metadata as $metadatarow ) {
if ( ! isset( $users_map[ $metadatarow['user_id'] ] ) ) {
$users_map[ $metadatarow['user_id'] ] = array(
'account_status' => 'approved',
'hide_in_members' => false,
'profile_photo' => false,
'cover_photo' => false,
'verified' => false,
);
}
switch ( $metadatarow['meta_key'] ) {
case 'account_status':
$users_map[ $metadatarow['user_id'] ]['account_status'] = $metadatarow['meta_value'];
break;
case 'hide_in_members':
$hide_in_members = false;
if ( ! empty( $metadatarow['meta_value'] ) ) {
if ( $metadatarow['meta_value'] == 'Yes' || $metadatarow['meta_value'] == __( 'Yes', 'ultimate-member' ) ||
$metadatarow['meta_value'] == serialize( array( 'Yes' ) ) || $metadatarow['meta_value'] == serialize( array( __( 'Yes', 'ultimate-member' ) ) ) ) {
$hide_in_members = true;
}
}
$users_map[ $metadatarow['user_id'] ]['hide_in_members'] = $hide_in_members;
break;
case 'synced_gravatar_hashed_id':
case 'synced_profile_photo':
if ( empty( $users_map[ $metadatarow['user_id'] ]['profile_photo'] ) ) {
$users_map[ $metadatarow['user_id'] ]['profile_photo'] = ! empty( $metadatarow['meta_value'] );
}
break;
case 'profile_photo':
$users_map[ $metadatarow['user_id'] ]['profile_photo'] = ! empty( $metadatarow['meta_value'] );
break;
case 'cover_photo':
$users_map[ $metadatarow['user_id'] ]['cover_photo'] = ! empty( $metadatarow['meta_value'] );
break;
case '_um_verified':
$users_map[ $metadatarow['user_id'] ]['verified'] = $metadatarow['meta_value'] == 'verified' ? true : false;
break;
}
}
if ( ! empty( $users_map ) ) {
foreach ( $users_map as $user_id => $metavalue ) {
update_user_meta( $user_id, 'um_member_directory_data', $metavalue );
}
}
$from = ( $_POST['page'] * $per_page ) - $per_page + 1;
$to = $_POST['page'] * $per_page;
wp_send_json_success( array( 'message' => sprintf( __( 'Metadata from %s to %s users were upgraded successfully...', 'ultimate-member' ), $from, $to ) ) );
}
function um_upgrade_metatable213beta3() {
UM()->admin()->check_ajax_nonce();
um_maybe_unset_time_limit();
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE {$wpdb->prefix}um_metadata (
umeta_id bigint(20) unsigned NOT NULL auto_increment,
user_id bigint(20) unsigned NOT NULL default '0',
um_key varchar(255) default NULL,
um_value longtext default NULL,
PRIMARY KEY (umeta_id),
KEY user_id_indx (user_id),
KEY meta_key_indx (um_key),
KEY meta_value_indx (um_value(191))
) $charset_collate;";
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
dbDelta( $sql );
update_option( 'um_last_version_upgrade', '2.1.3-beta3' );
wp_send_json_success( array( 'message' => __( 'Usermeta table was upgraded successfully', 'ultimate-member' ) ) );
}
@@ -0,0 +1,7 @@
<?php if ( ! defined( 'ABSPATH' ) ) exit;
return array(
'users_count213beta3' => 'users_count213beta3',
'metadata_per_user213beta3' => 'metadata_per_user213beta3',
'metatable213beta3' => 'metatable213beta3',
);
@@ -0,0 +1,93 @@
<?php if ( ! defined( 'ABSPATH' ) ) exit; ?>
<script type="text/javascript">
jQuery( document ).ready( function() {
var users_pages;
var current_page = 1;
var users_per_page = 50;
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_users_count213beta3',
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( __( ' users...', '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 );
um_update_metadata_per_user213beta3();
} else {
um_wrong_ajax();
}
},
error: function() {
um_something_wrong();
}
});
function um_update_metadata_per_user213beta3() {
if ( current_page <= users_pages ) {
jQuery.ajax({
url: wp.ajax.settings.url,
type: 'POST',
dataType: 'json',
data: {
action: 'um_metadata_per_user213beta3',
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++;
um_update_metadata_per_user213beta3();
} else {
um_wrong_ajax();
}
},
error: function() {
um_something_wrong();
}
});
} else {
um_metatable213beta3();
}
}
//clear users cache
function um_metatable213beta3() {
um_add_upgrade_log( '<?php echo esc_js( __( 'Create additional metadata table...', 'ultimate-member' ) ) ?>' );
jQuery.ajax({
url: wp.ajax.settings.url,
type: 'POST',
dataType: 'json',
data: {
action: 'um_metatable213beta3',
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>
@@ -12,36 +12,6 @@ global $post_id; ?>
$_um_roles_filter_value = get_post_meta( $post_id, '_um_roles_can_filter', true );
$_um_roles_filter_value = empty( $_um_roles_filter_value ) ? array() : $_um_roles_filter_value;
/**
* UM hook
*
* @type filter
* @title um_admin_custom_search_filters
* @description Custom Search Filters
* @input_vars
* [{"var":"$custom_search","type":"array","desc":"Filters"}]
* @change_log
* ["Since: 2.0"]
* @usage
* <?php add_filter( 'um_admin_custom_search_filters', 'function_name', 10, 1 ); ?>
* @example
* <?php
* add_filter( 'um_admin_custom_search_filters', 'my_admin_custom_search_filters', 10, 1 );
* function my_upload_file_name( $custom_search ) {
* // your code here
* return $custom_search;
* }
* ?>
*/
$custom_search = apply_filters( 'um_admin_custom_search_filters', array() );
$searchable_fields = UM()->builtin()->all_user_fields( 'date,time,url' );
$searchable_fields = $searchable_fields + $custom_search;
$user_fields = array();
foreach ( $searchable_fields as $key => $arr ) {
$user_fields[ $key ] = isset( $arr['title'] ) ? $arr['title'] : '';
}
//$post_id = get_the_ID();
$_um_search_fields = get_post_meta( $post_id, '_um_search_fields', true );
$_um_search_filters = get_post_meta( $post_id, '_um_search_filters', true );
+5 -5
View File
@@ -79,22 +79,22 @@ if ( ! class_exists( 'um\core\Date_Time' ) ) {
}
if ( $days == 1 ) {
$since = sprintf( __( 'Yesterday at %s', 'ultimate-member' ), date_i18n( 'g:ia', $from ) );
$since = sprintf( __( 'Yesterday at %s', 'ultimate-member' ), date_i18n( get_option( 'time_format' ), $from ) );
} else {
$since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( 'g:ia', $from ) );
$since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( get_option( 'time_format' ), $from ) );
}
} elseif ( $diff < 30 * DAY_IN_SECONDS && $diff >= WEEK_IN_SECONDS ) {
$since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( 'g:ia', $from ) );
$since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d', $from ), date_i18n( get_option( 'time_format' ), $from ) );
} elseif ( $diff < YEAR_IN_SECONDS && $diff >= 30 * DAY_IN_SECONDS ) {
$since = sprintf( __( '%s at %s','ultimate-member'), date_i18n( 'F d', $from ), date_i18n( 'g:ia', $from ) );
$since = sprintf( __( '%s at %s','ultimate-member'), date_i18n( 'F d', $from ), date_i18n( get_option( 'time_format' ), $from ) );
} elseif ( $diff >= YEAR_IN_SECONDS ) {
$since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( 'F d, Y', $from ), date_i18n( 'g:ia', $from ) );
$since = sprintf( __( '%s at %s', 'ultimate-member' ), date_i18n( get_option( 'date_format' ), $from ), date_i18n( get_option( 'time_format' ), $from ) );
}
+21 -11
View File
@@ -644,13 +644,14 @@ PRIMARY KEY (id)
}
case 'slider': {
$range = $this->slider_filters_range( $filter, $directory_data );
$placeholder = $this->slider_range_placeholder( $filter, $attrs );
list( $single_placeholder, $plural_placeholder ) = $this->slider_range_placeholder( $filter, $attrs );
if ( $range ) { ?>
<input type="hidden" id="<?php echo $filter; ?>_min" name="<?php echo $filter; ?>[]" class="um_range_min" value="<?php echo ! empty( $default_value ) ? esc_attr( min( $default_value ) ) : '' ?>" />
<input type="hidden" id="<?php echo $filter; ?>_max" name="<?php echo $filter; ?>[]" class="um_range_max" value="<?php echo ! empty( $default_value ) ? esc_attr( max( $default_value ) ) : '' ?>" />
<div class="um-slider" data-field_name="<?php echo $filter; ?>" data-min="<?php echo $range[0] ?>" data-max="<?php echo $range[1] ?>"></div>
<div class="um-slider-range" data-placeholder="<?php echo esc_attr( $placeholder ); ?>" data-label="<?php echo ( ! empty( $attrs['label'] ) ) ? esc_attr__( stripslashes( $attrs['label'] ), 'ultimate-member' ) : ''; ?>"></div>
<div class="um-slider-range" data-placeholder-s="<?php echo esc_attr( $single_placeholder ); ?>" data-placeholder-p="<?php echo esc_attr( $plural_placeholder ); ?>" data-label="<?php echo ( ! empty( $attrs['label'] ) ) ? esc_attr__( stripslashes( $attrs['label'] ), 'ultimate-member' ) : ''; ?>"></div>
<?php }
break;
@@ -778,15 +779,21 @@ PRIMARY KEY (id)
switch ( $filter ) {
default: {
$label = ucwords( str_replace( array( 'um_', '_' ), array( '', ' ' ), $filter ) );
$placeholder = apply_filters( 'um_member_directory_filter_slider_range_placeholder', false, $filter );
$placeholders = apply_filters( 'um_member_directory_filter_slider_range_placeholder', false, $filter );
if ( ! $placeholder ) {
if ( ! $placeholders ) {
switch ( $attrs['type'] ) {
default:
$placeholder = "<strong>$label:</strong>&nbsp;{min_range} - {max_range}";
$placeholders = array(
"<strong>$label:</strong>&nbsp;{value}",
"<strong>$label:</strong>&nbsp;{min_range} - {max_range}",
);
break;
case 'rating':
$placeholder = "<strong>$label:</strong>&nbsp;{min_range} - {max_range}" . __( ' stars', 'ultimate-member' );
$placeholders = array(
"<strong>$label:</strong>&nbsp;{value}" . __( ' stars', 'ultimate-member' ),
"<strong>$label:</strong>&nbsp;{min_range} - {max_range}" . __( ' stars', 'ultimate-member' )
);
break;
}
}
@@ -794,12 +801,15 @@ PRIMARY KEY (id)
break;
}
case 'birth_date': {
$placeholder = __( '<strong>Age:</strong>&nbsp;{min_range} - {max_range} years old', 'ultimate-member' );
$placeholders = array(
__( '<strong>Age:</strong>&nbsp;{value} years old', 'ultimate-member' ),
__( '<strong>Age:</strong>&nbsp;{min_range} - {max_range} years old', 'ultimate-member' )
);
break;
}
}
return $placeholder;
return $placeholders;
}
@@ -1607,12 +1617,12 @@ PRIMARY KEY (id)
case 'birth_date':
$from_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ), date( 'Y', time() - min( $value ) * YEAR_IN_SECONDS ) ) );
$to_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ) + 1, date( 'Y', time() - ( max( $value ) + 1 ) * YEAR_IN_SECONDS ) ) );
$to_date = date( 'Y/m/d', mktime( 0,0,0, date( 'm', time() ), date( 'd', time() ) + 1, date( 'Y', time() - ( max( $value ) + 1 ) * YEAR_IN_SECONDS ) - 1 ) );
$meta_query = array(
array(
'key' => 'birth_date',
'value' => array( $from_date, $to_date ),
'value' => array( $to_date, $from_date ),
'compare' => 'BETWEEN',
'type' => 'DATE',
'inclusive' => true,
@@ -1621,7 +1631,7 @@ PRIMARY KEY (id)
$this->query_args['meta_query'] = array_merge( $this->query_args['meta_query'], array( $meta_query ) );
$this->custom_filters_in_query[ $field ] = array( $from_date, $to_date );
$this->custom_filters_in_query[ $field ] = array( $to_date, $from_date );
break;
case 'user_registered':
+13
View File
@@ -274,6 +274,19 @@ if ( ! class_exists( 'um\core\Plugin_Updater' ) ) {
if ( ! is_wp_error( $request ) ) {
$request = json_decode( wp_remote_retrieve_body( $request ) );
} else {
$request = wp_remote_post(
UM()->store_url,
array(
'timeout' => UM()->request_timeout,
'sslverify' => true,
'body' => $api_params
)
);
if ( ! is_wp_error( $request ) ) {
$request = json_decode( wp_remote_retrieve_body( $request ) );
}
}
$request = ( $request ) ? maybe_unserialize( $request ) : false;
+1 -1
View File
@@ -1446,7 +1446,7 @@ if ( ! class_exists( 'um\core\User' ) ) {
if ( ! empty( $this->profile['role'] ) ) {
return $this->profile['role'];
} else {
if ( $this->profile['wp_roles'] == 'administrator' ) {
if ( ! empty( $this->profile['wp_roles'] ) && $this->profile['wp_roles'] == 'administrator' ) {
return 'admin';
} else {
return 'member';
+2 -2
View File
@@ -120,8 +120,8 @@ function um_profile_field_filter_hook__user_registered( $value, $data ) {
if ( ! $value ) {
return '';
}
$value = strtotime($value);
$value = sprintf(__('Joined %s','ultimate-member'), date_i18n('F d, Y', $value) );
$value = strtotime( $value );
$value = sprintf( __( 'Joined %s', 'ultimate-member' ), date_i18n( get_option( 'date_format' ), $value ) );
return $value;
}
add_filter( 'um_profile_field_filter_hook__user_registered', 'um_profile_field_filter_hook__user_registered', 99, 2 );
+7 -5
View File
@@ -995,12 +995,12 @@ function um_is_file_owner( $url, $user_id = null, $image_path = false ) {
*/
function um_is_temp_file( $filename ) {
$user_basedir = UM()->uploader()->get_upload_user_base_dir( 'temp' );
$file = $user_basedir . '/' . $filename;
if ( file_exists( $file ) ) {
return true;
}
}
return false;
}
@@ -1014,8 +1014,9 @@ function um_is_temp_file( $filename ) {
*/
function um_user_last_login_timestamp( $user_id ) {
$value = get_user_meta( $user_id, '_um_last_login', true );
if ($value)
if ( $value ) {
return $value;
}
return '';
}
@@ -1047,8 +1048,9 @@ function um_get_core_page( $slug, $updated = false ) {
if ( isset( UM()->config()->permalinks[ $slug ] ) ) {
$url = get_permalink( UM()->config()->permalinks[ $slug ] );
if ( $updated )
if ( $updated ) {
$url = add_query_arg( 'updated', esc_attr( $updated ), $url );
}
}
/**
+1 -5
View File
@@ -272,11 +272,7 @@ if ( ( ( $search && $show_search ) || ( $filters && $show_filters && count( $sea
<# _.each( data.filters, function( filter, key, list ) { #>
<div class="um-members-filter-tag">
<# if ( filter.type == 'slider' ) { #>
<# if ( filter.value[0] == filter.value[1] ) { #>
<strong>{{{filter.label}}}</strong>: {{{filter.value[0]}}}
<# } else { #>
{{{filter.value_label}}}
<# } #>
{{{filter.value_label}}}
<# } else { #>
<strong>{{{filter.label}}}</strong>: {{{filter.value_label}}}
<# } #>
+1 -1
View File
@@ -3,7 +3,7 @@
Plugin Name: Ultimate Member
Plugin URI: http://ultimatemember.com/
Description: The easiest way to create powerful online communities and beautiful user profiles with WordPress
Version: 2.1.3-beta2
Version: 2.1.3-beta3
Author: Ultimate Member
Author URI: http://ultimatemember.com/
Text Domain: ultimate-member