From 50cde1dd2b682b0fa21d02b68044517dfbe035be Mon Sep 17 00:00:00 2001 From: champsupertramp Date: Mon, 7 Mar 2016 17:42:35 +0800 Subject: [PATCH] Add option to force Strings to use UTF-8 encoding --- core/um-fields.php | 13 +++++++++---- core/um-filters-fields.php | 37 +++++++++++++++++++++++++++++++++++++ core/um-short-functions.php | 32 ++++++++++++++++++++++++++++++++ um-config.php | 10 ++++++++++ 4 files changed, 88 insertions(+), 4 deletions(-) diff --git a/core/um-fields.php b/core/um-fields.php index f225e6ad..0fd7a232 100644 --- a/core/um-fields.php +++ b/core/um-fields.php @@ -414,9 +414,11 @@ class UM_Fields { function is_selected($key, $value, $data){ global $ultimatemember; - if ( isset( $ultimatemember->form->post_form[$key] ) && is_array( $ultimatemember->form->post_form[$key] ) ) { + $key = apply_filters('um_is_selected_filter_key', $key ); - if ( in_array( $value, $ultimatemember->form->post_form[$key] ) ){ + if ( isset( $ultimatemember->form->post_form[ $key ] ) && is_array( $ultimatemember->form->post_form[ $key ] ) ) { + + if ( in_array( $value, $ultimatemember->form->post_form[ $key ] ) ){ return true; } @@ -424,11 +426,14 @@ class UM_Fields { if ( !isset( $ultimatemember->form->post_form ) ) { - if ( um_user( $key ) && $this->editing == true && is_array( um_user( $key ) ) && in_array($value, um_user( $key ) ) ) { + $value = um_user( $key ); + $value = apply_filters('um_is_selected_filter_value', $value ); + + if ( $value && $this->editing == true && is_array( $value ) && in_array( $value, $value ) ) { return true; } - if ( um_user( $key ) && $this->editing == true && !is_array( um_user( $key ) ) && um_user( $key ) == $value ) { + if ( $value && $this->editing == true && !is_array( $value ) && $value == $value ) { return true; } diff --git a/core/um-filters-fields.php b/core/um-filters-fields.php index 8f3c3921..23e67a5d 100644 --- a/core/um-filters-fields.php +++ b/core/um-filters-fields.php @@ -301,4 +301,41 @@ } return $array; + } + + + /** + * Force fields to use UTF-8 encoding + * @param mixed $value + * @return mixed + * @uses hook filter: um_profile_field_filter_hook__ + */ + add_filter('um_profile_field_filter_hook__','um_force_utf8_fields',1,10); + function um_force_utf8_fields( $value ){ + + if( ! um_get_option('um_force_utf8_strings') ) + return $value; + + $value = um_force_utf8_string( $value ); + + return $value; + + } + + /** + * Filter profile data value + * @param mixed $value + * @return mixed + * @uses hook filter: um_is_selected_filter_value + */ + add_filter('um_is_selected_filter_value','um_is_selected_filter_value',1,9); + function um_is_selected_filter_value( $value ){ + global $ultimatemember; + + if( ! um_get_option('um_force_utf8_strings') ) + return $value; + + $value = um_force_utf8_string( $value ); + + return $value; } \ No newline at end of file diff --git a/core/um-short-functions.php b/core/um-short-functions.php index 3df0e58a..a9ab3540 100644 --- a/core/um-short-functions.php +++ b/core/um-short-functions.php @@ -1495,3 +1495,35 @@ function um_fetch_user( $user_id ) { return $count; } + /** + * Force strings to UTF-8 encoded + * @param mixed $value + * @return mixed + */ + function um_force_utf8_string( $value ){ + + if( is_array( $value ) ){ + $arr_value = array(); + foreach ($value as $key => $value) { + $utf8_decoded_value = utf8_decode( $value ); + + if( mb_check_encoding( $utf8_decoded_value, 'UTF-8') ){ + array_push( $arr_value, $utf8_decoded_value ); + }else{ + array_push( $arr_value, $value ); + } + + } + return $arr_value; + }else{ + + $utf8_decoded_value = utf8_decode($value); + + if( mb_check_encoding( $utf8_decoded_value, 'UTF-8') ){ + return $utf8_decoded_value; + } + } + + return $value; + + } diff --git a/um-config.php b/um-config.php index f29d4f5b..ccf798f8 100644 --- a/um-config.php +++ b/um-config.php @@ -1898,6 +1898,16 @@ $this->sections[] = array( 'off' => __('Off','ultimatemember'), ), + array( + 'id' => 'um_force_utf8_strings', + 'type' => 'switch', + 'title' => __( 'Force Strings to UTF-8 Encoding','ultimatemember' ), + 'default' => 0, + 'desc' => __('Turn on If you want to force labels and fields to use UTF-8 encoding','ultimatemember'), + 'on' => __('On','ultimatemember'), + 'off' => __('Off','ultimatemember'), + ), + array( 'id' => 'enable_timebot', 'type' => 'switch',