From bb4aff7ee330ecd5d0286327f570ef07aac452e2 Mon Sep 17 00:00:00 2001 From: nikitozzzzzzz Date: Thu, 4 Oct 2018 16:50:47 +0300 Subject: [PATCH] - fixed multisite file/image download; --- README.md | 4 +- includes/core/class-fields.php | 7 ++ includes/core/class-files.php | 24 +++++- includes/core/um-actions-login.php | 41 +++++---- includes/core/um-actions-profile.php | 8 +- includes/core/um-actions-register.php | 6 +- includes/core/um-filters-fields.php | 46 ++++++++++- includes/um-short-functions.php | 115 ++++++++++++++++++++------ readme.txt | 2 +- 9 files changed, 197 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index 442a24b9..83db873b 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Ultimate Member is the #1 user profile & membership plugin for WordPress. The pl | Latest Version |Requires at least|Stable Tag| | :------------: |:------------:|:------------:| -| 2.0.25 | WordPress 4.9 or higher| 2.0.25 | +| 2.0.27 | WordPress 4.9 or higher| 2.0.27 | Features of the plugin include: @@ -48,7 +48,7 @@ GNU Version 2 or Any Later Version Releases ==================== -[Official Release Version: 2.0.25](https://github.com/ultimatemember/ultimatemember/releases/tag/2.0.25). +[Official Release Version: 2.0.27](https://github.com/ultimatemember/ultimatemember/releases/tag/2.0.27). [Official Release Version: 1.3.88](https://github.com/ultimatemember/ultimatemember/releases). diff --git a/includes/core/class-fields.php b/includes/core/class-fields.php index 9a266eff..bcfc29f6 100644 --- a/includes/core/class-fields.php +++ b/includes/core/class-fields.php @@ -2313,6 +2313,13 @@ if ( ! class_exists( 'um\core\Fields' ) ) { } else { $file_url = UM()->files()->get_download_link( $this->set_id, $key, um_user( 'ID' ) ); $file_dir = UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . $this->field_value( $key, $default, $data ); + + if ( ! file_exists( $file_dir ) ) { + if ( is_multisite() ) { + //multisite fix for old customers + $file_dir = str_replace( DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . get_current_blog_id() . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $file_dir ); + } + } } if ( file_exists( $file_dir ) ) { diff --git a/includes/core/class-files.php b/includes/core/class-files.php index 1d393632..6d01a50c 100644 --- a/includes/core/class-files.php +++ b/includes/core/class-files.php @@ -161,11 +161,19 @@ if ( ! class_exists( 'um\core\Files' ) ) { */ function image_download( $user_id, $field_key, $field_value ) { $file_path = UM()->uploader()->get_upload_base_dir() . $user_id . DIRECTORY_SEPARATOR . $field_value; + if ( ! file_exists( $file_path ) ) { + if ( is_multisite() ) { + //multisite fix for old customers + $file_path = str_replace( DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . get_current_blog_id() . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $file_path ); + } + } + $file_info = get_user_meta( $user_id, $field_key . "_metadata", true ); + $pathinfo = pathinfo( $file_path ); $size = filesize( $file_path ); - $originalname = $file_info['original_name']; - $type = $file_info['type']; + $originalname = ! empty( $file_info['original_name'] ) ? $file_info['original_name'] : $pathinfo['basename']; + $type = ! empty( $file_info['type'] ) ? $file_info['type'] : $pathinfo['extension']; header('Content-Description: File Transfer'); header('Content-Type: ' . $type ); @@ -187,11 +195,19 @@ if ( ! class_exists( 'um\core\Files' ) ) { */ function file_download( $user_id, $field_key, $field_value ) { $file_path = UM()->uploader()->get_upload_base_dir() . $user_id . DIRECTORY_SEPARATOR . $field_value; + if ( ! file_exists( $file_path ) ) { + if ( is_multisite() ) { + //multisite fix for old customers + $file_path = str_replace( DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . get_current_blog_id() . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $file_path ); + } + } + $file_info = get_user_meta( $user_id, $field_key . "_metadata", true ); + $pathinfo = pathinfo( $file_path ); $size = filesize( $file_path ); - $originalname = $file_info['original_name']; - $type = $file_info['type']; + $originalname = ! empty( $file_info['original_name'] ) ? $file_info['original_name'] : $pathinfo['basename']; + $type = ! empty( $file_info['type'] ) ? $file_info['type'] : $pathinfo['extension']; header('Content-Description: File Transfer'); header('Content-Type: ' . $type ); diff --git a/includes/core/um-actions-login.php b/includes/core/um-actions-login.php index 2e4b28b2..7c4c7fc1 100644 --- a/includes/core/um-actions-login.php +++ b/includes/core/um-actions-login.php @@ -47,16 +47,18 @@ function um_submit_form_errors_hook_login( $args ) { $user_name = $args['user_login']; } - if ( !username_exists( $user_name ) ) { + /*if ( !username_exists( $user_name ) ) { if ( $is_email ) { UM()->form()->add_error( $field, __(' Sorry, we can\'t find an account with that email address','ultimate-member') ); } else { UM()->form()->add_error( $field, __(' Sorry, we can\'t find an account with that username','ultimate-member') ); } } else { - if ( $args['user_password'] == '' ) { - UM()->form()->add_error( 'user_password', __('Please enter your password','ultimate-member') ); - } + + }*/ + + if ( $args['user_password'] == '' ) { + UM()->form()->add_error( 'user_password', __('Please enter your password','ultimate-member') ); } $user = get_user_by( 'login', $user_name ); @@ -100,26 +102,29 @@ add_action( 'um_submit_form_errors_hook_login', 'um_submit_form_errors_hook_logi */ function um_display_login_errors( $args ) { $error = ''; - - if( UM()->form()->count_errors() > 0 ) { + + if ( UM()->form()->count_errors() > 0 ) { $errors = UM()->form()->errors; // hook for other plugins to display error $error_keys = array_keys( $errors ); - } + } - if( isset( $args['custom_fields'] ) ){ - $custom_fields = $args['custom_fields']; - } + if ( isset( $args['custom_fields'] ) ) { + $custom_fields = $args['custom_fields']; + } - if( ! empty( $error_keys ) && ! empty( $custom_fields ) ){ - foreach( $error_keys as $error ){ - if( trim( $error ) && ! isset( $custom_fields[ $error ] ) && ! empty( $errors[ $error ] ) ){ - $error_message = apply_filters( 'login_errors', $errors[ $error ] ); - echo '

