/**
 * Remove the admin menus and disable profile access for non-verified users
 *
 * @since  2.4.4
 * @return void
 */
function edd_maybe_remove_menu_profile_links()
{
    if (current_user_can('manage_shop_settings')) {
        return;
    }
    if (edd_user_pending_verification()) {
        if (defined('IS_PROFILE_PAGE') && true === IS_PROFILE_PAGE) {
            $url = esc_url(edd_get_user_verification_request_url());
            $message = sprintf(__('Your account is pending verification. Please click the link in your email to activate your account. No email? <a href="%s">Click here</a> to send a new activation code.', 'edd'), $url);
            $title = __('Account Pending Verification', 'edd');
            $args = array('response' => 403);
            wp_die($message, $title, $args);
        }
        remove_menu_page('profile.php');
        remove_submenu_page('users.php', 'profile.php');
    }
}
/**
 * Process Profile Updater Form
 *
 * Processes the profile updater form by updating the necessary fields
 *
 * @since 1.4
 * @author Sunny Ratilal
 * @param array $data Data sent from the profile editor
 * @return void
 */
function edd_process_profile_editor_updates($data)
{
    // Profile field change request
    if (empty($_POST['edd_profile_editor_submit']) && !is_user_logged_in()) {
        return false;
    }
    // Pending users can't edit their profile
    if (edd_user_pending_verification()) {
        return false;
    }
    // Nonce security
    if (!wp_verify_nonce($data['edd_profile_editor_nonce'], 'edd-profile-editor-nonce')) {
        return false;
    }
    $user_id = get_current_user_id();
    $old_user_data = get_userdata($user_id);
    $display_name = isset($data['edd_display_name']) ? sanitize_text_field($data['edd_display_name']) : $old_user_data->display_name;
    $first_name = isset($data['edd_first_name']) ? sanitize_text_field($data['edd_first_name']) : $old_user_data->first_name;
    $last_name = isset($data['edd_last_name']) ? sanitize_text_field($data['edd_last_name']) : $old_user_data->last_name;
    $email = isset($data['edd_email']) ? sanitize_email($data['edd_email']) : $old_user_data->user_email;
    $line1 = isset($data['edd_address_line1']) ? sanitize_text_field($data['edd_address_line1']) : '';
    $line2 = isset($data['edd_address_line2']) ? sanitize_text_field($data['edd_address_line2']) : '';
    $city = isset($data['edd_address_city']) ? sanitize_text_field($data['edd_address_city']) : '';
    $state = isset($data['edd_address_state']) ? sanitize_text_field($data['edd_address_state']) : '';
    $zip = isset($data['edd_address_zip']) ? sanitize_text_field($data['edd_address_zip']) : '';
    $country = isset($data['edd_address_country']) ? sanitize_text_field($data['edd_address_country']) : '';
    $userdata = array('ID' => $user_id, 'first_name' => $first_name, 'last_name' => $last_name, 'display_name' => $display_name, 'user_email' => $email);
    $address = array('line1' => $line1, 'line2' => $line2, 'city' => $city, 'state' => $state, 'zip' => $zip, 'country' => $country);
    do_action('edd_pre_update_user_profile', $user_id, $userdata);
    // New password
    if (!empty($data['edd_new_user_pass1'])) {
        if ($data['edd_new_user_pass1'] !== $data['edd_new_user_pass2']) {
            edd_set_error('password_mismatch', __('The passwords you entered do not match. Please try again.', 'easy-digital-downloads'));
        } else {
            $userdata['user_pass'] = $data['edd_new_user_pass1'];
        }
    }
    // Make sure the new email doesn't belong to another user
    if ($email != $old_user_data->user_email) {
        // Make sure the new email is valid
        if (!is_email($email)) {
            edd_set_error('email_invalid', __('The email you entered is invalid. Please enter a valid email.', 'easy-digital-downloads'));
        }
        // Make sure the new email doesn't belong to another user
        if (email_exists($email)) {
            edd_set_error('email_exists', __('The email you entered belongs to another user. Please use another.', 'easy-digital-downloads'));
        }
    }
    // Check for errors
    $errors = edd_get_errors();
    if ($errors) {
        // Send back to the profile editor if there are errors
        wp_redirect($data['edd_redirect']);
        edd_die();
    }
    // Update the user
    $meta = update_user_meta($user_id, '_edd_user_address', $address);
    $updated = wp_update_user($userdata);
    if ($updated) {
        do_action('edd_user_profile_updated', $user_id, $userdata);
        wp_redirect(add_query_arg('updated', 'true', $data['edd_redirect']));
        edd_die();
    }
}
/**
 * Display a notice on customer account if they are pending verification
 *
 * @since  2.4.8
 * @return void
 */
