636 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			636 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| /**
 | |
|  * Customers - Admin Actions.
 | |
|  *
 | |
|  * @package     EDD
 | |
|  * @subpackage  Admin/Customers
 | |
|  * @copyright   Copyright (c) 2018, Easy Digital Downloads, LLC
 | |
|  * @license     http://opensource.org/licenses/gpl-2.0.php GNU Public License
 | |
|  * @since       2.3
 | |
|  */
 | |
| 
 | |
| // Exit if accessed directly
 | |
| defined( 'ABSPATH' ) || exit;
 | |
| 
 | |
| /**
 | |
|  * Update customer.
 | |
|  *
 | |
|  * @since 2.3
 | |
|  * @since 3.0 Updated to use new query methods and custom tables.
 | |
|  *
 | |
|  * @param array $args Form data being passed.
 | |
|  * @return false|array $output Response message.
 | |
|  */
 | |
| function edd_edit_customer( $args = array() ) {
 | |
| 
 | |
| 	// Bail if nothing new to edit.
 | |
| 	if ( empty( $args ) || empty( $args['customerinfo'] ) || empty( $args['_wpnonce'] ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	$customer_edit_role = edd_get_edit_customers_role();
 | |
| 
 | |
| 	// Bail if user cannot edit customers.
 | |
| 	if ( ! is_admin() || ! current_user_can( $customer_edit_role ) ) {
 | |
| 		wp_die( esc_html__( 'You do not have permission to edit this customer.', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	$customer_info = $args['customerinfo'];
 | |
| 	$customer_id   = (int) $customer_info['id'];
 | |
| 	$nonce         = $args['_wpnonce'];
 | |
| 
 | |
| 	// Bail if nonce check fails
 | |
| 	if ( ! wp_verify_nonce( $nonce, 'edit-customer' ) ) {
 | |
| 		wp_die( esc_html__( 'Cheatin\' eh?!', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	// Bail if customer does not exist.
 | |
| 	$customer = edd_get_customer( $customer_id );
 | |
| 	if ( ! $customer ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	// Parse customer info with defaults.
 | |
| 	$customer_info = wp_parse_args( $customer_info, array(
 | |
| 		'name'         => '',
 | |
| 		'email'        => '',
 | |
| 		'date_created' => '',
 | |
| 		'user_id'      => 0
 | |
| 	) );
 | |
| 
 | |
| 	if ( ! is_email( $customer_info['email'] ) ) {
 | |
| 		edd_set_error( 'edd-invalid-email', __( 'Please enter a valid email address.', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	if ( (int) $customer_info['user_id'] !== (int) $customer->user_id ) {
 | |
| 
 | |
| 		// Make sure we don't already have this user attached to a customer
 | |
| 		if ( ! empty( $customer_info['user_id'] ) && false !== edd_get_customer_by( 'user_id', $customer_info['user_id'] ) ) {
 | |
| 			edd_set_error( 'edd-invalid-customer-user_id', sprintf( __( 'The User ID %d is already associated with a different customer.', 'easy-digital-downloads' ), $customer_info['user_id'] ) );
 | |
| 		}
 | |
| 
 | |
| 		// Make sure it's actually a user
 | |
| 		$user = get_user_by( 'id', $customer_info['user_id'] );
 | |
| 		if ( ! empty( $customer_info['user_id'] ) && false === $user ) {
 | |
| 			edd_set_error( 'edd-invalid-user_id', sprintf( __( 'The User ID %d does not exist. Please assign an existing user.', 'easy-digital-downloads' ), $customer_info['user_id'] ) );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	// Record this for later
 | |
| 	$previous_user_id = $customer->user_id;
 | |
| 
 | |
| 	// Bail if errors exist.
 | |
| 	if ( edd_get_errors() ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	$user_id = absint( $customer_info['user_id'] );
 | |
| 
 | |
| 	if ( empty( $user_id ) && ! empty( $customer_info['user_login'] ) ) {
 | |
| 
 | |
| 		// See if they gave an email, otherwise we'll assume login
 | |
| 		$user_by_field = is_email( $customer_info['user_login'] )
 | |
| 			? 'email'
 | |
| 			: 'login';
 | |
| 
 | |
| 		$user = get_user_by( $user_by_field, $customer_info['user_login'] );
 | |
| 
 | |
| 		if ( $user ) {
 | |
| 			$user_id = $user->ID;
 | |
| 		} else {
 | |
| 			edd_set_error( 'edd-invalid-user-string', sprintf( __( 'Failed to attach user. The login or email address %s was not found.', 'easy-digital-downloads' ), $customer_info['user_login'] ) );
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	// Setup the customer address, if present.
 | |
| 	$address = array();
 | |
| 
 | |
| 	$address['address'] = isset( $customer_info['address'] )
 | |
| 		? $customer_info['address']
 | |
| 		: '';
 | |
| 
 | |
| 	$address['address2'] = isset( $customer_info['address2'] )
 | |
| 		? $customer_info['address2']
 | |
| 		: '';
 | |
| 
 | |
| 	$address['city'] = isset( $customer_info['city'] )
 | |
| 		? $customer_info['city']
 | |
| 		: '';
 | |
| 
 | |
| 	$address['country'] = isset( $customer_info['country'] )
 | |
| 		? $customer_info['country']
 | |
| 		: '';
 | |
| 
 | |
| 	$address['postal_code'] = isset( $customer_info['postal_code'] )
 | |
| 		? $customer_info['postal_code']
 | |
| 		: '';
 | |
| 
 | |
| 	$address['region'] = isset( $customer_info['region'] )
 | |
| 		? $customer_info['region']
 | |
| 		: '';
 | |
| 
 | |
| 	// Sanitize the inputs
 | |
| 	$customer_data                 = array();
 | |
| 	$customer_data['name']         = strip_tags( stripslashes( $customer_info['name'] ) );
 | |
| 	$customer_data['email']        = $customer_info['email'];
 | |
| 	$customer_data['user_id']      = $user_id;
 | |
| 	$customer_data['date_created'] = gmdate( 'Y-m-d H:i:s', strtotime( $customer_info['date_created'] ) );
 | |
| 
 | |
| 	$customer_data = apply_filters( 'edd_edit_customer_info', $customer_data, $customer_id );
 | |
| 	$address       = apply_filters( 'edd_edit_customer_address', $address, $customer_id );
 | |
| 
 | |
| 	$customer_data = array_map( 'sanitize_text_field', $customer_data );
 | |
| 	$address       = array_map( 'sanitize_text_field', $address );
 | |
| 
 | |
| 	do_action( 'edd_pre_edit_customer', $customer_id, $customer_data, $address );
 | |
| 
 | |
| 	$output         = array();
 | |
| 	$previous_email = $customer->email;
 | |
| 
 | |
| 	// Add new address before update to skip exists checks
 | |
| 	if ( $previous_email !== $customer_data['email'] ) {
 | |
| 		$customer->add_email( $customer_data['email'], true );
 | |
| 	}
 | |
| 
 | |
| 	// Update customer
 | |
| 	if ( $customer->update( $customer_data ) ) {
 | |
| 		$current_address        = $customer->get_address();
 | |
| 		$address['customer_id'] = $customer->id;
 | |
| 
 | |
| 		if ( $current_address ) {
 | |
| 			edd_update_customer_address( $current_address->id, $address );
 | |
| 		} else {
 | |
| 			$address['is_primary'] = true;
 | |
| 			edd_add_customer_address( $address );
 | |
| 		}
 | |
| 
 | |
| 		$output['success']       = true;
 | |
| 		$customer_data           = array_merge( $customer_data, $address );
 | |
| 		$output['customer_info'] = $customer_data;
 | |
| 	} else {
 | |
| 		$output['success'] = false;
 | |
| 	}
 | |
| 
 | |
| 	do_action( 'edd_post_edit_customer', $customer_id, $customer_data );
 | |
| 
 | |
| 	if ( edd_doing_ajax() ) {
 | |
| 		wp_send_json( $output );
 | |
| 	}
 | |
| 
 | |
| 	return $output;
 | |
| }
 | |
| add_action( 'edd_edit-customer', 'edd_edit_customer', 10, 1 );
 | |
| 
 | |
| /**
 | |
|  * Add an email address to the customer from within the admin and log a customer note
 | |
|  *
 | |
|  * @since  2.6
 | |
|  * @param  array $args  Array of arguments: nonce, customer id, and email address
 | |
|  * @return mixed        Echos JSON if doing AJAX. Returns array of success (bool) and message (string) if not AJAX.
 | |
|  */
 | |
| function edd_add_customer_email( $args = array() ) {
 | |
| 	$customer_edit_role = edd_get_edit_customers_role();
 | |
| 
 | |
| 	if ( ! is_admin() || ! current_user_can( $customer_edit_role ) ) {
 | |
| 		wp_die( __( 'You do not have permission to edit this customer.', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	$output = array();
 | |
| 
 | |
| 	if ( empty( $args ) || empty( $args['email'] ) || empty( $args['customer_id'] ) ) {
 | |
| 
 | |
| 		$output['success'] = false;
 | |
| 
 | |
| 		if ( empty( $args['email'] ) ) {
 | |
| 			$output['message'] = __( 'Email address is missing.', 'easy-digital-downloads' );
 | |
| 		} else if ( empty( $args['customer_id'] ) ) {
 | |
| 			$output['message'] = __( 'Customer ID is required.', 'easy-digital-downloads' );
 | |
| 		} else {
 | |
| 			$output['message'] = __( 'An error has occured. Please try again.', 'easy-digital-downloads' );
 | |
| 		}
 | |
| 
 | |
| 	} else if ( ! wp_verify_nonce( $args['_wpnonce'], 'edd-add-customer-email' ) ) {
 | |
| 		$output = array(
 | |
| 			'success' => false,
 | |
| 			'message' => __( 'Nonce verification failed.', 'easy-digital-downloads' ),
 | |
| 		);
 | |
| 
 | |
| 	} else if ( ! is_email( $args['email'] ) ) {
 | |
| 		$output = array(
 | |
| 			'success' => false,
 | |
| 			'message' => __( 'Invalid email address.', 'easy-digital-downloads' ),
 | |
| 		);
 | |
| 
 | |
| 	} else {
 | |
| 		$email             = sanitize_email( $args['email'] );
 | |
| 		$customer_id       = (int) $args['customer_id'];
 | |
| 		$primary           = 'true' === $args['primary'] ? true : false;
 | |
| 		$customer          = new EDD_Customer( $customer_id );
 | |
| 		$customer_email_id = $customer->add_email( $email, $primary );
 | |
| 
 | |
| 		if ( false === $customer_email_id ) {
 | |
| 
 | |
| 			if ( in_array( $email, $customer->emails, true ) ) {
 | |
| 				$output = array(
 | |
| 					'success'  => false,
 | |
| 					'message'  => __( 'Email already associated with this customer.', 'easy-digital-downloads' ),
 | |
| 				);
 | |
| 
 | |
| 			} else {
 | |
| 				$output = array(
 | |
| 					'success' => false,
 | |
| 					'message' => __( 'Email address is already associated with another customer.', 'easy-digital-downloads' ),
 | |
| 				);
 | |
| 			}
 | |
| 
 | |
| 		} else {
 | |
| 			$redirect = edd_get_admin_url(
 | |
| 				array(
 | |
| 					'page'         => 'edd-customers',
 | |
| 					'view'         => 'overview',
 | |
| 					'id'           => absint( $customer_id ),
 | |
| 					'edd-message'  => 'email-added',
 | |
| 					'edd-email-id' => absint( $customer_email_id ),
 | |
| 				)
 | |
| 			);
 | |
| 			$output   = array(
 | |
| 				'success'  => true,
 | |
| 				'message'  => __( 'Email successfully added to customer.', 'easy-digital-downloads' ),
 | |
| 				'redirect' => $redirect . '#edd_general_emails',
 | |
| 			);
 | |
| 
 | |
| 			$user          = wp_get_current_user();
 | |
| 			$user_login    = ! empty( $user->user_login ) ? $user->user_login : edd_get_bot_name();
 | |
| 			$customer_note = sprintf( __( 'Email address %s added by %s', 'easy-digital-downloads' ), $email, $user_login );
 | |
| 			$customer->add_note( $customer_note );
 | |
| 
 | |
| 			if ( $primary ) {
 | |
| 				$customer_note =  sprintf( __( 'Email address %s set as primary by %s', 'easy-digital-downloads' ), $email, $user_login );
 | |
| 				$customer->add_note( $customer_note );
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	if ( ! isset( $customer_id ) ) {
 | |
| 		$customer_id = isset( $args['customer_id'] ) ? $args['customer_id'] : false;
 | |
| 	}
 | |
| 
 | |
| 	do_action( 'edd_post_add_customer_email', $customer_id, $args );
 | |
| 
 | |
| 	if ( edd_doing_ajax() ) {
 | |
| 		wp_send_json( $output );
 | |
| 	}
 | |
| 
 | |
| 	return $output;
 | |
| }
 | |
| add_action( 'edd_customer-add-email', 'edd_add_customer_email', 10, 1 );
 | |
| 
 | |
| /**
 | |
|  * Remove an email address to the customer from within the admin and log a customer note
 | |
|  * and redirect back to the customer interface for feedback
 | |
|  *
 | |
|  * @since  2.6
 | |
|  * @return void
 | |
|  */
 | |
| function edd_remove_customer_email() {
 | |
| 	if ( empty( $_GET['id'] ) || ! is_numeric( $_GET['id'] ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	if ( empty( $_GET['email'] ) || ! is_email( $_GET['email'] ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	if ( empty( $_GET['_wpnonce'] ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	$nonce = $_GET['_wpnonce'];
 | |
| 	if ( ! wp_verify_nonce( $nonce, 'edd-remove-customer-email' ) ) {
 | |
| 		wp_die( __( 'Nonce verification failed', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
 | |
| 	}
 | |
| 
 | |
| 	$customer = new EDD_Customer( $_GET['id'] );
 | |
| 	if ( $customer->remove_email( $_GET['email'] ) ) {
 | |
| 		$url           = edd_get_admin_url(
 | |
| 			array(
 | |
| 				'page'        => 'edd-customers',
 | |
| 				'view'        => 'overview',
 | |
| 				'id'          => urlencode( $customer->id ),
 | |
| 				'edd-message' => 'email-removed',
 | |
| 			)
 | |
| 		);
 | |
| 		$user          = wp_get_current_user();
 | |
| 		$user_login    = ! empty( $user->user_login ) ? $user->user_login : edd_get_bot_name();
 | |
| 		$customer_note = sprintf( __( 'Email address %s removed by %s', 'easy-digital-downloads' ), sanitize_email( $_GET['email'] ), $user_login );
 | |
| 		$customer->add_note( $customer_note );
 | |
| 
 | |
| 	} else {
 | |
| 		$url = edd_get_admin_url(
 | |
| 			array(
 | |
| 				'page'        => 'edd-customers',
 | |
| 				'view'        => 'overview',
 | |
| 				'id'          => urlencode( $customer->id ),
 | |
| 				'edd-message' => 'email-remove-failed',
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	edd_redirect( $url . '#edd_general_emails' );
 | |
| }
 | |
| add_action( 'edd_customer-remove-email', 'edd_remove_customer_email', 10 );
 | |
| 
 | |
| /**
 | |
|  * Set an email address as the primary for a customer from within the admin and log a customer note
 | |
|  * and redirect back to the customer interface for feedback
 | |
|  *
 | |
|  * @since  2.6
 | |
|  * @return void
 | |
|  */
 | |
| function edd_set_customer_primary_email() {
 | |
| 	if ( empty( $_GET['id'] ) || ! is_numeric( $_GET['id'] ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	if ( empty( $_GET['email'] ) || ! is_email( $_GET['email'] ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	if ( empty( $_GET['_wpnonce'] ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	$nonce = $_GET['_wpnonce'];
 | |
| 	if ( ! wp_verify_nonce( $nonce, 'edd-set-customer-primary-email' ) ) {
 | |
| 		wp_die( __( 'Nonce verification failed', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
 | |
| 	}
 | |
| 
 | |
| 	$customer = new EDD_Customer( $_GET['id'] );
 | |
| 	if ( $customer->set_primary_email( $_GET['email'] ) ) {
 | |
| 		$url           = edd_get_admin_url(
 | |
| 			array(
 | |
| 				'page'        => 'edd-customers',
 | |
| 				'view'        => 'overview',
 | |
| 				'id'          => urlencode( $customer->id ),
 | |
| 				'edd-message' => 'primary-email-updated',
 | |
| 			)
 | |
| 		);
 | |
| 		$user          = wp_get_current_user();
 | |
| 		$user_login    = ! empty( $user->user_login ) ? $user->user_login : edd_get_bot_name();
 | |
| 		$customer_note = sprintf( __( 'Email address %s set as primary by %s', 'easy-digital-downloads' ), sanitize_email( $_GET['email'] ), $user_login );
 | |
| 		$customer->add_note( $customer_note );
 | |
| 
 | |
| 	} else {
 | |
| 		$url = edd_get_admin_url(
 | |
| 			array(
 | |
| 				'page'        => 'edd-customers',
 | |
| 				'view'        => 'overview',
 | |
| 				'id'          => urlencode( $customer->id ),
 | |
| 				'edd-message' => 'primary-email-failed',
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	edd_redirect( $url . '#edd_general_emails' );
 | |
| }
 | |
| add_action( 'edd_customer-primary-email', 'edd_set_customer_primary_email', 10 );
 | |
| 
 | |
| /**
 | |
|  * Delete a customer
 | |
|  *
 | |
|  * @since  2.3
 | |
|  * @param  array $args The $_POST array being passed
 | |
|  * @return int         Whether it was a successful deletion
 | |
|  */
 | |
| function edd_customer_delete( $args = array() ) {
 | |
| 	$customer_edit_role = edd_get_edit_customers_role();
 | |
| 
 | |
| 	if ( ! is_admin() || ! current_user_can( $customer_edit_role ) ) {
 | |
| 		wp_die( __( 'You do not have permission to delete this customer.', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	if ( empty( $args ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	$customer_id = (int)$args['customer_id'];
 | |
| 	$confirm     = ! empty( $args['edd-customer-delete-confirm'] );
 | |
| 	$remove_data = ! empty( $args['edd-customer-delete-records'] );
 | |
| 	$nonce       = $args['_wpnonce'];
 | |
| 
 | |
| 	if ( ! wp_verify_nonce( $nonce, 'delete-customer' ) ) {
 | |
| 		wp_die( __( 'Cheatin\' eh?!', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	if ( ! $confirm ) {
 | |
| 		edd_set_error( 'customer-delete-no-confirm', __( 'Please confirm you want to delete this customer', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	if ( edd_get_errors() ) {
 | |
| 		edd_redirect(
 | |
| 			edd_get_admin_url(
 | |
| 				array(
 | |
| 					'page' => 'edd-customers',
 | |
| 					'view' => 'overview',
 | |
| 					'id'   => absint( $customer_id ),
 | |
| 				)
 | |
| 			)
 | |
| 		);
 | |
| 	}
 | |
| 
 | |
| 	$customer = new EDD_Customer( $customer_id );
 | |
| 
 | |
| 	do_action( 'edd_pre_delete_customer', $customer_id, $confirm, $remove_data );
 | |
| 
 | |
| 	$success = false;
 | |
| 
 | |
| 	if ( $customer->id > 0 ) {
 | |
| 
 | |
| 		$payments_array = explode( ',', $customer->payment_ids );
 | |
| 		$success        = edd_destroy_customer( $customer->id );
 | |
| 
 | |
| 		if ( $success ) {
 | |
| 
 | |
| 			if ( $remove_data ) {
 | |
| 
 | |
| 				// Remove all payments, logs, etc
 | |
| 				foreach ( $payments_array as $payment_id ) {
 | |
| 					edd_destroy_order( $payment_id );
 | |
| 				}
 | |
| 
 | |
| 			} else {
 | |
| 
 | |
| 				// Just set the payments to customer_id of 0
 | |
| 				foreach ( $payments_array as $payment_id ) {
 | |
| 					edd_update_payment_meta( $payment_id, '_edd_payment_customer_id', 0 );
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			$redirect = edd_get_admin_url( array( 'page' => 'edd-customers', 'edd-message' => 'customer-deleted' ) );
 | |
| 
 | |
| 		} else {
 | |
| 			edd_set_error( 'edd-customer-delete-failed', __( 'Error deleting customer', 'easy-digital-downloads' ) );
 | |
| 			$redirect = edd_get_admin_url( array( 'page' => 'edd-customers', 'view' => 'delete', 'id' => absint( $customer_id ) ) );
 | |
| 		}
 | |
| 
 | |
| 	} else {
 | |
| 		edd_set_error( 'edd-customer-delete-invalid-id', __( 'Invalid Customer ID', 'easy-digital-downloads' ) );
 | |
| 		$redirect = edd_get_admin_url( array( 'page' => 'edd-customers' ) );
 | |
| 	}
 | |
| 
 | |
| 	edd_redirect( $redirect );
 | |
| }
 | |
| add_action( 'edd_delete-customer', 'edd_customer_delete', 10, 1 );
 | |
| 
 | |
| /**
 | |
|  * Disconnect a user ID from a customer
 | |
|  *
 | |
|  * @since  2.3
 | |
|  * @param  array $args Array of arguments
 | |
|  * @return bool        If the disconnect was successful
 | |
|  */
 | |
| function edd_disconnect_customer_user_id( $args = array() ) {
 | |
| 	$customer_edit_role = edd_get_edit_customers_role();
 | |
| 
 | |
| 	if ( ! is_admin() || ! current_user_can( $customer_edit_role ) ) {
 | |
| 		wp_die( __( 'You do not have permission to edit this customer.', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	if ( empty( $args ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	$customer_id   = (int)$args['customer_id'];
 | |
| 	$nonce         = $args['_wpnonce'];
 | |
| 
 | |
| 	if ( ! wp_verify_nonce( $nonce, 'edit-customer' ) ) {
 | |
| 		wp_die( __( 'Cheatin\' eh?!', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	$customer = new EDD_Customer( $customer_id );
 | |
| 	if ( empty( $customer->id ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	do_action( 'edd_pre_customer_disconnect_user_id', $customer_id, $customer->user_id );
 | |
| 
 | |
| 	$customer_args = array( 'user_id' => 0 );
 | |
| 
 | |
| 	if ( $customer->update( $customer_args ) ) {
 | |
| 
 | |
| 		$output['success'] = true;
 | |
| 
 | |
| 	} else {
 | |
| 
 | |
| 		$output['success'] = false;
 | |
| 		edd_set_error( 'edd-disconnect-user-fail', __( 'Failed to disconnect user from customer', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	do_action( 'edd_post_customer_disconnect_user_id', $customer_id );
 | |
| 
 | |
| 	if ( edd_doing_ajax() ) {
 | |
| 		wp_send_json( $output );
 | |
| 	}
 | |
| 
 | |
| 	return $output;
 | |
| }
 | |
| add_action( 'edd_disconnect-userid', 'edd_disconnect_customer_user_id', 10, 1 );
 | |
| 
 | |
| /**
 | |
|  * Process manual verification of customer account by admin
 | |
|  *
 | |
|  * @since  2.4.8
 | |
|  * @return void
 | |
|  */
 | |
| function edd_process_admin_user_verification() {
 | |
| 
 | |
| 	if ( empty( $_GET['id'] ) || ! is_numeric( $_GET['id'] ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	if ( empty( $_GET['_wpnonce'] ) ) {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	$nonce = $_GET['_wpnonce'];
 | |
| 	if ( ! wp_verify_nonce( $nonce, 'edd-verify-user' ) ) {
 | |
| 		wp_die( __( 'Nonce verification failed', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
 | |
| 	}
 | |
| 
 | |
| 	$customer = new EDD_Customer( $_GET['id'] );
 | |
| 	edd_set_user_to_verified( $customer->user_id );
 | |
| 
 | |
| 	$url = edd_get_admin_url(
 | |
| 		array(
 | |
| 			'page'        => 'edd-customers',
 | |
| 			'view'        => 'overview',
 | |
| 			'id'          => absint( $customer->id ),
 | |
| 			'edd-message' => 'user-verified',
 | |
| 		)
 | |
| 	);
 | |
| 
 | |
| 	edd_redirect( $url );
 | |
| }
 | |
| add_action( 'edd_verify_user_admin', 'edd_process_admin_user_verification' );
 | |
| 
 | |
| /**
 | |
|  * Register the reset single customer stats batch processor
 | |
|  * @since  2.5
 | |
|  */
 | |
| function edd_register_batch_single_customer_recount_tool() {
 | |
| 	add_action( 'edd_batch_export_class_include', 'edd_include_single_customer_recount_tool_batch_processer', 10, 1 );
 | |
| }
 | |
| add_action( 'edd_register_batch_exporter', 'edd_register_batch_single_customer_recount_tool', 10 );
 | |
| 
 | |
| /**
 | |
|  * Loads the tools batch processing class for recounting stats for a single customer
 | |
|  *
 | |
|  * @since  2.5
 | |
|  * @param  string $class The class being requested to run for the batch export
 | |
|  * @return void
 | |
|  */
 | |
| function edd_include_single_customer_recount_tool_batch_processer( $class ) {
 | |
| 	if ( 'EDD_Tools_Recount_Single_Customer_Stats' === $class ) {
 | |
| 		require_once EDD_PLUGIN_DIR . 'includes/admin/tools/class-edd-tools-recount-single-customer-stats.php';
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Removes a customer address
 | |
|  *
 | |
|  * @since  3.0
 | |
|  * @return void
 | |
|  */
 | |
| function edd_remove_customer_address() {
 | |
| 	if ( ! is_admin() || ! current_user_can( edd_get_edit_customers_role() ) ) {
 | |
| 		wp_die( __( 'You do not have permission to perform this action.', 'easy-digital-downloads' ) );
 | |
| 	}
 | |
| 
 | |
| 	if ( empty( $_GET['id'] ) || ! is_numeric( $_GET['id'] ) || empty( $_GET['_wpnonce'] ) ) {
 | |
| 		return;
 | |
| 	}
 | |
| 
 | |
| 	if ( ! wp_verify_nonce( $_GET['_wpnonce'], 'edd-remove-customer-address' ) ) {
 | |
| 		wp_die( __( 'Nonce verification failed', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
 | |
| 	}
 | |
| 
 | |
| 	$address = edd_fetch_customer_address( absint( $_GET['id'] ) );
 | |
| 	$removed = $address instanceof EDD\Customers\Customer_Address ? edd_delete_customer_address( absint( $_GET['id'] ) ) : false;
 | |
| 
 | |
| 	$url = edd_get_admin_url( array(
 | |
| 		'page'        => 'edd-customers',
 | |
| 		'view'        => 'overview',
 | |
| 		'id'          => urlencode( $address->customer_id ),
 | |
| 		'edd-message' => 'address-removed'
 | |
| 	) );
 | |
| 
 | |
| 	if ( $removed ) {
 | |
| 		$url = add_query_arg( 'edd-message', 'address-removed', $url );
 | |
| 	} else {
 | |
| 		$url = add_query_arg( 'edd-message', 'address-remove-failed', $url );
 | |
| 	}
 | |
| 
 | |
| 	edd_redirect( $url . '#edd_general_addresses' );
 | |
| }
 | |
| add_action( 'edd_customer-remove-address', 'edd_remove_customer_address', 10 );
 |