HEX
Server: nginx/1.24.0
System: Linux DGT-WORDPRESS-VM-SERVER 6.14.0-1017-azure #17~24.04.1-Ubuntu SMP Mon Dec 1 20:10:50 UTC 2025 x86_64
User: ubuntu (1000)
PHP: 8.4.12
Disabled: NONE
Upload Files
File: /mnt/data/doccure-wp-demo/wp-content/plugins/doccure/hooks/hook-test.php
<form class="dc-formtheme dc-formregister" enctype="multipart/form-data" >
								<div class="tab-content dc-registertabcontent">
									<div class="dc-registerformmain">
										<?php if( !empty( $step_image ) ){?>
											<figure class="dc-joinformsimg">
												<img src="<?php echo esc_url( $step_image ); ?>" alt="<?php esc_attr('Registration', 'doccure'); ?>">
											</figure>
										<?php }?>
										<?php if( !empty( $step_title ) || !empty( $step_desc ) ) { ?>
											<div class="dc-registerhead">
												<?php if( !empty( $step_title ) ) { ?>
													<div class="dc-title">
														<h3><?php echo esc_html( $step_title ); ?></h3>
													</div>
												<?php } ?>
												<?php if( !empty( $step_desc ) ) { ?>
													<div class="description">
														<?php echo do_shortcode( $step_desc ); ?>
													</div>
												<?php } ?>
											</div>
										<?php } ?>

										<fieldset class="dc-formregisterstart">
												<!-- <div class="dc-title dc-formtitle"><h4><?php esc_html_e('Start as :', 'doccure' ); ?></h4></div> -->
												<?php if( !empty( $user_types ) ){ ?>
													<ul class="dc-startoption">
														<?php
															foreach( $user_types as $key => $val) {
															
																$checked	= !empty( $key ) && $key === 'doctors' ? 'checked=""' : '';
																$display	= !empty( $key ) && $key === 'seller' ? esc_html__('Store name','doccure') : esc_html__('Display name','doccure');
																 if( !empty($reg_option) && in_array($key,$reg_option)){?>
																<li>
																	<span class="dc-radio" data-display="<?php echo esc_attr($display);?>">
																		<input id="dc-<?php echo esc_attr($key);?>" type="radio" name="user_type" value="<?php echo esc_attr($key);?>" <?php echo esc_attr($checked);?>>
																		<label for="dc-<?php echo esc_attr($key);?>"><?php echo esc_html($val);?></label>
																	</span>
																</li>
															<?php } ?>
														<?php } ?>
													</ul>
												<?php } ?>
											</fieldset>
										 
										<div class="dc-joinforms">
											<fieldset class="dc-registerformgroup">
												<div class="form-group form-group-half">
													<input type="text" name="first_name" class="form-control" value="" placeholder="<?php esc_attr_e('First Name', 'doccure'); ?>">
												</div>
												<div class="form-group form-group-half">
													<input type="text" name="last_name" value="" class="form-control" placeholder="<?php esc_attr_e('Last Name', 'doccure'); ?>">
												</div>
												<div class="form-group form-group-half">
													<input type="text" name="username" class="form-control" value="" placeholder="<?php esc_attr_e('username', 'doccure'); ?>">
												</div>

												<div class="form-group form-group-half">
													<input type="text" name="registration_number" class="form-control" value="" placeholder="<?php esc_attr_e('Registration Number', 'doccure'); ?>">
												</div>
												

												<div class="form-group form-group-half">
													<input type="file" name="document" class="form-control" value="" placeholder="<?php esc_attr_e('Upload Document', 'doccure'); ?>">
												</div>

												
											 


											 	<div class="input-block">
    <label for="email" class="form-label"><?php echo esc_html__('Email ', 'doccure'); ?><span class="text-danger"><?php echo esc_html__('*', 'doccure'); ?></span></label>
    <div class="input-group">
	<input type="hidden" name="email" id="email_hidden" value="">
	<?php
		$otp_switch = $doccure_options['otp_switch'];
		?>

		<input 
			type="email" 
			name="<?php echo esc_attr($otp_switch == '1') ? 'email_otp' : 'email'; ?>" 
			class="form-control" 
			id="email" 
			placeholder="<?php esc_attr_e('Email', 'doccure'); ?>"
		>

		<?php if ($otp_switch == '1') { ?>
			<button type="button" id="send_otp" class="btn btn-primary">
				<?php esc_html_e('Send OTP', 'doccure'); ?>
			</button>
		<?php } ?>

    </div>