function edd_verify_customer_notice($customer)
{
    if (!edd_user_pending_verification($customer->user_id)) {
        return;
    }
    $url = wp_nonce_url(admin_url('edit.php?post_type=download&page=edd-customers&view=overview&edd_action=verify_user_admin&id=' . $customer->id), 'edd-verify-user');
    echo '<div class="update error"><p>';
    _e('This customer\'s user account is pending verification.', 'easy-digital-downloads');
    echo ' ';
    echo '<a href="' . $url . '" title="' . esc_attr(__('Verify this customer\'s account', 'easy-digital-downloads')) . '">' . __('Verify account.', 'easy-digital-downloads') . '</a>';
    echo "\n\n";
    echo '</p></div>';
}
 public function column_name($item)
 {
     $name = '#' . $item['id'] . ' ';
     $name .= !empty($item['name']) ? $item['name'] : '<em>' . __('Unnamed Customer', 'easy-digital-downloads') . '</em>';
     $user = !empty($item['user_id']) ? $item['user_id'] : $item['email'];
     $view_url = admin_url('edit.php?post_type=download&page=edd-customers&view=overview&id=' . $item['id']);
     $actions = array('view' => '<a href="' . $view_url . '">' . __('View', 'easy-digital-downloads') . '</a>', 'logs' => '<a href="' . admin_url('edit.php?post_type=download&page=edd-reports&tab=logs&user='******'">' . __('Download log', 'easy-digital-downloads') . '</a>', 'delete' => '<a href="' . admin_url('edit.php?post_type=download&page=edd-customers&view=delete&id=' . $item['id']) . '">' . __('Delete', 'easy-digital-downloads') . '</a>');
     $customer = new EDD_Customer($item['id']);
     $pending = edd_user_pending_verification($customer->user_id) ? ' <em>' . __('(Pending Verification)', 'easy-digital-downloads') . '</em>' : '';
     return '<a href="' . esc_url($view_url) . '">' . $name . '</a>' . $pending . $this->row_actions($actions);
 }
 /**
  * Download History Shortcode
  *
  * Displays a user's download history.
  *
  * @since 1.0
  * @return string
  */
 function wbcom_edd_download_history()
 {
     if (is_user_logged_in()) {
         ob_start();
         if (!edd_user_pending_verification()) {
             include plugin_dir_path(__FILE__) . 'includes/edd-history_downloads.php';
         } else {
             edd_get_template_part('account', 'pending');
         }
         return ob_get_clean();
     }
 }
/**
 * Processes an account verification email request
 *
 * @since  2.4.4
 *
 * @return void
 */
function edd_process_user_verification_request()
{
    if (!wp_verify_nonce($_GET['_wpnonce'], 'edd-request-verification')) {
        wp_die(__('Nonce verification failed.', 'easy-digital-downloads'), __('Error', 'easy-digital-downloads'), array('response' => 403));
    }
    if (!is_user_logged_in()) {
        wp_die(__('You must be logged in to verify your account.', 'easy-digital-downloads'), __('Notice', 'easy-digital-downloads'), array('response' => 403));
    }
    if (!edd_user_pending_verification(get_current_user_id())) {
        wp_die(__('Your account has already been verified.', 'easy-digital-downloads'), __('Notice', 'easy-digital-downloads'), array('response' => 403));
    }
    edd_send_user_verification_email(get_current_user_id());
    $redirect = apply_filters('edd_user_account_verification_request_redirect', add_query_arg('edd-verify-request', '1', edd_get_user_verification_page()));
    wp_safe_redirect($redirect);
    exit;
}
/**
 * Process the 'remove' URL on the profile editor when customers wish to remove an email address
 *
 * @since  2.6
 * @return void
 */
function edd_process_profile_editor_remove_email()
{
    if (!is_user_logged_in()) {
        return false;
    }
    // Pending users can't edit their profile
    if (edd_user_pending_verification()) {
        return false;
    }
    // Nonce security
    if (!wp_verify_nonce($_GET['_wpnonce'], 'edd-remove-customer-email')) {
        return false;
    }
    if (empty($_GET['email']) || !is_email($_GET['email'])) {
        return false;
    }
    $customer = new EDD_Customer(get_current_user_id(), true);
    if ($customer->remove_email($_GET['email'])) {
        $url = add_query_arg('updated', true, $_GET['redirect']);
        $user = wp_get_current_user();
        $user_login = !empty($user->user_login) ? $user->user_login : '******';
        $customer_note = __(sprintf('Email address %s removed by %s', $_GET['email'], $user_login), 'easy-digital-downloads');
        $customer->add_note($customer_note);
    } else {
        edd_set_error('profile-remove-email-failure', __('Error removing email address from profile. Please try again later.', 'easy-digital-downloads'));
        $url = $_GET['redirect'];
    }
    wp_safe_redirect($url);
    exit;
}