From cb2194c8beca94cdf9a1d0a72142deaa4f7665f6 Mon Sep 17 00:00:00 2001 From: champsupertramp Date: Tue, 22 Mar 2016 15:32:14 +0800 Subject: [PATCH] Fix profile permalink --- core/um-filters-user.php | 74 ++++++++++++++++++++++++++++++++-------- core/um-permalinks.php | 55 +++++++++++++++++++++++++++-- core/um-user.php | 2 +- 3 files changed, 113 insertions(+), 18 deletions(-) diff --git a/core/um-filters-user.php b/core/um-filters-user.php index 3754636c..c11b89c4 100644 --- a/core/um-filters-user.php +++ b/core/um-filters-user.php @@ -81,20 +81,35 @@ add_filter('um_clean_user_basename_filter','um_clean_user_basename_filter',2,10); function um_clean_user_basename_filter( $value, $raw ){ global $wpdb; - $permalink_base = um_get_option('permalink_base'); - + + $permalink_base = um_get_option('permalink_base'); + $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' => '!=' + ) + ) + ) + + ); + $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; + } + switch( $permalink_base ){ case 'name': - $slugname = $wpdb->get_var( - $wpdb->prepare( - "SELECT meta_value FROM ".$wpdb->usermeta." WHERE meta_key = %s ", - 'um_user_profile_url_slug_name_'.$raw, - $raw - ) - ); - - $value = $slugname; if( ! empty( $value ) && strrpos( $value ,".") > -1 ){ $value = str_replace( '.', ' ', $value ); } @@ -106,11 +121,40 @@ break; + case 'name_dash': + + if( ! empty( $value ) && strrpos( $value ,"-") > -1 ){ + $value = str_replace( '-', ' ', $value ); + } + + // Checks if last name has a dash + if( ! empty( $value ) && strrpos( $value ,"_") > -1 ){ + $value = str_replace( '_', '-', $value ); + } + + break; + + + case 'name_plus': + + if( ! empty( $value ) && strrpos( $value ,"+") > -1 ){ + $value = str_replace( '+', ' ', $value ); + } + + // Checks if last name has a dash + if( ! empty( $value ) && strrpos( $value ,"_") > -1 ){ + $value = str_replace( '_', '+', $value ); + } + + break; + default: - // Checks if last name has a dash - if( ! empty( $value ) && strrpos( $value ,"_") > -1 && substr( $value , "_") == 1 ){ - $value = str_replace( '_', '-', $value ); - } + + // Checks if last name has a dash + if( ! empty( $value ) && strrpos( $value ,"_") > -1 && substr( $value , "_") == 1 ){ + $value = str_replace( '_', '-', $value ); + } + break; } diff --git a/core/um-permalinks.php b/core/um-permalinks.php index 4481d5ef..ad67f4ba 100644 --- a/core/um-permalinks.php +++ b/core/um-permalinks.php @@ -260,14 +260,65 @@ class UM_Permalinks { $user_in_url = rawurlencode( $full_name_slug ); break; + case 'name_dash': + + $difficulties = 0; + + $full_name_slug = strtolower( $full_name ); + + // if name has dashed replace with underscore if( strpos( $last_name, '-') > -1 && strpos( $full_name, '-' ) > -1 ){ + $difficulties++; $full_name = str_replace('-', '_', $full_name ); } - $user_in_url = rawurlencode( strtolower( str_replace(" ", "-", $full_name ) ) ); + // if name has space, replace with dash + $full_name_slug = str_replace( ' ' , '-', $full_name_slug ); + + // if name has period + if( strpos( $last_name, '.') > -1 && strpos( $full_name, '.' ) > -1 ){ + $difficulties++; + } + + $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; + case 'name_plus': - $user_in_url = strtolower( str_replace(" ", "+" , $full_name ) ); + + $difficulties = 0; + + $full_name_slug = strtolower( $full_name ); + + // if name has dashed replace with underscore + if( strpos( $last_name, '+') > -1 && strpos( $full_name, '+' ) > -1 ){ + $difficulties++; + $full_name = str_replace('-', '_', $full_name ); + } + // if name has space, replace with dash + $full_name_slug = str_replace( ' ' , '+', $full_name_slug ); + + // if name has period + if( strpos( $last_name, '.') > -1 && strpos( $full_name, '.' ) > -1 ){ + $difficulties++; + } + + $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; } diff --git a/core/um-user.php b/core/um-user.php index e549345a..396f1549 100644 --- a/core/um-user.php +++ b/core/um-user.php @@ -895,7 +895,7 @@ class UM_User { } $ids = get_users(array( 'fields' => 'ID', 'meta_key' => 'full_name','meta_value' => $value ,'meta_compare' => '=') ); - if ( isset( $ids[0] ) ) + if ( isset( $ids[0] ) && ! empty( $ids[0] ) ) return $ids[0]; return false;