' . $error_message . '

'; + if ( ! empty( $error_keys ) && ! empty( $custom_fields ) ) { + foreach ( $error_keys as $error ) { + if ( trim( $error ) && ! isset( $custom_fields[ $error ] ) && ! empty( $errors[ $error ] ) ) { + $error_message = apply_filters( 'login_errors', $errors[ $error ], $error ); + if ( empty( $error_message ) ) { + return; } + echo '

' . $error_message . '

'; } } } +} add_action( 'um_before_login_fields', 'um_display_login_errors' ); @@ -421,12 +426,12 @@ function um_add_submit_button_to_login( $args ) { -
-
+
+
-
+
diff --git a/includes/core/um-actions-profile.php b/includes/core/um-actions-profile.php index 30b89ac6..51f05672 100644 --- a/includes/core/um-actions-profile.php +++ b/includes/core/um-actions-profile.php @@ -1195,15 +1195,15 @@ function um_add_submit_button_to_profile( $args ) { -
-
+
-
diff --git a/includes/core/um-actions-register.php b/includes/core/um-actions-register.php index bd5d0b72..3e163100 100644 --- a/includes/core/um-actions-register.php +++ b/includes/core/um-actions-register.php @@ -585,12 +585,12 @@ function um_add_submit_button_to_register( $args ) { -
-
+
+
-
+
diff --git a/includes/core/um-filters-fields.php b/includes/core/um-filters-fields.php index 243c34d0..9f422e20 100644 --- a/includes/core/um-filters-fields.php +++ b/includes/core/um-filters-fields.php @@ -226,7 +226,20 @@ function um_profile_field_filter_hook__file( $value, $data ) { $file_type = wp_check_filetype( $value ); $uri = UM()->files()->get_download_link( UM()->fields()->set_id, $data['metakey'], um_user( 'ID' ) ); + $removed = false; if ( ! file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . $value ) ) { + if ( is_multisite() ) { + //multisite fix for old customers + $file_path = str_replace( DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . get_current_blog_id() . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . $value ); + if ( ! file_exists( $file_path ) ) { + $removed = true; + } + } else { + $removed = true; + } + } + + if ( $removed ) { $value = __( 'This file has been removed.', 'ultimate-member' ); } else { $file_info = um_user( $data['metakey'] . "_metadata" ); @@ -260,11 +273,24 @@ function um_profile_field_filter_hook__image( $value, $data ) { $uri = UM()->files()->get_download_link( UM()->fields()->set_id, $data['metakey'], um_user( 'ID' ) ); $title = ( isset( $data['title'] ) ) ? $data['title'] : __( 'Untitled photo', 'ultimate-member' ); + $removed = false; + if ( ! file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . $value ) ) { + if ( is_multisite() ) { + //multisite fix for old customers + $file_path = str_replace( DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . get_current_blog_id() . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . $value ); + if ( ! file_exists( $file_path ) ) { + $removed = true; + } + } else { + $removed = true; + } + } + // if value is an image tag if( preg_match( '/\' . esc_attr( $title ) . '
'; - } else if ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . $value ) ) { + } else if ( ! $removed ) { $value = '
' . esc_attr( $title ) . '
'; } else { $value = ''; @@ -637,6 +663,24 @@ function um_profile_field_filter_xss_validation( $value, $data, $type = '' ) { add_filter( 'um_profile_field_filter_hook__','um_profile_field_filter_xss_validation', 10, 3 ); +/** + * Trim All form POST submitted data + * + * @param $post_form + * @param $mode + * + * @return mixed + */ +function um_submit_form_data_trim_fields( $post_form, $mode ) { + foreach ( $post_form as &$field ) { + $field = trim( $field ); + } + + return $post_form; +} +add_filter( 'um_submit_form_data', 'um_submit_form_data_trim_fields', 9, 2 ); + + /** * add role_select and role_radio to the $post_form * It is necessary for that if on these fields the conditional logic diff --git a/includes/um-short-functions.php b/includes/um-short-functions.php index ad591cdd..18da3bdb 100644 --- a/includes/um-short-functions.php +++ b/includes/um-short-functions.php @@ -556,10 +556,19 @@ function um_user_submitted_registration( $style = false ) { if ( UM()->fields()->get_field_type( $k ) == 'image' || UM()->fields()->get_field_type( $k ) == 'file' ) { $file = basename( $v ); $filedata = get_user_meta( um_user( 'ID' ), $k . "_metadata", true ); + + $baseurl = UM()->uploader()->get_upload_base_url(); + if ( ! file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . $file ) ) { + if ( is_multisite() ) { + //multisite fix for old customers + $baseurl = str_replace( '/sites/' . get_current_blog_id() . '/', '/', $baseurl ); + } + } + if ( ! empty( $filedata['original_name'] ) ) { - $v = '' . $filedata['original_name'] . ''; + $v = '' . $filedata['original_name'] . ''; } else { - $v = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . '/' . $file; + $v = $baseurl . um_user( 'ID' ) . '/' . $file; } } @@ -1659,8 +1668,27 @@ function um_closest_num( $array, $number ) { */ function um_get_cover_uri( $image, $attrs ) { $uri = false; + $uri_common = false; $ext = '.' . pathinfo( $image, PATHINFO_EXTENSION ); + if ( is_multisite() ) { + //multisite fix for old customers + $multisite_fix_dir = UM()->uploader()->get_upload_base_dir(); + $multisite_fix_url = UM()->uploader()->get_upload_base_url(); + $multisite_fix_dir = str_replace( DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . get_current_blog_id() . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $multisite_fix_dir ); + $multisite_fix_url = str_replace( '/sites/' . get_current_blog_id() . '/', '/', $multisite_fix_url ); + + if ( file_exists( $multisite_fix_dir . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "cover_photo{$ext}" ) ) { + $uri_common = $multisite_fix_url . um_user( 'ID' ) . "/cover_photo{$ext}?" . current_time( 'timestamp' ); + } + + if ( file_exists( $multisite_fix_dir . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "cover_photo-{$attrs}x{$attrs}{$ext}" ) ) { + $uri_common = $multisite_fix_url . um_user( 'ID' ) . "/cover_photo-{$attrs}x{$attrs}{$ext}?". current_time( 'timestamp' ); + } elseif ( file_exists( $multisite_fix_dir . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "cover_photo-{$attrs}{$ext}" ) ) { + $uri_common = $multisite_fix_url . um_user( 'ID' ) . "/cover_photo-{$attrs}{$ext}?" . current_time( 'timestamp' ); + } + } + if ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "cover_photo{$ext}" ) ) { $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/cover_photo{$ext}?" . current_time( 'timestamp' ); } @@ -1670,6 +1698,11 @@ function um_get_cover_uri( $image, $attrs ) { } elseif ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "cover_photo-{$attrs}{$ext}" ) ) { $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/cover_photo-{$attrs}{$ext}?" . current_time( 'timestamp' ); } + + if ( ! empty( $uri_common ) && empty( $uri ) ) { + $uri = $uri_common; + } + return $uri; } @@ -1699,8 +1732,64 @@ function um_get_avatar_url( $get_avatar ) { */ function um_get_avatar_uri( $image, $attrs ) { $uri = false; + $uri_common = false; $find = false; $ext = '.' . pathinfo( $image, PATHINFO_EXTENSION ); + + if ( is_multisite() ) { + //multisite fix for old customers + $multisite_fix_dir = UM()->uploader()->get_upload_base_dir(); + $multisite_fix_url = UM()->uploader()->get_upload_base_url(); + $multisite_fix_dir = str_replace( DIRECTORY_SEPARATOR . 'sites' . DIRECTORY_SEPARATOR . get_current_blog_id() . DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR, $multisite_fix_dir ); + $multisite_fix_url = str_replace( '/sites/' . get_current_blog_id() . '/', '/', $multisite_fix_url ); + + if ( $attrs == 'original' && file_exists( $multisite_fix_dir . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo{$ext}" ) ) { + $uri_common = $multisite_fix_url . um_user( 'ID' ) . "/profile_photo{$ext}"; + } elseif ( file_exists( $multisite_fix_dir . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$attrs}x{$attrs}{$ext}" ) ) { + $uri_common = $multisite_fix_url . um_user( 'ID' ) . "/profile_photo-{$attrs}x{$attrs}{$ext}"; + } elseif ( file_exists( $multisite_fix_dir . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$attrs}{$ext}" ) ) { + $uri_common = $multisite_fix_url . um_user( 'ID' ) . "/profile_photo-{$attrs}{$ext}"; + } else { + $sizes = UM()->options()->get( 'photo_thumb_sizes' ); + if ( is_array( $sizes ) ) { + $find = um_closest_num( $sizes, $attrs ); + } + + if ( file_exists( $multisite_fix_dir . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$find}x{$find}{$ext}" ) ) { + $uri_common = $multisite_fix_url . um_user( 'ID' ) . "/profile_photo-{$find}x{$find}{$ext}"; + } elseif ( file_exists( $multisite_fix_dir . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$find}{$ext}" ) ) { + $uri_common = $multisite_fix_url . um_user( 'ID' ) . "/profile_photo-{$find}{$ext}"; + } elseif ( file_exists( $multisite_fix_dir . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo{$ext}" ) ) { + $uri_common = $multisite_fix_url . um_user( 'ID' ) . "/profile_photo{$ext}"; + } + } + } + + if ( $attrs == 'original' && file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo{$ext}" ) ) { + $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo{$ext}"; + } elseif ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$attrs}x{$attrs}{$ext}" ) ) { + $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo-{$attrs}x{$attrs}{$ext}"; + } elseif ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$attrs}{$ext}" ) ) { + $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo-{$attrs}{$ext}"; + } else { + $sizes = UM()->options()->get( 'photo_thumb_sizes' ); + if ( is_array( $sizes ) ) { + $find = um_closest_num( $sizes, $attrs ); + } + + if ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$find}x{$find}{$ext}" ) ) { + $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo-{$find}x{$find}{$ext}"; + } elseif ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$find}{$ext}" ) ) { + $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo-{$find}{$ext}"; + } elseif ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo{$ext}" ) ) { + $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo{$ext}"; + } + } + + if ( ! empty( $uri_common ) && empty( $uri ) ) { + $uri = $uri_common; + } + /** * UM hook * @@ -1723,30 +1812,10 @@ function um_get_avatar_uri( $image, $attrs ) { * ?> */ $cache_time = apply_filters( 'um_filter_avatar_cache_time', current_time( 'timestamp' ), um_user( 'ID' ) ); - if ( $attrs == 'original' && file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo{$ext}" ) ) { - $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo{$ext}"; - } elseif ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$attrs}x{$attrs}{$ext}" ) ) { - $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo-{$attrs}x{$attrs}{$ext}"; - } elseif ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$attrs}{$ext}" ) ) { - $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo-{$attrs}{$ext}"; - } else { - $sizes = UM()->options()->get( 'photo_thumb_sizes' ); - if ( is_array( $sizes ) ) { - $find = um_closest_num( $sizes, $attrs ); - } - - if ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$find}x{$find}{$ext}" ) ) { - $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo-{$find}x{$find}{$ext}"; - } elseif ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo-{$find}{$ext}" ) ) { - $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo-{$find}{$ext}"; - } elseif ( file_exists( UM()->uploader()->get_upload_base_dir() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . "profile_photo{$ext}" ) ) { - $uri = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . "/profile_photo{$ext}"; - } - } - if ( ! empty( $cache_time ) ) { $uri .= "?{$cache_time}"; } + return $uri; } diff --git a/readme.txt b/readme.txt index ff2ed2ec..aecb8e95 100644 --- a/readme.txt +++ b/readme.txt @@ -6,7 +6,7 @@ Donate link: Tags: community, member, membership, user-profile, user-registration Requires at least: 4.7 Tested up to: 4.9 -Stable tag: 2.0.26 +Stable tag: 2.0.27 License: GNU Version 2 or Any Later Version License URI: http://www.gnu.org/licenses/gpl-3.0.txt