# userswp/1.0.21/includes/class-emails.php

UsersWP – Front-end login form, User Registration, User Profile &amp; Members Directory plugin for WP, version 1.0.21. 411 lines.

- Page: https://pluginprobe.com/plugins/userswp/1.0.21/code/includes/class-emails.php
- Raw: https://pluginprobe.com/plugins/userswp/1.0.21/raw/includes/class-emails.php
- Modified: 2018-12-21T12:06:42+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/userswp/1.0.21/code/includes/class-emails.php#L10-L20`.

```php
<?php
/**
 * Mails related functions
 *
 * All UsersWP related mails are sent via this class.
 *
 * @since      1.0.0
 * @author     GeoDirectory Team <info@wpgeodirectory.com>
 */
class UsersWP_Mails {

    /**
     * All UsersWP user mails happen via this method.
     *
     * @since       1.0.0
     * @package     userswp
     * @param       string      $message_type       Message type.
     * @param       int         $user_id            User ID.
     * @return      bool                            True when success. False when error.
     */
    public function send( $message_type, $user_id)
    {
        $user_data = get_userdata($user_id);
        
        $extras = apply_filters('uwp_send_mail_extras', "", $message_type, $user_id);
        $subject = $this->uwp_get_mail_subject($message_type);
        $message = $this->uwp_get_mail_content($message_type);

        $contains_login_details_tag = false;
        if (strpos($message, '[#login_details#]') !== false) {
            $contains_login_details_tag = true;
        }
        
        if (!empty($subject)) {
            $subject = __(stripslashes_deep($subject), 'userswp');
        }

        if (!empty($message)) {
            $message = __(stripslashes_deep($message), 'userswp');
        }

        $user_email = $user_data->user_email;

        $message_search_array = array(
            '[#login_details#]',
        );
        $message_replace_array = array(
            $extras
        );
        $message = str_replace($message_search_array, $message_replace_array, $message);

        $message = $this->uwp_email_format_text($message, $user_id);

        // Applicable only for activate mails
        if ($message_type == 'activate' && !$contains_login_details_tag) {
            $user_data = get_userdata($user_id);
            global $wpdb;
            $key = wp_generate_password( 20, false );
            do_action( 'uwp_activation_key', $user_data->user_login, $key );

            global $wp_hasher;
            if ( empty( $wp_hasher ) ) {
                require_once ABSPATH . 'wp-includes/class-phpass.php';
                $wp_hasher = new PasswordHash( 8, true );
            }
            $hashed = $wp_hasher->HashPassword( $key );
            $wpdb->update( $wpdb->users, array( 'user_activation_key' => time().":".$hashed ), array( 'user_login' => $user_data->user_login ) );
            update_user_meta( $user_id, 'uwp_mod', 'email_unconfirmed' );

            $activation_link = add_query_arg(
                array(
                    'uwp_activate' => 'yes',
                    'key' => $key,
                    'login' => $user_data->user_login
                ),
                site_url()
            );
            
            $activate_message_search_array = array(
                '[#activation_link#]',
            );
            $activate_message_replace_array = array(
                $activation_link
            );
            $message = str_replace($activate_message_search_array, $activate_message_replace_array, $message);
        }

        // Applicable only for forgot mails
        if ($message_type == 'forgot' && !$contains_login_details_tag) {

            $new_pass = "";
            $reset_link = "";

            global $wpdb, $wp_hasher;

            $allow = apply_filters('allow_password_reset', true, $user_data->ID);
            if ( ! $allow )
                return false;
            else if ( is_wp_error($allow) )
                return false;

            $as_password = apply_filters('uwp_forgot_message_as_password', false);

            if ($as_password) {
                $new_pass = wp_generate_password(12, false);
                wp_set_password($new_pass, $user_data->ID);
                if(!uwp_get_option('change_disable_password_nag')) {
                    update_user_meta($user_data->ID, 'default_password_nag', true); //Set up the Password change nag.
                }

            } else {
                $key = wp_generate_password(20, false);
                do_action('retrieve_password_key', $user_data->user_login, $key);

                if (empty($wp_hasher)) {
                    require_once ABSPATH . 'wp-includes/class-phpass.php';
                    $wp_hasher = new PasswordHash(8, true);
                }
                $hashed = $wp_hasher->HashPassword($key);
                $wpdb->update($wpdb->users, array('user_activation_key' => time() . ":" . $hashed), array('user_login' => $user_data->user_login));
                $reset_page = uwp_get_page_id('reset_page', false);
                if ($reset_page) {
                    $reset_link = add_query_arg(array(
                        'key' => $key,
                        'login' => rawurlencode($user_data->user_login),
                    ), get_permalink($reset_page));
                } else {
                    $reset_link = site_url("reset?key=$key&login=" . rawurlencode($user_data->user_login), 'login');
                }
            }

            $reset_message_search_array = array(
                '[#new_password#]',
                '[#reset_link#]',
            );
            $reset_message_replace_array = array(
                $new_pass,
                $reset_link
            );
            $message = str_replace($reset_message_search_array, $reset_message_replace_array, $message);
        }

        $subject = $this->uwp_email_format_text($subject, $user_id);

        $headers = $this->uwp_get_mail_headers($message_type, $user_id);

        $to = apply_filters('uwp_send_email_to', $user_email, $message_type, $user_id);

        $subject = apply_filters('uwp_send_email_subject', $subject, $message_type, $user_id);

        $message = apply_filters('uwp_send_email_message', $message, $message_type, $user_id);

        $headers = apply_filters('uwp_send_email_headers', $headers, $message_type, $user_id);

        $sent = wp_mail($to, $subject, $message, $headers);


        if (!$sent) {
            if (is_array($to)) {
                $to = implode(',', $to);
            }
            $err = $this->get_mail_errors();
            $log_message = sprintf(
                __("Email from UsersWP failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\nError: %s\n\n", 'userswp'),
                $message_type,
                date_i18n('F j Y H:i:s', current_time('timestamp')),
                $to,
                $subject,
                $err
            );
            uwp_error_log($log_message);
            return false;
        } else {
            return true;
        }
    }

    /**
     * All UsersWP admin mails happen via this method.
     *
     * @since       1.0.0
     * @package     userswp
     * @param       string      $message_type       Message type.
     * @param       int         $user_id            User ID. Not admin user ID.
     * @return      bool                            True when success. False when error.
     */
    public function send_admin_email( $message_type, $user_id)
    {

        $extras = apply_filters('uwp_send_admin_mail_extras', "", $message_type, $user_id);
        $subject = $this->uwp_get_mail_subject($message_type, true);
        $message = $this->uwp_get_mail_content($message_type, true);

        if (!empty($subject)) {
            $subject = __(stripslashes_deep($subject), 'userswp');
        }

        if (!empty($message)) {
            $message = __(stripslashes_deep($message), 'userswp');
        }

        $site_email = get_option('admin_email');

        $search_array = array(
            '[#extras#]',
        );
        $replace_array = array(
            $extras
        );
        $message = str_replace($search_array, $replace_array, $message);

        $message = $this->uwp_email_format_text($message, $user_id);

        $subject = $this->uwp_email_format_text($subject, $user_id);

        $headers = $this->uwp_get_mail_headers($message_type, $user_id);

        $to = apply_filters('uwp_send_admin_email_to', $site_email, $message_type, $user_id);

        $subject = apply_filters('uwp_send_admin_email_subject', $subject, $message_type, $user_id);

        $message = apply_filters('uwp_send_admin_email_message', $message, $message_type, $user_id);

        $headers = apply_filters('uwp_send_admin_email_headers', $headers, $message_type, $user_id);

        $sent = wp_mail($to, $subject, $message, $headers);

        if (!$sent) {
            if (is_array($to)) {
                $to = implode(',', $to);
            }
            $err = $this->get_mail_errors();
            $log_message = sprintf(
                __("Email from UsersWP failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\nError: %s\n\n", 'userswp'),
                $message_type,
                date_i18n('F j Y H:i:s', current_time('timestamp')),
                $to,
                $subject,
                $err
            );
            uwp_error_log($log_message);
            return false;
        } else {
            return true;
        }
    }


    /**
     * Gets the original error message from phpmailer.
     *
     * @since       1.0.7
     * @package     userswp
     * @return      string                            Error messages.
     */
    public function get_mail_errors() {
        // wp mail debugging
        global $ts_mail_errors;
        global $phpmailer;

        if (!isset($ts_mail_errors)) $ts_mail_errors = array();

        if (isset($phpmailer)) {
            $ts_mail_errors[] = $phpmailer->ErrorInfo;
        }

        $out = json_encode($ts_mail_errors);

        return $out;
    }

    public static function uwp_email_format_text( $content, $user_id ) {

        $site_url = '<a href="' . home_url() . '">' . home_url() . '</a>';
        $site_name = stripslashes(get_option('blogname'));
        $login_url = '<a href="' . wp_login_url() . '">'.__('login', 'userswp').'</a>';

        $replace_array = array(
            '[#site_name_url#]' => $site_url,
            '[#site_name#]'     => $site_name,
            '[#from_name#]'     => $site_name,
            '[#login_url#]'     => $login_url,
            '[#from_email#]'    => get_option('admin_email'),
            '[#current_date#]'  => date_i18n('Y-m-d H:i:s', current_time('timestamp')),
        );

        if ( !empty( $user_id ) && $user_id > 0 ) {
            $user_data = get_userdata($user_id);
            $profile_link = apply_filters('uwp_profile_link', get_author_posts_url($user_id), $user_id);
            $replace_array = array_merge(
                $replace_array,
                array(
                    '[#to_name#]'         => $user_data->display_name,
                    '[#user_login#]'      => $user_data->user_login,
                    '[#user_name#]'       => $user_data->display_name,
                    '[#username#]'        => $user_data->user_login,
                    '[#profile_link#]'    => $profile_link,
                )
            );
        }

        $replace_array = apply_filters( 'uwp_email_format_text', $replace_array, $content, $user_id );

        foreach ( $replace_array as $key => $value ) {
            $content = str_replace( $key, $value, $content );
        }

        return apply_filters( 'uwp_email_content_replace', $content );
    }

    /**
     * Modifies the mail subject based on the admin notification type.
     *
     * @since   1.0.0
     * @package    userswp
     * @subpackage userswp/includes
     * @param string $type Notification type.
     * @param bool $is_admin Admin notification.
     * @return string Modified mail subject.
     */
    public function uwp_get_mail_subject($type, $is_admin = false) {
        $subject = '';
        switch ($type) {
            case "register":
                $subject = uwp_get_option('registration_success_email_subject', '');
                break;
            case "activate":
                $subject = uwp_get_option('registration_activate_email_subject', '');
                break;
            case "forgot":
                $subject = uwp_get_option('forgot_password_email_subject', '');
                break;
            case "reset":
                $subject = uwp_get_option('reset_password_email_subject', '');
                break;
            case "change":
                $subject = uwp_get_option('change_password_email_subject', '');
                break;
            case "account":
                $subject = uwp_get_option('account_update_email_subject', '');
                break;
            case "register_admin":
                $subject = uwp_get_option('registration_success_email_subject_admin', '');
                break;
        }

        if($is_admin){
            return apply_filters('uwp_send_admin_mail_subject', $subject, $type);
        }

        return apply_filters('uwp_send_mail_subject', $subject, $type);
    }

    /**
     * Modifies the mail content based on the admin notification type.
     *
     * @since   1.0.0
     * @package    userswp
     * @subpackage userswp/includes
     * @param string $content Unmodified mail content.
     * @param bool $is_admin Admin notification.
     * @param string $type Notification type.
     * @return string Modified mail content.
     */
    public function uwp_get_mail_content($type, $is_admin = false) {
        $content = '';
        switch ($type) {
            case "register":
                $content = uwp_get_option('registration_success_email_content', '');
                break;
            case "activate":
                $content = uwp_get_option('registration_activate_email_content', '');
                break;
            case "forgot":
                $content = uwp_get_option('forgot_password_email_content', '');
                break;
            case "reset":
                $content = uwp_get_option('reset_password_email_content', '');
                break;
            case "change":
                $content = uwp_get_option('change_password_email_content', '');
                break;
            case "account":
                $content = uwp_get_option('account_update_email_content', '');
                break;
            case "register_admin":
                $content = uwp_get_option('registration_success_email_content_admin', '');
                break;
        }

        if($is_admin){
            return apply_filters('uwp_send_admin_mail_message', $content, $type);
        }

        return apply_filters('uwp_send_mail_message', $content, $type);
    }

    public static function uwp_get_mail_headers( $email_type = '', $user_id ) {
        $sitefromEmail = get_option('admin_email');
        $sitefromEmailName = stripslashes(get_option('blogname'));
        $site_email = get_option('admin_email');

        $headers = array();
        $headers[] = 'Content-type: text/html; charset=UTF-8';
        $headers[] = "Reply-To: " . $site_email;
        $headers[] = 'From: ' . $sitefromEmailName . ' <' . $sitefromEmail . '>';

        return apply_filters( 'uwp_email_headers', $headers, $email_type, $user_id );
    }

}
```
