mirror of
https://github.com/10h30/ultimatemember.git
synced 2026-07-11 18:56:10 +09:00
Fix duplicate profile url slugs and cases
This commit is contained in:
@@ -118,6 +118,7 @@
|
||||
do_action('um_after_user_updated', um_user('ID') );
|
||||
do_action('um_after_user_upload', um_user('ID') );
|
||||
do_action('um_user_after_updating_profile', $to_update );
|
||||
do_action('um_update_profile_full_name', $to_update );
|
||||
|
||||
if ( !isset( $args['is_signup'] ) ) {
|
||||
$url = $ultimatemember->permalinks->profile_url();
|
||||
|
||||
@@ -7,46 +7,6 @@
|
||||
function um_update_profile_full_name( $changes ) {
|
||||
global $ultimatemember;
|
||||
|
||||
if ( isset( $changes['first_name'] ) && isset( $changes['last_name'] ) ) {
|
||||
|
||||
$full_name = $ultimatemember->user->profile['display_name'];
|
||||
$full_name = $ultimatemember->validation->safe_name_in_url( $full_name );
|
||||
|
||||
/* duplicate or not */
|
||||
if ( $ultimatemember->user->user_has_metadata( 'full_name', $full_name ) ) {
|
||||
|
||||
$duplicates = $ultimatemember->user->user_has_metadata( 'full_name', $full_name );
|
||||
if ( !get_option("um_duplicate_name_{$full_name}") ) {
|
||||
|
||||
update_option("um_duplicate_name_{$full_name}", $duplicates );
|
||||
$full_name = $full_name . '.' . $duplicates;
|
||||
|
||||
} else {
|
||||
|
||||
if ( um_user('_duplicate_id') ) {
|
||||
$duplicates = um_user('_duplicate_id');
|
||||
} else {
|
||||
$duplicates = get_option("um_duplicate_name_{$full_name}") + 1;
|
||||
update_option("um_duplicate_name_{$full_name}", $duplicates );
|
||||
update_user_meta( $ultimatemember->user->id, '_duplicate_id', $duplicates );
|
||||
}
|
||||
|
||||
$full_name = $full_name . '.' . $duplicates;
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if ( um_user('_duplicate_id') && $full_name != str_replace( '.' . um_user('_duplicate_id'), '' , um_user('full_name') ) ) {
|
||||
$duplicates = um_user('_duplicate_id');
|
||||
$full_name = str_replace( '.' . um_user('_duplicate_id'), '', $full_name);
|
||||
}
|
||||
}
|
||||
|
||||
update_user_meta( $ultimatemember->user->id, 'full_name', $full_name );
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Sync display name changes
|
||||
$option = um_get_option('display_name');
|
||||
@@ -78,6 +38,26 @@
|
||||
}
|
||||
|
||||
if ( isset( $update_name ) ) {
|
||||
wp_update_user( array( 'ID' => $user_id, 'display_name' => $update_name ) );
|
||||
|
||||
$return = wp_update_user( array( 'ID' => $user_id, 'display_name' => $update_name ) );
|
||||
|
||||
if( is_wp_error( $return ) ) {
|
||||
wp_die( $return->get_error_message() );
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
if ( isset( $changes['first_name'] ) && isset( $changes['last_name'] ) ) {
|
||||
|
||||
$full_name = $ultimatemember->user->profile['display_name'];
|
||||
$full_name = $ultimatemember->validation->safe_name_in_url( $full_name );
|
||||
|
||||
update_user_meta( $ultimatemember->user->id, 'full_name', $full_name );
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
+19
-15
@@ -83,30 +83,34 @@
|
||||
global $wpdb;
|
||||
|
||||
$permalink_base = um_get_option('permalink_base');
|
||||
$user_query = new WP_User_Query(
|
||||
|
||||
$user_query = new WP_User_Query(
|
||||
array(
|
||||
'meta_query' => array(
|
||||
'relation' => 'AND',
|
||||
array(
|
||||
'key' => 'um_user_profile_url_slug_name_'.$raw,
|
||||
),
|
||||
array(
|
||||
'key' => 'account_status',
|
||||
'value' => 'awaiting_admin_review',
|
||||
'compare' => '!='
|
||||
'key' => 'um_user_profile_url_slug_'.$permalink_base,
|
||||
'value' => $raw,
|
||||
'compare' => '='
|
||||
)
|
||||
)
|
||||
)
|
||||
),
|
||||
'fields' => array('ID')
|
||||
)
|
||||
|
||||
);
|
||||
$result = current( $user_query->get_results() );
|
||||
$slugname = '';
|
||||
);
|
||||
|
||||
if( isset( $result->data->ID ) ){
|
||||
$slugname = get_user_meta( $result->data->ID, 'um_user_profile_url_slug_name_'.$raw, true );
|
||||
$value = $slugname;
|
||||
if( $user_query->total_users > 0 ){
|
||||
|
||||
$result = current( $user_query->get_results() );
|
||||
$slugname = '';
|
||||
|
||||
if( isset( $result->ID ) ){
|
||||
$slugname = get_user_meta( $result->ID, 'um_user_profile_url_slug_'.$permalink_base, true );
|
||||
$value = $slugname;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$value = apply_filters("um_permalink_base_before_filter", $value );
|
||||
$raw_value = $value;
|
||||
|
||||
|
||||
+49
-27
@@ -12,6 +12,8 @@ class UM_Permalinks {
|
||||
|
||||
add_action('init', array(&$this, 'activate_account_via_email_link'), 1);
|
||||
|
||||
add_action('um_user_after_updating_profile', array(&$this, 'profile_url'), 1 );
|
||||
|
||||
remove_action( 'wp_head', 'rel_canonical' );
|
||||
|
||||
add_action('wp_head', array(&$this, 'um_rel_canonical_'), 9 );
|
||||
@@ -232,13 +234,12 @@ class UM_Permalinks {
|
||||
/***
|
||||
*** @get profile url for set user
|
||||
***/
|
||||
function profile_url() {
|
||||
function profile_url( $to_updated = null ) {
|
||||
global $ultimatemember, $wpdb;
|
||||
|
||||
$page_id = $this->core['user'];
|
||||
$profile_url = get_permalink( $page_id );
|
||||
|
||||
|
||||
$profile_url = apply_filters('um_localize_permalink_filter', $this->core, $page_id, $profile_url );
|
||||
|
||||
// Username
|
||||
@@ -262,29 +263,62 @@ class UM_Permalinks {
|
||||
}
|
||||
|
||||
}
|
||||
// Permalink base
|
||||
$permalink_base = um_get_option('permalink_base');
|
||||
|
||||
// User ID
|
||||
if ( um_get_option('permalink_base') == 'user_id' ) {
|
||||
if ( $permalink_base == 'user_id' ) {
|
||||
$user_in_url = um_user('ID');
|
||||
}
|
||||
|
||||
|
||||
// Fisrt and Last name
|
||||
$full_name_permalinks = array( 'name', 'name_dash', 'name_plus' );
|
||||
if( in_array( um_get_option( 'permalink_base'), $full_name_permalinks ) )
|
||||
if( in_array( $permalink_base, $full_name_permalinks ) )
|
||||
{
|
||||
$full_name = um_user( 'full_name' );
|
||||
$last_name = um_user( 'last_name' );
|
||||
$opt_display_name = um_get_option('display_name');
|
||||
$first_name = um_user( 'first_name' );
|
||||
$last_name = um_user( 'last_name' );
|
||||
$full_name = um_user( 'display_name' );
|
||||
|
||||
$count = intval( um_is_meta_value_exists( 'full_name', $full_name ) );
|
||||
if( in_array( $permalink_base, array( 'user_login' ) ) ){
|
||||
$search = um_user( 'display_name' );
|
||||
}else{
|
||||
$search = "{$first_name} {$last_name}";
|
||||
}
|
||||
// Remove double spaces
|
||||
$full_name = preg_replace('/\s+/', ' ', $full_name);
|
||||
$search = preg_replace('/\s+/', ' ', $search );
|
||||
|
||||
// Check for duplicate names
|
||||
$args = array(
|
||||
'search' => $search,
|
||||
'search_columns' => array( 'display_name' ),
|
||||
'orderby' => 'registered',
|
||||
'order' => 'ASC',
|
||||
'fields' => array('user_registered','ID')
|
||||
);
|
||||
|
||||
if( $count > 1 )
|
||||
{
|
||||
$full_name .= ' ' . um_user( 'ID' );
|
||||
$user_query = new WP_User_Query( $args );
|
||||
|
||||
$duplicate_hash_name = md5( $full_name );
|
||||
|
||||
if( $user_query->total_users > 1 ){
|
||||
|
||||
$duplicate_names = $user_query->get_results();
|
||||
|
||||
$current = current( $duplicate_names );
|
||||
|
||||
update_option("um_duplicate_name_{$duplicate_hash_name}", $current->ID );
|
||||
|
||||
}
|
||||
|
||||
switch( um_get_option('permalink_base') )
|
||||
$duplicate_id = get_option("um_duplicate_name_{$duplicate_hash_name}");
|
||||
|
||||
if( ! empty( $duplicate_id ) && $duplicate_id != um_user('ID') ){
|
||||
$full_name = $full_name.' ' . um_user( 'ID' );
|
||||
}
|
||||
|
||||
switch( $permalink_base )
|
||||
{
|
||||
case 'name': // dotted
|
||||
|
||||
@@ -313,12 +347,6 @@ class UM_Permalinks {
|
||||
$difficulties++;
|
||||
}
|
||||
|
||||
|
||||
if( $difficulties > 0 ){
|
||||
update_user_meta( um_user('ID'), 'um_user_profile_url_slug_name_'.$full_name_slug, $full_name );
|
||||
}
|
||||
|
||||
|
||||
$user_in_url = rawurlencode( $full_name_slug );
|
||||
|
||||
break;
|
||||
@@ -350,10 +378,6 @@ class UM_Permalinks {
|
||||
$full_name_slug = str_replace( '.' , '-', $full_name_slug );
|
||||
$full_name_slug = str_replace( '--' , '-', $full_name_slug );
|
||||
|
||||
if( $difficulties > 0 ){
|
||||
update_user_meta( um_user('ID'), 'um_user_profile_url_slug_name_'.$full_name_slug, $full_name );
|
||||
}
|
||||
|
||||
$user_in_url = rawurlencode( $full_name_slug );
|
||||
|
||||
break;
|
||||
@@ -389,20 +413,18 @@ class UM_Permalinks {
|
||||
$full_name_slug = str_replace( '.' , '+', $full_name_slug );
|
||||
$full_name_slug = str_replace( '++' , '+', $full_name_slug );
|
||||
|
||||
if( $difficulties > 0 ){
|
||||
update_user_meta( um_user('ID'), 'um_user_profile_url_slug_name_'.$full_name_slug, $full_name );
|
||||
}
|
||||
|
||||
$user_in_url = $full_name_slug;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
update_user_meta( um_user('ID'), 'um_user_profile_url_slug_'.$permalink_base, strtolower( $user_in_url ) );
|
||||
|
||||
if ( get_option('permalink_structure') ) {
|
||||
|
||||
$profile_url = trailingslashit( untrailingslashit( $profile_url ) );
|
||||
$profile_url = $profile_url . $user_in_url . '/';
|
||||
$profile_url = $profile_url . strtolower( $user_in_url ). '/';
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
+57
-16
@@ -7,6 +7,7 @@ class UM_User {
|
||||
$this->id = 0;
|
||||
$this->usermeta = null;
|
||||
$this->data = null;
|
||||
$this->profile = null;
|
||||
|
||||
$this->banned_keys = array(
|
||||
'metabox','postbox','meta-box',
|
||||
@@ -373,9 +374,10 @@ class UM_User {
|
||||
|
||||
do_action('um_before_user_role_is_changed');
|
||||
|
||||
$this->profile['role'] = $role;
|
||||
|
||||
do_action('um_member_role_upgrade', $role, $this->profile['role'] );
|
||||
|
||||
$this->profile['role'] = $role;
|
||||
$this->update_usermeta_info('role');
|
||||
|
||||
do_action('um_after_user_role_is_changed');
|
||||
@@ -875,10 +877,7 @@ class UM_User {
|
||||
$args['ID'] = $this->id;
|
||||
$changes = apply_filters('um_before_update_profile', $changes, $this->id);
|
||||
|
||||
// hook for name changes
|
||||
do_action('um_update_profile_full_name', $changes );
|
||||
|
||||
// save or update profile meta
|
||||
// save or update profile meta
|
||||
foreach( $changes as $key => $value ) {
|
||||
if ( !in_array( $key, $this->update_user_keys ) ) {
|
||||
|
||||
@@ -929,27 +928,69 @@ class UM_User {
|
||||
function user_exists_by_name( $value ) {
|
||||
|
||||
global $ultimatemember;
|
||||
|
||||
// Permalink base
|
||||
$permalink_base = um_get_option('permalink_base');
|
||||
|
||||
$raw_value = $value;
|
||||
$value = $ultimatemember->validation->safe_name_in_url( $value );
|
||||
$value = um_clean_user_basename( $value );
|
||||
|
||||
// if duplicate full name, return the user id
|
||||
if( preg_match( '/( |\.|\-)\d+$/', $value, $matches ) )
|
||||
{
|
||||
return $matches[0];
|
||||
}
|
||||
// Search by Profile Slug
|
||||
$args = array(
|
||||
"fields" => array("ID"),
|
||||
'meta_query' => array(
|
||||
'relation' => 'OR',
|
||||
array(
|
||||
'key' => 'um_user_profile_url_slug_'.$permalink_base,
|
||||
'value' => strtolower( $raw_value ),
|
||||
'compare' => '='
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
);
|
||||
|
||||
$ids = get_users(array( 'fields' => 'ID', 'meta_key' => 'full_name','meta_value' => $value ,'meta_compare' => '=') );
|
||||
if ( isset( $ids[0] ) && ! empty( $ids[0] ) ){
|
||||
return $ids[0];
|
||||
|
||||
$ids = new WP_User_Query( $args );
|
||||
|
||||
if( $ids->total_users > 0 ){
|
||||
$um_user_query = current( $ids->get_results() );
|
||||
return $um_user_query->ID;
|
||||
}
|
||||
|
||||
// Search by Display Name or ID
|
||||
$args = array(
|
||||
"fields" => array("ID"),
|
||||
"search" => $value,
|
||||
'search_columns' => array( 'display_name','ID' )
|
||||
);
|
||||
|
||||
$ids = new WP_User_Query( $args );
|
||||
|
||||
if( $ids->total_users > 0 ){
|
||||
$um_user_query = current( $ids->get_results() );
|
||||
return $um_user_query->ID;
|
||||
}
|
||||
|
||||
|
||||
// Search By User Login
|
||||
$value = str_replace(".", "_", $value );
|
||||
$value = str_replace(" ", "", $value );
|
||||
|
||||
$user = get_user_by( 'login', $value );
|
||||
if ( isset( $user->ID ) && $user->ID > 0 ){
|
||||
return $user->ID;
|
||||
$args = array(
|
||||
"fields" => array("ID"),
|
||||
"search" => $value,
|
||||
'search_columns' => array(
|
||||
'user_login',
|
||||
)
|
||||
);
|
||||
|
||||
$ids = new WP_User_Query( $args );
|
||||
|
||||
if( $ids->total_users > 0 ){
|
||||
$um_user_query = current( $ids->get_results() );
|
||||
return $um_user_query->ID;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user