• Resolved neoset

    (@neoset)


    This is the plugin that generates a profile photo upload button:

    https://github.com/ultimatemember/Extended/blob/main/um-profile-photo/um-profile-photo.php

    if ( ! defined( 'ABSPATH' ) ) exit;
    
    /**
     * Add new predefined field "Profile Photo" in UM Form Builder.
     *
     * @param array $arr field array settings.
     */
    function um_predefined_fields_hook_profile_photo( $arr ) {
    
        $arr['register_profile_photo'] = array(
            'title' => __( 'Profile Photo', 'ultimate-member' ),
            'metakey' => 'register_profile_photo',
            'type' => 'image',
            'label' => __('Change your profile photo','ultimate-member' ),
            'upload_text' => __( 'Upload your photo here', 'ultimate-member' ),
            'icon' => 'um-faicon-camera',
            'crop' => 1,
                    'editable' => 1,
            'max_size' => ( UM()->options()->get('profile_photo_max_size') ) ? UM()->options()->get('profile_photo_max_size') : 999999999,
            'min_width' => str_replace('px','',UM()->options()->get('profile_photosize')),
            'min_height' => str_replace('px','',UM()->options()->get('profile_photosize')),
        );
    
        return $arr;
    
    }
    add_filter( 'um_predefined_fields_hook', 'um_predefined_fields_hook_profile_photo', 99999, 1 );
    
    /**
     *  Multiply Profile Photo with different sizes
     *
     * @param integer $user_id the user ID.
     */
    function um_registration_set_profile_photo( $user_id, $args ) {
        
        if( isset( $args['form_id'] )) $req = 'register_profile_photo-' . $args['form_id'];
        else $req = 'register_profile_photo';
        if( ! isset( $_REQUEST[$req] ) ) return;
        //if ( strpos( $_REQUEST['register_profile_photo'], '_temp.') <= -1 ) {
            //return;
        //}
        
        if( is_user_logged_in() ) {
            UM()->files()->delete_core_user_photo( $user_id, 'profile_photo' );
        }
    
        $user_basedir = UM()->uploader()->get_upload_user_base_dir( $user_id, true );
    
        $temp_dir = UM()->uploader()->get_core_temp_dir() . DIRECTORY_SEPARATOR;
    
        $temp_profile_photo = array_slice( scandir( $temp_dir ), 2);
        
        $temp_profile_id =  isset( $_COOKIE['um-register-profile-photo'] ) ? $_COOKIE['um-register-profile-photo'] : null;
    
        if( empty( $temp_profile_photo ) ) return;
    
        foreach( $temp_profile_photo as $i => $p ){
            if ( strpos($p, "_photo_{$temp_profile_id}_temp") !== false ) {
                $profile_p = $p;
            }
        }
    
        if( empty( $profile_p ) ) return;
    
        $temp_image_path = $temp_dir . DIRECTORY_SEPARATOR . $profile_p;
        $new_image_path = $user_basedir . DIRECTORY_SEPARATOR . $profile_p;
        
            $image = wp_get_image_editor( $temp_image_path );
    
        $file_info = wp_check_filetype_and_ext( $temp_image_path, $profile_p );
     
        $ext = $file_info['ext'];
        
        $new_image_name = str_replace( $profile_p,  "profile_photo.{$ext}", $new_image_path );
        
        $sizes = UM()->options()->get( 'photo_thumb_sizes' );
    
        $quality = UM()->options()->get( 'image_compression' );
        
        
        if ( ! is_wp_error( $image ) ) {
                
            $image->save( $new_image_name );
    
            $image->set_quality( $quality );
    
            $sizes_array = array();
    
            foreach( $sizes as $size ) {
                $sizes_array[ ] = array ( 'width' => $size );
            }
    
            $image->multi_resize( $sizes_array );
    
            delete_user_meta( $user_id, 'synced_profile_photo' );
            update_user_meta( $user_id, 'profile_photo', "profile_photo.{$ext}" ); 
            update_user_meta( $user_id, 'register_profile_photo', "profile_photo.{$ext}" ); 
            @unlink( $temp_image_path );
    
        } 
    
    }
    add_action( 'um_after_user_account_updated', 'um_registration_set_profile_photo', 1, 2 );
    add_action( 'um_registration_set_extra_data', 'um_registration_set_profile_photo', 1, 2 );
    
    /**
     * Set Temporary user id
     */
    function um_register_profile_photo_set_temp_user_id() {
    
        $temp_profile_id = isset( $_COOKIE['um-register-profile-photo'] ) ? $_COOKIE['um-register-profile-photo'] : null;
        if ( ! $temp_profile_id ) {
            setcookie( 'um-register-profile-photo', md5( time() ), time() + 3600, COOKIEPATH, COOKIE_DOMAIN );
        }
    
    }
    add_action( 'template_redirect', 'um_register_profile_photo_set_temp_user_id' );
    
    /**
     * Set handler callback for filename
     */
    function um_register_profile_photo_upload_handler( $override_handler ) {
        
        if ( 'stream_photo' == UM()->uploader()->upload_image_type && 'register_profile_photo' == UM()->uploader()->field_key ) {
            
            $override_handler['unique_filename_callback'] = 'um_register_profile_photo_name';
        }
    
        return $override_handler;
    }
    add_filter( 'um_image_upload_handler_overrides__register_profile_photo', 'um_register_profile_photo_upload_handler', 99999 );
    
    /**
     * Change filename
     */
    function um_register_profile_photo_name( $dir, $filename, $ext ) {
        $temp_profile_id =  isset( $_COOKIE['um-register-profile-photo'] ) ? $_COOKIE['um-register-profile-photo'] : null;
        
        return "profile_photo_{$temp_profile_id}_temp{$ext}";
    
    }
    
    /**
     * Support profile photo uploader in Account form
     */
    function um_register_display_profile_photo_in_account( $field_atts, $key, $data ) {
    
        if ( 'register_profile_photo' == $key && um_is_core_page( 'account' ) ) {
    
            $profile_photo = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . um_profile( 'profile_photo' ) . '?ts=' . current_time( 'timestamp' );
    
            $field_atts['data-profile_photo'] = array( $profile_photo );
        }
    
        return $field_atts;
    }
    add_filter( 'um_field_extra_atts', 'um_register_display_profile_photo_in_account', 10, 3 );
    
    /**
     * Clear profile photo cache
     */
    function um_register_display_profile_photo_script() {
    
        if( ! um_is_core_page( 'account' ) ) return; 
    
        ?>
        <script type="text/javascript">
            jQuery(document).on("ready", function(){
              setTimeout(() => {
                var register_profile_photo = jQuery("div[data-key='register_profile_photo']");
                
                register_profile_photo.find(".um-field-area").find(".um-single-image-preview").find("img").attr("src", register_profile_photo.data("profile_photo"));
                }, 1000);
    
                var account_small_avatar = jQuery(".um-account-meta-img-b").find("a").find("img");
                account_small_avatar.attr("src", account_small_avatar.attr("src") + "?ts=" + Math.floor(Date.now() / 1000) );
            
                jQuery(document).ajaxSuccess(function(event, xhr, settings) {
                    if( typeof settings.data.indexOf !== "undefined" ){
                        if (settings.data.indexOf("action=um_resize_image") > -1) {
                            jQuery(".um-account .um-form form").submit();
                        }
                    }
                });
            });
        </script>
        <?php
    }
    add_action( 'wp_footer', 'um_register_display_profile_photo_script' );
    
    /**
     * Delete profile photo viam the account form
     */
    function um_register_delete_profile_photo_from_account() {
    
        if( isset( $_REQUEST['mode'] ) && "account" == $_REQUEST['mode'] ) {
            UM()->files()->delete_core_user_photo( get_current_user_id(), 'profile_photo' );
        }
        wp_send_json_success();
    
    }
    add_action( 'wp_ajax_um_remove_file', 'um_register_delete_profile_photo_from_account', 1 );

    When uploading the profile photo from the registration form with the 1:1 crop, it does not allow uploading a photo smaller than 600px, since it is not linked to the ultimate member settings.

    This lock at 600px is located at line 1799 in the path ultimatemember/includes/core/class-fields.php https://github.com/ultimatemember/ultimatemember/blob/master/includes/core/class-fields.php

    if ( $array['min_width'] == '' && $array['crop'] == 1 ) {
        $array['min_width'] = 600;
    }
    if ( $array['min_height'] == '' && $array['crop'] == 1 ) {
        $array['min_height'] = 600;
    }
    
    if ( $array['min_width'] == '' && $array['crop'] == 3 ) {
        $array['min_width'] = 600;
    }
    if ( $array['min_height'] == '' && $array['crop'] == 3 ) {
        $array['min_height'] = 600;

    Let’s see if you can help me in the first code to unlock that 600px value and if you can, link it with the Ultimate Member profile photo settings.

    Thank you very much for everything and greetings to the community.

    • This topic was modified 2 years, 9 months ago by neoset.
Viewing 9 replies - 1 through 9 (of 9 total)
  • Plugin Support Aswin Giri

    (@aswingiri)

    Hello @neoset

    Can you please share screenshot of wp-admin > ultimate member > Settings > General > Uploads > Profile Photo Thumbnail Sizes (px) ?

    Thread Starter neoset

    (@neoset)

    Here I leave the images:

    Captura
    Captura2
    Captura3

    Also comment that the maximum size in bytes of the new field created in the builder does not work either, but that is another topic without much importance since it is controlled by the Ultimate Member settings, I comment it so that nothing else is known.

    Thank you very much as always you are the best with one of the best plugins on the market, light and with many possibilities.

    Plugin Support Ultimate Member Support

    (@ultimatemembersupport)

    Hi @neoset

    Please try using the following code snippet to remove the static value / unlock the crop sizes:

    add_filter("um_get_field__register_profile_photo","um_061722_register_profile_photo_cropsize");
    function um_061722_register_profile_photo_cropsize( $array ){
    
        $array['min_width']  = 20;
        $array['min_height'] = 20;
    
        return $array;
    }

    Regards,

    Thread Starter neoset

    (@neoset)

    Solved, it works perfect, you are the only ones who solve this type of problem in record time.
    Greetings and many thanks for the best plugin and especially for the best team.
    I will never get tired of saying that you are the best.

    Thread Starter neoset

    (@neoset)

    I think profile photo and cover photo should be added to the core for forms, or at least left as meta key reserved for Image Upload as well as display_name.
    It would be an interesting addition.

    Greetings and thank you.

    • This reply was modified 2 years, 9 months ago by neoset.
    Plugin Support Ultimate Member Support

    (@ultimatemembersupport)

    Hi @neoset

    Thanks for letting us know how it resolved the issue. I’ll add your request to our feature request list. I’m marking this as resolved now.

    Thread Starter neoset

    (@neoset)

    Hello,
    I have solved the problem by adding the code that you have provided me above:

    add_filter("um_get_field__register_profile_photo","um_061722_register_profile_photo_cropsize");
    function um_061722_register_profile_photo_cropsize( $array ){
    
        $array['min_width']  = 20;
        $array['min_height'] = 20;
    
        return $array;
    }

    I hope that in the future you will add a solution like this, or the meta key type with profile_photo and cover_photo and thus have the possibility of adding the profile photo or cover photo in the registration forms by uploading images.
    The issue is solved, thanks for adding it as solved.

    A big greeting and thank you very much for everything.
    Through the code I set the minimum limits manually, it is the quick alternative that I have right now.

    Hello @neoset ,
    I have been searching for solution to add profile picture field in registration form. how to achieve that?
    thanks n advance !

    Moderator Yui

    (@fierevere)

    永子

Viewing 9 replies - 1 through 9 (of 9 total)
  • The topic ‘Profile photo upload locked at 600px. Ultimate Member Registration Form’ is closed to new replies.