</div>

<div class="input-block" id="otp_block" style="display: none;">
    <label for="otp" class="form-label"><?php echo esc_html__('Enter OTP', 'doccure'); ?><span class="text-danger"><?php echo esc_html__('*', 'doccure'); ?></span></label>
    <div class="input-group">
        <input type="text" name="otp" class="form-control" id="otp" maxlength="6">
        <button type="button" id="verify_otp" class="btn btn-primary"><?php esc_html_e('Verify', 'doccure' ); ?></button>
    </div>
</div>


												
											</fieldset>
											
											<fieldset class="dc-registerformgroup">
												<?php if(!empty($remove_location) && $remove_location == 'no'){?>
													<div class="form-group">
														<span class="dc-select">
															<?php do_action('doccure_get_locations_list','location',''); ?>	
														</span>
													</div>
												<?php }?>
												<div class="form-group form-group-half">
													<input type="password" name="password" class="form-control" placeholder="<?php esc_attr_e('Password*', 'doccure' ); ?>">
												</div>
												<div class="form-group form-group-half">
													<input type="password" name="verify_password" class="form-control" placeholder="<?php esc_attr_e('Retype Password*', 'doccure' ); ?>">
												</div>
											</fieldset>
											
											
											<fieldset class="dc-termsconditions">
												<div class="dc-checkboxholder">
													 <div class="form-group form-group-half wt-display-type">
														<input type="text" name="display_name" class="form-control" value="" placeholder="<?php esc_attr_e('Display Name', 'doccure'); ?>">
													</div>	 
													<span>
														<input id="termsconditions" type="checkbox" name="termsconditions" value="checked">
														<label for="termsconditions">
															<span>
																<?php echo esc_html( $term_text ); ?>
																<?php if( !empty( 	$terms_link ) ) { ?>
																	<a target="_blank" href="<?php echo esc_url( $terms_link ); ?>">
																		<?php esc_html_e('Terms & Conditions', 'doccure'); ?>
																	</a>
																<?php } ?>
															</span>
														</label>
													</span>	
													<div class="form-group">
														<button id="signup_button" class="dc-btn rg-step-start" type="submit"><?php esc_html_e('Signup', 'doccure'); ?></button>
													</div>							
												</div>
											</fieldset>
										</div>
									</div>
								</div>    
								<?php if( !is_user_logged_in() ){ ?>
									<div class="dc-registerformfooter">
										<span><?php esc_html_e('Already Have an Account?', 'doccure' ); ?><a   href="<?php echo esc_html(home_url());?>/login">&nbsp;<?php esc_html_e('Login Now', 'doccure'); ?></a></span>
									</div>
								<?php } ?>
							</form>  
<script>
    jQuery(document).on('click', '.rg-step-start', function (e) { 
			e.preventDefault();
			
			var formData = new FormData(jQuery('.dc-formregister')[0]);
			formData.append('action', 'doccure_process_registration');
			formData.append('security', scripts_vars.ajax_nonce);
			
			jQuery.ajax({
				type: "POST",
				url: scripts_vars.ajaxurl,
				data: formData,
				processData: false,  // Prevent jQuery from processing data
				contentType: false,  // Prevent jQuery from setting content type
				dataType: "json",
				success: function (response) {
					jQuery('.dc-preloader-section').remove();
					if (response.type === 'success') {
						jQuery.sticky(response.message, {classList: 'success', speed: 200, autoclose: 5000 });
		
						if (response.retrun_url) {
							window.location.replace(response.retrun_url);
						}  
					} else {
						jQuery.sticky(response.message, {classList: 'important', speed: 200, autoclose: 5000});
					}
				}
			});
		});
