AnsPress_Email_Hooks()
Description #
Email addon for AnsPress
Source #
File: addons/free/email.php
class AnsPress_Email_Hooks { /** * All emails to send notification. * * @var array */ public static $emails = array(); /** * Subject of email to send. * * @var string */ public static $subject; /** * Email body. * * @var string */ public static $message; /** * Initialize the class. */ public static function init() { SELF::ap_default_options(); anspress()->add_filter( 'ap_form_addon-free_email', __CLASS__, 'register_option' ); anspress()->add_filter( 'ap_form_email_template', __CLASS__, 'register_email_template' ); anspress()->add_filter( 'ap_all_options', __CLASS__, 'ap_all_options', 10, 2 ); anspress()->add_action( 'wp_ajax_ap_email_template', __CLASS__, 'ap_email_template' ); anspress()->add_action( 'ap_ajax_form_email_template', __CLASS__, 'save_email_template_form', 11 ); anspress()->add_action( 'ap_email_default_template_new_question', __CLASS__, 'template_new_question' ); anspress()->add_action( 'ap_email_default_template_new_answer', __CLASS__, 'template_new_answer' ); anspress()->add_action( 'ap_email_default_template_select_answer', __CLASS__, 'template_select_answer' ); anspress()->add_action( 'ap_email_default_template_new_comment', __CLASS__, 'template_new_comment' ); anspress()->add_action( 'ap_email_default_template_edit_question', __CLASS__, 'template_edit_question' ); anspress()->add_action( 'ap_email_default_template_edit_answer', __CLASS__, 'template_edit_answer' ); anspress()->add_action( 'ap_email_default_template_trash_question', __CLASS__, 'template_trash_question' ); anspress()->add_action( 'ap_email_default_template_trash_answer', __CLASS__, 'template_trash_answer' ); anspress()->add_action( 'ap_email_form_allowed_tags', __CLASS__, 'form_allowed_tags' ); anspress()->add_filter( 'comment_notification_recipients', __CLASS__, 'default_recipients', 10, 2 ); anspress()->add_action( 'ap_after_new_question', __CLASS__, 'ap_after_new_question' ); anspress()->add_action( 'ap_after_new_answer', __CLASS__, 'ap_after_new_answer' ); anspress()->add_action( 'ap_select_answer', __CLASS__, 'select_answer' ); anspress()->add_action( 'ap_publish_comment', __CLASS__, 'new_comment' ); anspress()->add_action( 'ap_processed_update_question', __CLASS__, 'ap_after_update_question', 10, 2 ); anspress()->add_action( 'ap_processed_update_answer', __CLASS__, 'ap_after_update_answer', 10, 2 ); anspress()->add_action( 'ap_trash_question', __CLASS__, 'ap_trash_question', 10, 2 ); anspress()->add_action( 'ap_trash_answer', __CLASS__, 'ap_trash_answer', 10, 2 ); } /** * Return empty reccipients for default comment notifications. * * @param array $recipients Array of recipients. * @param intgere $comment_id Comment ID. * @return array */ public static function default_recipients( $recipients, $comment_id ) { $_comment = get_comment( $comment_id ); if ( 'anspress' === $_comment->comment_type ) { return []; } return $recipients; } /** * Append default options * * @since 4.0.0 */ public static function ap_default_options() { $defaults = array( 'email_admin_emails' => get_option( 'admin_email' ), 'email_admin_new_question' => true, 'email_admin_new_answer' => true, 'email_admin_new_comment' => true, 'email_admin_edit_question' => true, 'email_admin_edit_answer' => true, 'email_admin_trash_question' => true, 'email_admin_trash_answer' => true, 'email_user_new_question' => true, 'email_user_new_answer' => true, 'email_user_select_answer' => true, 'email_user_new_comment' => true, 'email_user_edit_question' => true, 'email_user_edit_answer' => true, ); $defaults['trash_answer_email_subject'] = __( 'An answer is trashed by {user}', 'anspress-question-answer' ); $defaults['trash_answer_email_body'] = __( "Hello!\nAnswer on '{question_title}' is trashed by {user}.\n", 'anspress-question-answer' ); ap_add_default_options( $defaults ); } /** * Register options */ public static function register_option() { $opt = ap_opt(); $form = array( 'fields' => array( 'sep1' => array( 'html' => '<h3>' . __( 'Admin Notifications', 'anspress-question-answer' ) . '<p>' . __( 'Select types of notification which will be sent to admin.', 'anspress-question-answer' ) . '</p></h3>', ), 'email_admin_emails' => array( 'label' => __( 'Admin email(s)', 'anspress-question-answer' ), 'desc' => __( 'Email where all admin notification will be sent. It can have multiple emails separated by comma.', 'anspress-question-answer' ), 'value' => $opt['email_admin_emails'], ), 'email_admin_new_question' => array( 'label' => __( 'New question', 'anspress-question-answer' ), 'desc' => __( 'Send new question notification to admin.', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_admin_new_question'], ), 'email_admin_new_answer' => array( 'label' => __( 'New answer', 'anspress-question-answer' ), 'desc' => __( 'Send new answer notification to admin.', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_admin_new_answer'], ), 'email_admin_new_comment' => array( 'label' => __( 'New comment', 'anspress-question-answer' ), 'desc' => __( 'Send new comment notification to admin.', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_admin_new_comment'], ), 'email_admin_edit_question' => array( 'label' => __( 'Edit question', 'anspress-question-answer' ), 'desc' => __( 'Send notification to admin when question is edited.', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_admin_edit_question'], ), 'email_admin_edit_answer' => array( 'label' => __( 'Edit answer', 'anspress-question-answer' ), 'desc' => __( 'Send email to admin when answer is edited.', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_admin_edit_answer'], ), 'email_admin_trash_question' => array( 'label' => __( 'Delete question', 'anspress-question-answer' ), 'desc' => __( 'Send email to admin when question is trashed.', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_admin_trash_question'], ), 'email_admin_trash_answer' => array( 'label' => __( 'Delete answer', 'anspress-question-answer' ), 'desc' => __( 'Send email to admin when answer is trashed.', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_admin_trash_answer'], ), 'sep2' => array( 'html' => '<h3>' . __( 'User Notifications', 'anspress-question-answer' ) . '<p>' . __( 'Select the types of notification which will be sent to user.', 'anspress-question-answer' ) . '</p></h3>', ), 'email_user_new_question' => array( 'label' => __( 'New question', 'anspress-question-answer' ), 'desc' => __( 'Send new question notification to user?', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_user_new_question'], ), 'email_user_new_answer' => array( 'label' => __( 'New answer', 'anspress-question-answer' ), 'desc' => __( 'Send new answer notification to user?', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_user_new_answer'], ), 'email_user_new_comment' => array( 'label' => __( 'New comment', 'anspress-question-answer' ), 'desc' => __( 'Send new comment notification to user?', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_user_new_comment'], ), 'email_user_edit_question' => array( 'label' => __( 'Edit question', 'anspress-question-answer' ), 'desc' => __( 'Send edit question notification to user?', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_user_edit_question'], ), 'email_user_edit_answer' => array( 'label' => __( 'Edit answer', 'anspress-question-answer' ), 'desc' => __( 'Send edit answer notification to user?', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_user_edit_answer'], ), 'email_user_select_answer' => array( 'label' => __( 'Answer selected', 'anspress-question-answer' ), 'desc' => __( 'Send notification to user when their answer get selected?', 'anspress-question-answer' ), 'type' => 'checkbox', 'value' => $opt['email_user_select_answer'], ), ), ); return $form; } /** * Register email templates form. * * @return array * @since 4.1.0 */ public static function register_email_template() { $form = array( 'fields' => array( 'subject' => array( 'label' => __( 'Email subject', 'anspress-question-answer' ), ), 'body' => array( 'label' => __( 'Email body', 'anspress-question-answer' ), 'type' => 'editor', ), 'tags' => array( 'html' => '<label class="ap-form-label" for="form_email_template-allowed_tags">' . __( 'Allowed tags', 'anspress-question-answer' ) . '</label><div class="ap-email-allowed-tags">' . apply_filters( 'ap_email_form_allowed_tags', '' ) . '</div>', ), ), ); return $form; } /** * Get admin emails to notify based on option. * * @param string $opt Option key. * @return false|array Return array of emails else false. */ public static function get_admin_emails( $opt ) { $current_user = wp_get_current_user(); if ( ap_opt( $opt ) ) { $admin_emails = explode( ',', preg_replace( '/\s+/', '', ap_opt( 'email_admin_emails' ) ) ); // Don't bother if current user is admin. if ( empty( $admin_emails ) || in_array( $current_user->user_email, $admin_emails, true ) ) { return false; } return $admin_emails; } return false; } /** * Send email to admin when new question is created. * * @param integer $question_id Question ID. * @since 1.0 * @since 4.1.0 Updated to use new Email class. */ public static function ap_after_new_question( $question_id ) { $args = []; $admin_emails = self::get_admin_emails( 'email_admin_new_question' ); if ( ! empty( $admin_emails ) ) { $args['users'] = $admin_emails; } // Return if no users. if ( empty( $args['users'] ) ) { return; } $question = ap_get_post( $question_id ); $args['tags'] = array( '{asker}' => ap_user_display_name( $question->post_author ), '{question_title}' => $question->post_title, '{question_link}' => wp_get_shortlink( $question->ID ), '{question_content}' => apply_filters( 'the_content', $question->post_content ), '{question_excerpt}' => ap_truncate_chars( strip_tags( $question->post_content ), 100 ), ); $email = new Email( 'new_question', $args ); $email->send_emails(); } /** * Send email after new answer. * * @param integer $answer_id Answer ID. * @since 4.1.0 Updated to use new email class. */ public static function ap_after_new_answer( $answer_id ) { $current_user = wp_get_current_user(); $args = array( 'users' => [], ); $admin_emails = self::get_admin_emails( 'email_admin_new_answer' ); if ( ! empty( $admin_emails ) ) { $args['users'] = $admin_emails; } $answer = ap_get_post( $answer_id ); if ( ap_opt( 'email_user_new_answer' ) && 'private_post' !== $answer->post_status && 'moderate' !== $answer->post_status ) { $subscribers = ap_get_subscribers( [ 'subs_event' => 'question', 'subs_ref_id' => $answer->post_parent ] ); foreach ( (array) $subscribers as $s ) { if ( ap_user_can_view_post( $answer ) && $s->user_email !== $current_user->user_email ) { $args['users'][] = $s->user_email; } } } $args['tags'] = array( '{answerer}' => ap_user_display_name( $answer->post_author ), '{question_title}' => get_the_title( $answer->post_parent ), '{answer_link}' => wp_get_shortlink( $answer->ID ), '{answer_content}' => $answer->post_content, '{answer_excerpt}' => ap_truncate_chars( strip_tags( $answer->post_content ), 100 ), ); $email = new Email( 'new_answer', $args ); $email->send_emails(); } /** * Notify answer author that his answer is selected as best. * * @param object $_post Selected answer object. * @since 4.1.0 Updated to use new email class. */ public static function select_answer( $_post ) { if ( get_current_user_id() === $_post->post_author || ! ap_opt( 'email_user_select_answer' ) ) { return; } $args = array( 'users' => [ get_the_author_meta( 'email', $_post->post_author ) ], ); $args['tags'] = array( '{selector}' => ap_user_display_name( get_current_user_id() ), '{question_title}' => $_post->post_title, '{answer_link}' => wp_get_shortlink( $_post->ID ), '{answer_content}' => $_post->post_content, '{answer_excerpt}' => ap_truncate_chars( strip_tags( $_post->post_content ), 100 ), ); $email = new Email( 'select_answer', $args ); $email->send_emails(); } /** * Notify admin on new comment and is not approved. * * @param object $comment Comment object. * @since 4.1.0 Updated to use new email class. */ public static function new_comment( $comment ) { $args = []; $admin_emails = self::get_admin_emails( 'email_admin_new_comment' ); if ( ! empty( $admin_emails ) ) { $args['users'] = $admin_emails; } if ( ap_opt( 'email_user_new_comment' ) ) { $current_user = wp_get_current_user(); $post = ap_get_post( $comment->comment_post_ID ); $subscribers = ap_get_subscribers( [ 'subs_event' => 'comment_' . $comment->comment_post_ID ] ); if ( $post->post_author != get_current_user_id() ) { $args['users'][] = $post->post_author; } foreach ( (array) $subscribers as $s ) { if ( ap_user_can_view_post( $post ) && $s->user_email !== $current_user->user_email ) { $args['users'][] = $s->user_email; } } } // Check if have emails before proceeding. if ( empty( $args['users'] ) ) { return; } $args['tags'] = array( '{commenter}' => ap_user_display_name( $comment->user_id ), '{question_title}' => $post->post_title, '{comment_link}' => get_comment_link( $comment ), '{comment_content}' => $comment->comment_content, ); $email = new Email( 'new_comment', $args ); $email->send_emails(); } /** * Notify after question get updated. * * @param object $question Question object. * @since 4.1.0 Updated to use new email class. */ public static function ap_after_update_question( $post_id, $question ) { if ( in_array( $question->post_status, [ 'trash', 'draft' ] ) ) { return; } $args = []; $admin_emails = self::get_admin_emails( 'email_admin_edit_question' ); if ( ! empty( $admin_emails ) ) { $args['users'] = $admin_emails; } $email = new Email( 'edit_question', $args ); $current_user = wp_get_current_user(); $subscribers = ap_get_subscribers( [ 'subs_event' => 'question', $question->ID ] ); $post_author = get_user_by( 'id', $question->post_author ); if ( $subscribers && ! ap_in_array_r( $post_author->data->user_email, $subscribers ) && $post_author->data->user_email !== $current_user->user_email ) { $email->add_email( $post_author->data->user_email ); } foreach ( (array) $subscribers as $s ) { if ( ap_user_can_view_post( $question ) && ! empty( $s->user_email ) && $s->user_email !== $current_user->user_email ) { $email->add_email( $s->user_email ); } } $email->add_template_tags( array( 'asker' => ap_user_display_name( $question->post_author ), 'editor' => ap_user_display_name( get_current_user_id() ), 'question_title' => $question->post_title, 'question_link' => get_permalink( $question->ID ), 'question_content' => $question->post_content, 'question_excerpt' => ap_truncate_chars( strip_tags( $question->post_content ), 100 ), )); $email->send_emails(); } /** * Notify users after answer gets updated. * * @param object $answer Answer object. * @param string $event Event type. */ public static function ap_after_update_answer( $answer_id, $answer ) { if ( in_array( $answer->post_status, [ 'trash', 'draft' ] ) ) { return; } $current_user = wp_get_current_user(); $args = []; $admin_emails = self::get_admin_emails( 'email_admin_edit_answer' ); if ( ! empty( $admin_emails ) ) { $args['users'] = $admin_emails; } $email = new Email( 'edit_answer', $args ); $a_subscribers = (array) ap_get_subscribers( [ 'subs_events' => 'answer_' . $answer->post_parent ] ); $q_subscribers = (array) ap_get_subscribers( [ 'subs_event' => 'question', 'subs_ref_id' => $answer->post_parent ] ); $subscribers = array_merge( $a_subscribers, $q_subscribers ); $post_author = get_user_by( 'id', $answer->post_author ); if ( ! ap_in_array_r( $post_author->data->user_email, $subscribers ) && $current_user->user_email !== $post_author->data->user_email ) { $email->add_email( $post_author->data->user_email ); } foreach ( (array) $subscribers as $s ) { if ( ap_user_can_view_post( $answer ) && ! empty( $s->user_email ) && $s->user_email !== $current_user->user_email ) { $email->add_email( $s->user_email ); } } $email->add_template_tags( array( 'answerer' => ap_user_display_name( $answer->post_author ), 'editor' => ap_user_display_name( get_current_user_id() ), 'question_title' => $answer->post_title, 'answer_link' => get_permalink( $answer->ID ), 'answer_content' => $answer->post_content, ) ); $email->send_emails(); } /** * Notify admin on trashing a question. * * @param integer $post_id Post ID. * @param object $_post Post object. */ public static function ap_trash_question( $post_id, $_post ) { if ( ! ap_opt( 'email_admin_trash_question' ) ) { return; } $args = []; $current_user = wp_get_current_user(); $admin_emails = self::get_admin_emails( 'email_admin_trash_question' ); if ( ! empty( $admin_emails ) ) { $args['users'] = $admin_emails; } $args['tags'] = array( '{user}' => ap_user_display_name( get_current_user_id() ), '{question_title}' => $_post->post_title, '{question_link}' => wp_get_shortlink( $_post->ID ), ); $email = new Email( 'trash_question', $args ); $email->send_emails(); } /** * Notify admin on trashing a answer. * * @param integer $post_id Post ID. * @param object $_post Post object. */ public static function ap_trash_answer( $post_id, $_post ) { if ( ! ap_opt( 'email_admin_trash_answer' ) ) { return; } $args = []; $current_user = wp_get_current_user(); $admin_emails = self::get_admin_emails( 'email_admin_trash_question' ); if ( ! empty( $admin_emails ) ) { $args['users'] = $admin_emails; } $args['tags'] = array( '{user}' => ap_user_display_name( get_current_user_id() ), '{question_title}' => $_post->post_title, '{question_link}' => wp_get_shortlink( $_post->post_parent ), ); $email = new Email( 'trash_question', $args ); $email->send_emails(); } /** * Add reputation events option in AnsPress options. * * @param array $all_options Options. * @return array * @since 4.1.0 */ public static function ap_all_options( $all_options ) { $all_options['emails'] = array( 'label' => __( 'Email Templates', 'anspress-question-answer' ), 'template' => 'emails.php', ); return $all_options; } /** * Save email templates. * * @return void * @since 4.1.0 */ public static function save_email_template_form() { $editing = false; $template_slug = ap_sanitize_unslash( 'template', 'r' ); $template_id = (int) ap_opt( 'email_template_' . $template_slug ); $form = anspress()->get_form( 'email_template' ); $values = $form->get_values(); // Check nonce and is valid form. if ( ! $form->is_submitted() || ! current_user_can( 'manage_options' ) ) { ap_ajax_json([ 'success' => false, 'snackbar' => [ 'message' => __( 'Trying to cheat?!', 'anspress-question-answer' ) ], ] ); } $post_args = array( 'post_title' => $values['subject']['value'], 'post_content' => $values['body']['value'], ); $_post = get_post( $template_id ); if ( $_post ) { $editing = true; $post_args['ID'] = $_post->ID; // Check if valid post type and user can edit. if ( $_post && 'anspress_email' !== $_post->post_type ) { ap_ajax_json( 'something_wrong' ); } } // Post status. $post_args['post_status'] = 'publish'; if ( $form->have_errors() ) { ap_ajax_json([ 'success' => false, 'snackbar' => [ 'message' => __( 'Unable to post answer.', 'anspress-question-answer' ) ], 'form_errors' => $form->errors, 'fields_errors' => $form->get_fields_errors(), ] ); } if ( ! $editing ) { $post_args['post_type'] = 'anspress_email'; $post_id = wp_insert_post( $post_args, true ); } else { $post_id = wp_update_post( $post_args, true ); } // If error return and send error message. if ( is_wp_error( $post_id ) ) { ap_ajax_json([ 'success' => false, 'snackbar' => array( 'message' => sprintf( // Translators: placeholder contain error message. __( 'Unable to save template. Error: %s', 'anspress-question-answer' ), $post_id->get_error_message() ), ), ] ); } ap_opt( 'email_template_' . $template_slug, $post_id ); $form->after_save( false, array( 'post_id' => $post_id, ) ); // Clear temporary images. if ( $post_id ) { ap_clear_unattached_media(); } ap_ajax_json( array( 'success' => true, 'snackbar' => [ 'message' => __( 'Post updated successfully', 'anspress-question-answer' ), ], 'post_id' => $post_id, ) ); } /** * Ajax callback for loading email template form. * * @return void * @since 4.1.0 */ public static function ap_email_template() { check_ajax_referer( 'ap_email_template', '__nonce' ); $template_slug = ap_sanitize_unslash( 'template', 'r' ); AnsPress_Email_Hooks::template_form( $template_slug ); die(); } /** * Generate email template form. * * @param string $active Currently active template. * @return void * @since 4.1.0 */ public static function template_form( $active ) { $form = anspress()->get_form( 'email_template' ); $template = get_post( ap_opt( 'email_template_' . $active ) ); if ( $template ) { $form->set_values( array( 'subject' => $template->post_title, 'body' => $template->post_content, ) ); } else { $default_template = self::get_default_template( $active ); $form->set_values( array( 'subject' => $default_template['subject'], 'body' => $default_template['body'], ) ); } $form->generate(array( 'ajax_submit' => true, 'hidden_fields' => array( [ 'name' => 'action', 'value' => 'ap_ajax' ], [ 'name' => 'ap_ajax_action', 'value' => 'form_email_template' ], [ 'name' => 'template', 'value' => $active ], ), )); } /** * Return default template for an event. * * @param string $event Event name. * @return array. */ public static function get_default_template( $event ) { $template = array( 'subject' => '', 'body' => '', ); /** * Used for registering a default email template for an event. * * @param array $template Template. * @since 4.1.0 */ return apply_filters( "ap_email_default_template_{$event}", $template ); } /** * Add default new question email template. * * @param array $template Template subject and body. * @return array * @since 4.1.0 */ public static function template_new_question( $template ) { $template['subject'] = __( '{asker} have posted a new question', 'anspress-question-answer' ); $body = ''; $body .= '<div class="ap-email-event">'; $body .= __( 'A new question is posted by', 'anspress-question-answer' ) . ' <b class="user-name">{asker}</b>'; $body .= '</div>'; $body .= '<div class="ap-email-body">'; $body .= '<h1 class="ap-email-title"><a href="{question_link}">{question_title}</a></h1>'; $body .= '<div class="ap-email-content">'; $body .= '{question_content}'; $body .= '</div>'; $body .= '</div>'; $template['body'] = $body; return $template; } /** * Add default new answer email template. * * @param array $template Template subject and body. * @return array * @since 4.1.0 */ public static function template_new_answer( $template ) { $template['subject'] = __( 'New answer posted by {answerer}', 'anspress-question-answer' ); $body = ''; $body .= '<div class="ap-email-event">'; $body .= __( 'A new answer is posted by', 'anspress-question-answer' ) . ' <b class="user-name">{answerer}</b>'; $body .= '</div>'; $body .= '<div class="ap-email-body">'; $body .= '<h1 class="ap-email-title"><a href="{answer_link}">{question_title}</a></h1>'; $body .= '<div class="ap-email-content">'; $body .= '{answer_excerpt} '; $body .= '</div>'; $body .= '</div>'; $template['body'] = $body; return $template; } /** * Add default selected answer email template. * * @param array $template Template subject and body. * @return array * @since 4.1.0 */ public static function template_select_answer( $template ) { $template['subject'] = __( 'Your answer is selected as best!', 'anspress-question-answer' ); $body = ''; $body .= '<div class="ap-email-event">'; $body .= __( 'Your answer is selected as best by ', 'anspress-question-answer' ) . ' <b class="user-name">{selector}</b>'; $body .= '</div>'; $body .= '<div class="ap-email-body">'; $body .= '<h1 class="ap-email-title"><a href="{answer_link}">{question_title}</a></h1>'; $body .= '<div class="ap-email-content">'; $body .= '{answer_content}'; $body .= '</div>'; $body .= '</div>'; $template['body'] = $body; return $template; } /** * Add default selected answer email template. * * @param array $template Template subject and body. * @return array * @since 4.1.0 */ public static function template_new_comment( $template ) { $template['subject'] = __( 'New comment by {commenter}', 'anspress-question-answer' ); $body = ''; $body .= '<div class="ap-email-event">'; $body .= __( 'A new comment posted by', 'anspress-question-answer' ) . ' <b class="user-name">{commenter}</b>'; $body .= '</div>'; $body .= '<div class="ap-email-body">'; $body .= '<h1 class="ap-email-title"><a href="{comment_link}">{question_title}</a></h1>'; $body .= '<div class="ap-email-content">'; $body .= '{comment_content}'; $body .= '</div>'; $body .= '</div>'; $template['body'] = $body; return $template; } /** * Add default edit question email template. * * @param array $template Template subject and body. * @return array * @since 4.1.0 */ public static function template_edit_question( $template ) { $template['subject'] = __( 'A question is edited by {editor}', 'anspress-question-answer' ); $body = ''; $body .= '<div class="ap-email-event">'; $body .= __( 'A question is edited by', 'anspress-question-answer' ) . ' <b class="user-name">{editor}</b>'; $body .= '</div>'; $body .= '<div class="ap-email-body">'; $body .= '<h1 class="ap-email-title"><a href="{question_link}">{question_title}</a></h1>'; $body .= '<div class="ap-email-content">'; $body .= '{question_content}'; $body .= '</div>'; $body .= '</div>'; $template['body'] = $body; return $template; } /** * Add default edit answer email template. * * @param array $template Template subject and body. * @return array * @since 4.1.0 */ public static function template_edit_answer( $template ) { $template['subject'] = __( 'A answer is edited by {editor}', 'anspress-question-answer' ); $body = ''; $body .= '<div class="ap-email-event">'; $body .= __( 'A answer is edited by', 'anspress-question-answer' ) . ' <b class="user-name">{editor}</b>'; $body .= '</div>'; $body .= '<div class="ap-email-body">'; $body .= '<h1 class="ap-email-title"><a href="{answer_link}">{question_title}</a></h1>'; $body .= '<div class="ap-email-content">'; $body .= '{answer_content}'; $body .= '</div>'; $body .= '</div>'; $template['body'] = $body; return $template; } /** * Add default trash question email template. * * @param array $template Template subject and body. * @return array * @since 4.1.0 */ public static function template_trash_question( $template ) { $template['subject'] = __( 'A question is trashed by {user}', 'anspress-question-answer' ); $body = ''; $body .= '<div class="ap-email-event">'; $body .= __( 'A question is trashed by', 'anspress-question-answer' ) . ' <b class="user-name">{user}</b>'; $body .= '</div>'; $body .= '<div class="ap-email-body">'; $body .= '<h1 class="ap-email-title"><a href="{question_link}">{question_title}</a></h1>'; $body .= '</div>'; $template['body'] = $body; return $template; } /** * Add default trash answer email template. * * @param array $template Template subject and body. * @return array * @since 4.1.0 */ public static function template_trash_answer( $template ) { $template['subject'] = __( 'An answer is trashed by {user}', 'anspress-question-answer' ); $body = ''; $body .= '<div class="ap-email-event">'; $body .= __( 'An answer is trashed by', 'anspress-question-answer' ) . ' <b class="user-name">{user}</b>'; $body .= '</div>'; $body .= '<div class="ap-email-body">'; $body .= '<h1 class="ap-email-title"><a href="{answer_link}">{question_title}</a></h1>'; $body .= '</div>'; $template['body'] = $body; return $template; } public static function form_allowed_tags() { $active = ap_isset_post_value( 'template', 'new_question' ); $tags = array( 'site_name', 'site_url', 'site_description', ); $type_tags = []; if ( in_array( $active, [ 'new_question', 'edit_question' ] ) ) { $type_tags = array( 'asker', 'question_title', 'question_link', 'question_content', 'question_excerpt', ); } elseif ( in_array( $active, [ 'new_answer', 'edit_answer' ] ) ) { $type_tags = array( 'answerer', 'question_title', 'answer_link', 'answer_content', 'answer_excerpt', ); } elseif ( 'select_answer' === $active ) { $type_tags = array( 'selector', 'question_title', 'answer_link', 'answer_content', 'answer_excerpt', ); } elseif ( 'new_comment' === $active ) { $type_tags = array( 'commenter', 'question_title', 'comment_link', 'comment_content', ); } $tags = array_merge( $tags, $type_tags ); $html = ''; foreach ( $tags as $tag ) { $html .= '<pre>{' . esc_html( $tag ) . '}</pre>'; } return $html; } }
Expand full source code Collapse full source code View on GitHub: addons/free/email.php:35
Add your comment