Skip to content

Commit

Permalink
Merge pull request #10 from joaolago1113/main
Browse files Browse the repository at this point in the history
Adding the capability to upload the cover photo on the register form.
  • Loading branch information
champsupertramp authored Oct 14, 2022
2 parents 5dfd235 + 7ae78ae commit f5dc5c5
Show file tree
Hide file tree
Showing 2 changed files with 223 additions and 0 deletions.
9 changes: 9 additions & 0 deletions um-cover-photo/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
## Ultimate Member - Enable Cover Photo in Register form

Enable users to upload their cover photo in Register form

- Just add the pre-defined field "Cover Photo" to the Register form via UM Form Builder!

## License

GNU Version 2 or Any Later Version
214 changes: 214 additions & 0 deletions um-cover-photo/um-cover-photo.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,214 @@
<?php
/*
Plugin Name: Ultimate Member - Enable Cover Photo in Register form
Plugin URI: http://ultimatemember.com/
Description: Enable users to upload their cover photo in Register form
Version: 1.3.0
Author: Ultimate Member Ltd.
Author URI: https://ultimatemember.com
*/

if ( ! defined( 'ABSPATH' ) ) exit;

/**
* Add new predefined field "Cover Photo" in UM Form Builder.
*
* @param array $arr field array settings.
*/
function um_predefined_fields_hook_cover_photo( $arr ) {

$arr['register_cover_photo'] = array(
'title' => __('Cover Photo','ultimate-member'),
'metakey' => 'register_cover_photo',
'type' => 'image',
'label' => __('Change your cover photo','ultimate-member'),
'upload_text' => __('Upload profile cover here','ultimate-member'),
'icon' => 'um-faicon-picture-o',
'crop' => 2,
'editable' => 1,
'max_size' => ( UM()->options()->get('cover_photo_max_size') ) ? UM()->options()->get('cover_photo_max_size') : 999999999,
'modal_size' => 'large',
'ratio' => str_replace(':1','',UM()->options()->get('profile_cover_ratio')),
'min_width' => UM()->options()->get('cover_min_width')
);


return $arr;
}
add_filter( 'um_predefined_fields_hook', 'um_predefined_fields_hook_cover_photo', 99999, 1 );

/**
* Multiply Cover Photo with different sizes
*
* @param integer $user_id the user ID.
*/
function um_registration_set_cover_photo( $user_id, $args ) {


if( isset( $args['form_id'] )) $req = 'register_cover_photo-' . $args['form_id'];
else $req = 'register_cover_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, 'cover_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-cover-photo'] ) ? $_COOKIE['um-register-cover-photo'] : null;

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, "cover_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_cover_photo' );
update_user_meta( $user_id, 'cover_photo', "cover_photo.{$ext}" );
update_user_meta( $user_id, 'register_cover_photo', "cover_photo.{$ext}" );
@unlink( $temp_image_path );

}

}

add_action( 'um_after_user_account_updated', 'um_registration_set_cover_photo', 1, 2 );
add_action( 'um_registration_set_extra_data', 'um_registration_set_cover_photo', 1, 2 );


/**
* Set Temporary user id
*/
function um_register_cover_photo_set_temp_user_id() {

$temp_profile_id = isset( $_COOKIE['um-register-cover-photo'] ) ? $_COOKIE['um-register-cover-photo'] : null;
if ( ! $temp_profile_id ) {
setcookie( 'um-register-cover-photo', md5( time() ), time() + 3600, COOKIEPATH, COOKIE_DOMAIN );
}

}
add_action( 'template_redirect', 'um_register_cover_photo_set_temp_user_id' );

/**
* Set handler callback for filename
*/
function um_register_cover_photo_upload_handler( $override_handler ) {

if ( 'stream_photo' == UM()->uploader()->upload_image_type && 'register_cover_photo' == UM()->uploader()->field_key ) {

$override_handler['unique_filename_callback'] = 'um_register_cover_photo_name';
}

return $override_handler;
}
add_filter( 'um_image_upload_handler_overrides__register_cover_photo', 'um_register_cover_photo_upload_handler', 99999 );

/**
* Change filename
*/
function um_register_cover_photo_name( $dir, $filename, $ext ) {
$temp_profile_id = isset( $_COOKIE['um-register-cover-photo'] ) ? $_COOKIE['um-register-cover-photo'] : null;

return "cover_photo_{$temp_profile_id}_temp{$ext}";

}

/**
* Support cover photo uploader in Account form
*/
function um_register_display_cover_photo_in_account( $field_atts, $key, $data ) {

if ( 'register_cover_photo' == $key && um_is_core_page( 'account' ) ) {

$profile_photo = UM()->uploader()->get_upload_base_url() . um_user( 'ID' ) . DIRECTORY_SEPARATOR . um_profile( 'cover_photo' ) . '?ts=' . current_time( 'timestamp' );

$field_atts['data-cover_photo'] = array( $profile_photo );
}

return $field_atts;
}
add_filter( 'um_field_extra_atts', 'um_register_display_cover_photo_in_account', 10, 3 );

/**
* Clear cover photo cache
*/
function um_register_display_cover_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_cover_photo']");

register_profile_photo.find(".um-field-area").find(".um-single-image-preview").find("img").attr("src", register_profile_photo.data("cover_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_cover_photo_script' );

/**
* Delete cover photo viam the account form
*/
function um_register_delete_cover_photo_from_account() {

if( isset( $_REQUEST['mode'] ) && "account" == $_REQUEST['mode'] ) {
UM()->files()->delete_core_user_photo( get_current_user_id(), 'cover_photo' );
}
wp_send_json_success();

}
add_action( 'wp_ajax_um_remove_file', 'um_register_delete_cover_photo_from_account', 1 );

0 comments on commit f5dc5c5

Please sign in to comment.