</script>

<?php 


if( !function_exists( 'doccure_process_registration' ) ){
	function doccure_process_registration(){
		global $doccure_options;
		if( function_exists('doccure_is_demo_site') ) { 
			doccure_is_demo_site() ;
		}; //if demo site then prevent
		
		$verify_user			= !empty( $doccure_options['verify_user'] ) ? $doccure_options['verify_user'] : '';
		$remove_location 		= !empty( $doccure_options['remove_location'] ) ? $doccure_options['remove_location'] : 'no';
		
		//security check
		if (!wp_verify_nonce($_POST['security'], 'ajax_nonce')) {
			$json['type'] = 'error';
			$json['message'] = esc_html__('Security check failed, this could be because of your browser cache. Please clear the cache and check it againe', 'doccure_core');
			wp_send_json( $json );
		}

		//Validation
		$validations = array(
            'first_name' 	=> esc_html__('First Name is required', 'doccure_core'),
			'first_name' 	=> esc_html__('First Name is required', 'doccure_core'),
            'last_name' 	=> esc_html__('Last Name is required.', 'doccure_core'),
            'username'  	=> esc_html__('Username field is required.', 'doccure_core'),
			'location' 			=> esc_html__('Location field is required', 'doccure_core'),
			'password' 			=> esc_html__('Password field is required', 'doccure_core'),
            'verify_password' 	=> esc_html__('Verify Password field is required.', 'doccure_core'),
            'user_type'  		=> esc_html__('User type field is required.', 'doccure_core'),            
            'termsconditions'  	=> esc_html__('You should agree to terms and conditions.', 'doccure_core'),    
			'display_name'  => esc_html__('Your name field is required.', 'doccure_core'),
        );
		
		//unset location if settings true 
		if(!empty($remove_location) && $remove_location == 'yes'){
			unset( $validations['location'] );
		}
		
		//start validating
        foreach ( $validations as $key => $value ) {
            if ( empty( $_POST[$key] ) ) {
                $json['type'] 		= 'error';
                $json['message'] 	= $value;
                wp_send_json( $json );
            }

            //Validate email address
            if ( $key === 'email' ) {
                if ( !is_email( $_POST['email'] ) ) {
                    $json['type'] 		= 'error';
                    $json['message'] 	= esc_html__('Please add a valid email address.', 'doccure_core');
                     wp_send_json( $json );
            	}
       		}
			
			if ($key === 'password') {
                if ( strlen( $_POST[$key] ) < 6 ) {
                    $json['type'] 	 = 'error';
                    $json['message'] = esc_html__('Password length should be minimum 6', 'doccure_core');
                    wp_send_json( $json );
                }
            } 
			
			
            if ($key === 'verify_password') {
                if ( $_POST['password'] != $_POST['verify_password']) {
                    $json['type'] 		= 'error';
                    $json['message'] 	= esc_html__('Password does not match.', 'doccure_core');
                    wp_send_json( $json );
                }
            }    
       	}
		
		extract($_POST);
		
		$email = isset($_POST['email']) ? sanitize_email($_POST['email']) : '';
		$display_name = isset($_POST['display_name']) ? sanitize_text_field($_POST['display_name']) : '';

		$first_name = isset($_POST['first_name']) ? sanitize_text_field($_POST['first_name']) : '';
		$last_name = isset($_POST['last_name']) ? sanitize_text_field($_POST['last_name']) : '';
		$username = isset($_POST['username']) ? sanitize_text_field($_POST['username']) : '';
		$location = isset($_POST['location']) ? sanitize_text_field($_POST['location']) : '';
		$password = isset($_POST['password']) ? $_POST['password'] : '';
		$user_type = isset($_POST['user_type']) ? sanitize_text_field($_POST['user_type']) : '';
		$registration_number = isset($_POST['registration_number']) ? sanitize_text_field($_POST['registration_number']) : '';
		$username_exist 	 = username_exists( $username );
       	$user_exists 		 = email_exists( $email );
		
 

		 // File Upload Handling
		//  $document_url = ''; // Default empty
		//  if (!empty($_FILES['document']['name'])) {
		// 	 require_once ABSPATH . 'wp-admin/includes/file.php';
		// 	 require_once ABSPATH . 'wp-admin/includes/media.php';
		// 	 require_once ABSPATH . 'wp-admin/includes/image.php';
 
		// 	 $uploaded_file = $_FILES['document'];
		// 	 $upload_overrides = ['test_form' => false];
 
		// 	 $movefile = wp_handle_upload($uploaded_file, $upload_overrides);
		// 	}


        // File Upload Handling
$document_url = ''; // Default empty
$document_id = '';  // Default empty

if (!empty($_FILES['document']['name'])) {
    require_once ABSPATH . 'wp-admin/includes/file.php';
    require_once ABSPATH . 'wp-admin/includes/media.php';
    require_once ABSPATH . 'wp-admin/includes/image.php';

    $uploaded_file = $_FILES['document'];
    $upload_overrides = ['test_form' => false];

    // Handle file upload
    $movefile = wp_handle_upload($uploaded_file, $upload_overrides);

    if ($movefile && !isset($movefile['error'])) {
        $document_url = $movefile['url']; // Get file URL

        // Prepare attachment data
        $file_path = $movefile['file']; // Full path of the uploaded file
        $file_name = basename($file_path);
        $file_type = wp_check_filetype($file_name, null);

        $attachment = [
            'guid'           => $document_url, 
            'post_mime_type' => $file_type['type'],
            'post_title'     => preg_replace('/\.[^.]+$/', '', $file_name),
            'post_content'   => '',
            'post_status'    => 'inherit'
        ];

        // Insert the attachment into the media library
        $document_id = wp_insert_attachment($attachment, $file_path);

        // Generate attachment metadata and update
        require_once ABSPATH . 'wp-admin/includes/image.php';
        $attach_data = wp_generate_attachment_metadata($document_id, $file_path);
        wp_update_attachment_metadata($document_id, $attach_data);
    }
}

// Now you have both $document_url and $document_id

			
		if(!is_email($email)){
			$json['type'] 		= 'error';
            $json['message'] 	= esc_html__('Please add valid email address', 'doccure_core');
            wp_send_json( $json );
		}
		
		if( $username_exist ){
       		$json['type'] 		= 'error';
            $json['message'] 	= esc_html__('Username already registered', 'doccure_core');
            wp_send_json( $json );
       	}
		
		//check exists
       	if( $user_exists ){
       		$json['type'] 		= 'error';
            $json['message'] 	= esc_html__('This email already registered', 'doccure_core');
            wp_send_json( $json );
       	}
		
		//Get user data from session
		
		//Session data validation
		if( empty( $username ) 
		   || empty( $first_name ) 
		   || empty( $last_name ) 
		   || empty( $email ) 
		   || empty( $display_name ) 
		 ) {


			$json['type'] 		= 'error';
			$json['message'] 	= esc_html__( 'Please add all the required fields', 'doccure_core' );
			wp_send_json( $json );
		}		
		
		$post_type		 = $user_type;
		$random_password = $password;
		$user_nicename   = sanitize_title( $display_name );
		
		$userdata = array(
			'user_login'  		=> $username,
			'user_pass'    		=> $random_password,
			'user_email'   		=> $email,  
			'user_nicename'   	=> $user_nicename,  
			'display_name'		=> $display_name
		);
		
        $user_identity 	 = wp_insert_user( $userdata );
		
        if ( is_wp_error( $user_identity ) ) {
            $json['type'] 		= "error";
            $json['message'] 	= esc_html__("Some error occurs, please try again later", 'doccure_core');
            wp_send_json($json);
        } else {
        	global $wpdb;
            wp_update_user( array('ID' => esc_sql( $user_identity ), 'role' => esc_sql( $user_type ), 'user_status' => 1 ) );

            $wpdb->update(
                    $wpdb->prefix . 'users', array('user_status' => 1), array('ID' => esc_sql($user_identity))
            );

            update_user_meta( $user_identity, 'first_name', $first_name );
            update_user_meta( $user_identity, 'last_name', $last_name );  
			update_user_meta( $user_identity, '_is_verified', 'no' );
			update_user_meta($user_identity, 'show_admin_bar_front', false);
			update_user_meta($user_identity, '_registration_number', $registration_number);


			
				 if ($movefile && !isset($movefile['error'])) {
					 $document_url = esc_url($movefile['url']);
					 update_user_meta($user_identity, '_documents', $document_url);
				 }  
			

			//verification link
			$key_hash = md5(uniqid(openssl_random_pseudo_bytes(32)));
			update_user_meta( $user_identity, 'confirmation_key', $key_hash);
			$protocol = is_ssl() ? 'https' : 'http';
			$verify_link = esc_url(add_query_arg(array('key' => $key_hash.'&verifyemail='.$email), home_url('/', $protocol)));

			if( !empty($user_type) && $user_type === 'seller'){
				$vendor_details	= array();
				$vendor_details['store_name']	= $display_name;

				update_user_meta( $user_identity, 'dokan_profile_settings', $vendor_details );

				$blogname 	= wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
				$emailData = array();
				$emailData['name'] 				= $display_name;
				$emailData['password'] 			= $random_password;
				$emailData['email'] 			= $email;
				$emailData['username'] 			= $username;
				$emailData['site'] 				= $blogname;
				$emailData['verification_link'] = $verify_link;
				
				if (class_exists('doccureRegisterNotify')) {
					$email_helper = new doccureRegisterNotify();
					$email_helper->send_seller_user_email($emailData);
				}
				
			}else{
				//Create Post
				$user_post = array(
					'post_title'    => wp_strip_all_tags( $display_name ),
					'post_status'   => 'publish',
					'post_author'   => $user_identity,
					'post_type'     => $post_type,
				);

				$post_id    = wp_insert_post( $user_post );

				if( !is_wp_error( $post_id ) ) {

					$profile_data	= array();
					$profile_data['am_first_name']	= $first_name;
					$profile_data['am_last_name']	= $last_name;
					$profile_data['am_last_name']	= $last_name;
					$profile_data['am_registration_number']	= $registration_number;
				   // $profile_data['am_document']	= $document_url;

                   $profile_data['am_document'] = array(
                    'url' => $document_url,
                    'id'  => $document_id // Assuming you have a document ID
                );
					update_post_meta($post_id, 'am_' . $post_type . '_data', $profile_data);
 
					//Update user linked profile
					update_user_meta( $user_identity, '_linked_profile', $post_id );
					update_post_meta( $post_id, '_is_verified', 'no' );						
					update_post_meta($post_id, '_linked_profile', $user_identity);
					update_post_meta( $post_id, 'is_featured', 0 );
					
					if( !empty( $location ) ){
						$locations = get_term_by( 'slug', $location, 'locations' );
						$location_data = array();
						if( !empty( $locations ) ){
							$location_data[0] = $locations->term_id;
							wp_set_post_terms( $post_id, $locations->term_id, 'locations' );
						}
					}

					//update privacy settings
					$settings		 = doccure_get_account_settings($user_type);
					if( !empty( $settings ) ){
						foreach( $settings as $key => $value ){
							$val = !empty($key) && $key === '_profile_blocked' ? 'off' : 'on';
							update_post_meta($post_id, $key, $val);
						}
					}

					$user_type	= doccure_get_user_type( $user_identity );
					if( !empty( $user_type ) && $user_type === 'doctors' ) {
						if( function_exists('doccure_get_package_type') ){
							$trail_doctors_id	= doccure_get_package_type( 'package_type','trail_doctors');
							if( !empty( $trail_doctors_id ) ){
								doccure_update_package_data( $trail_doctors_id ,$user_identity,'',1 );
							}
						}
					}

					if( function_exists('doccure_full_name') ) {
						$name	= doccure_full_name($post_id);
					} else {
						$name	= $first_name;
					}

					//Send email to users
					if (class_exists('doccure_Email_helper')) {
						$blogname = wp_specialchars_decode(get_option('blogname'), ENT_QUOTES);
						$emailData = array();
						$emailData['name'] 				= $name;
						$emailData['password'] 			= $random_password;
						$emailData['email'] 			= $email;
						$emailData['username'] 			= $username;
						$emailData['site'] 				= $blogname;
						$emailData['verification_link'] = $verify_link;

						//Send code
						if (class_exists('doccureRegisterNotify')) {
							$email_helper = new doccureRegisterNotify();
							if( !empty($user_type) && $user_type === 'doctors' ){
								$email_helper->send_doctor_email($emailData);
							} else if( !empty($user_type) && $user_type === 'hospitals' ){
								$email_helper->send_hospital_email($emailData);
							}else if( !empty($user_type) && $user_type === 'regular_users' ){
								$email_helper->send_regular_user_email($emailData);
								update_post_meta( $post_id, '_is_verified', 'yes' );
								update_user_meta( $user_identity, '_is_verified', 'yes' );
							}
						}

					}		    

				} else {
					$json['type'] 		= 'error';
					$json['message'] 	= esc_html__('Some error occurs, please try again later', 'doccure_core');                
					wp_send_json($json);
				}
			}
			
			//Send admin email
			if (class_exists('doccureRegisterNotify')) {
				$email_helper = new doccureRegisterNotify();
				$email_helper->send_admin_email($emailData);
			}

			//verification
			if( empty( $verify_user ) || $verify_user == 'remove'){
				update_post_meta( $post_id, '_is_verified', 'yes' );
				update_user_meta( $user_identity, '_is_verified', 'yes' );
				if( !empty($user_type) && $user_type == 'seller' ){
					update_user_meta( $user_identity, 'dokan_enable_selling', 'yes' );
				}
			}
						
		}
		
		//User Login
		$user_array = array();
		$user_array['user_login'] 		= $email;
		$user_array['user_password'] 	= $random_password;
		wp_signon($user_array, false);

		if( empty( $verify_user ) || $verify_user === 'yes'){	
			$json_message 		= esc_html__("Your account has been created. Please check your email for the verification", 'doccure_core');
		} else if( empty( $verify_user ) || $verify_user === 'remove'){
			$json_message 		= esc_html__("Thank you so much for the registration.", 'doccure_core');
		}else if( !empty($user_type) && $user_type === 'regular_users' ){ 
			$json_message 		= esc_html__("Your account has been created.", 'doccure_core');
		} else { 
			$json_message 		= esc_html__("Your account has been created. After the verification your will be do anything on the site", 'doccure_core');
		}	       
		
		if( !empty($user_type) && $user_type == 'seller' ){
			if(apply_filters('doccure_dokan_active',false) === true){
				$my_dashboard_id = dokan_get_option( 'dashboard', 'dokan_pages' );
				$return_page    = get_the_permalink($my_dashboard_id);
			}
		}else{
			$return_page = doccure_get_search_page_uri('dashboard'); 
			if( function_exists('doccure_redirect_after_login_page') ){
				$return_page   	= doccure_redirect_after_login_page($user_identity);
			}
		}
 
		$json['type'] 			= 'success';
		$json['message'] 		= $json_message;
		$json['retrun_url'] 	= htmlspecialchars_decode($return_page);
		wp_send_json($json);
	}
	add_action('wp_ajax_doccure_process_registration', 'doccure_process_registration');
    add_action('wp_ajax_nopriv_doccure_process_registration', 'doccure_process_registration');
}

?>