0, 'from_name' => '', 'from_email' => '', 'footer' => '' ); foreach ( self::templates() as $key => $t ) { $d['emails'][ $key ] = array( 'enabled' => 1, 'subject' => $t['subject'], 'body' => $t['body'] ); } return $d; } ); } /** Registry of templates. Modules add via filter frontglut_email_templates. */ public static function templates() { return apply_filters( 'frontglut_email_templates', array( 'welcome' => array( 'label' => __( 'Welcome (new user)', 'frontglut' ), 'subject' => 'Welcome to {site_name}', 'body' => "Hi {name},\n\nYour account on {site_name} is ready. You can log in here: {login_url}", 'vars' => 'name, username, login_url' ), 'verify_email' => array( 'label' => __( 'Email verification', 'frontglut' ), 'subject' => 'Confirm your email for {site_name}', 'body' => "Hi {name},\n\nPlease confirm your email address: {verify_url}", 'vars' => 'name, verify_url' ), 'account_approved' => array( 'label' => __( 'Account approved', 'frontglut' ), 'subject' => 'Your account was approved', 'body' => "Hi {name},\n\nAn administrator approved your account. Log in: {login_url}", 'vars' => 'name, login_url' ), 'admin_new_user' => array( 'label' => __( 'Admin: new registration', 'frontglut' ), 'subject' => 'New registration: {username}', 'body' => "A new user registered on {site_name}.\n\nUsername: {username}\nEmail: {email}\nReview: {review_url}", 'vars' => 'username, email, review_url' ), 'admin_new_post' => array( 'label' => __( 'Admin: new submission', 'frontglut' ), 'subject' => 'New submission: {post_title}', 'body' => "A new submission is waiting on {site_name}.\n\nTitle: {post_title}\nBy: {author}\nStatus: {status}\nReview: {review_url}", 'vars' => 'post_title, author, status, review_url' ), 'post_received' => array( 'label' => __( 'Submitter: submission received', 'frontglut' ), 'subject' => 'We received "{post_title}"', 'body' => "Hi {author},\n\nThanks! Your submission \"{post_title}\" was received and is {status}.", 'vars' => 'post_title, author, status' ), 'post_approved' => array( 'label' => __( 'Submitter: approved', 'frontglut' ), 'subject' => '"{post_title}" is live', 'body' => "Hi {author},\n\nYour submission \"{post_title}\" was approved: {post_url}", 'vars' => 'post_title, author, post_url' ), 'post_rejected' => array( 'label' => __( 'Submitter: rejected', 'frontglut' ), 'subject' => '"{post_title}" needs changes', 'body' => "Hi {author},\n\nYour submission \"{post_title}\" was not approved.\nReason: {reason}\nEdit it here: {edit_url}", 'vars' => 'post_title, author, reason, edit_url' ), ) ); } public static function vars_defaults() { return array( 'site_name' => wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES ), 'site_url' => home_url( '/' ), 'login_url' => wp_login_url(), ); } public static function replace( $text, array $vars ) { $vars = array_merge( self::vars_defaults(), $vars ); $map = array(); foreach ( $vars as $k => $v ) { $map[ '{' . $k . '}' ] = is_scalar( $v ) ? (string) $v : ''; } return strtr( (string) $text, $map ); } /** Send a registered template. */ public static function send_template( $key, $to, array $vars = array() ) { $cfg = Settings::get( 'emails.' . $key ); if ( ! is_array( $cfg ) || empty( $cfg['enabled'] ) || ! $to ) { return false; } $subject = self::replace( $cfg['subject'], $vars ); $body = self::replace( $cfg['body'], $vars ); return self::send( $to, $subject, $body ); } /** Send (or queue) a plain-text body wrapped into an HTML layout. */ public static function send( $to, $subject, $body ) { $to = (array) $to; if ( Settings::get( 'emails.async' ) ) { wp_schedule_single_event( time() + 5, 'frontglut_send_mail', array( $to, $subject, $body ) ); return true; } return self::deliver( $to, $subject, $body ); } public static function deliver( $to, $subject, $body ) { $headers = array( 'Content-Type: text/html; charset=UTF-8' ); $fn = Settings::get( 'emails.from_name' ); $fe = Settings::get( 'emails.from_email' ); if ( $fe && is_email( $fe ) ) { $headers[] = 'From: ' . ( $fn ? wp_specialchars_decode( $fn ) : wp_specialchars_decode( get_bloginfo( 'name' ) ) ) . ' <' . $fe . '>'; } return wp_mail( $to, wp_specialchars_decode( $subject, ENT_QUOTES ), self::layout( $body ), $headers ); } public static function layout( $body ) { $html = wpautop( make_clickable( esc_html( $body ) ) ); $foot = Settings::get( 'emails.footer' ); $out = '