Created
April 29, 2022 19:04
-
-
Save ibrahim-kardi/60a217b1b25a50db23ca176631f34be4 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| /** | |
| * Class Email Notification | |
| * | |
| * @package TUTOR | |
| * | |
| * @since v.1.0.0 | |
| */ | |
| namespace TUTOR_EMAIL; | |
| if ( ! defined( 'ABSPATH' ) ) { | |
| exit; | |
| } | |
| class EmailNotification { | |
| private $queue_table; | |
| public $email_logo; | |
| public $email_options; | |
| public function __construct() { | |
| global $wpdb; | |
| $this->queue_table = $wpdb->tutor_email_queue; | |
| add_action( 'tutor_quiz/attempt_ended', array( $this, 'quiz_finished_send_email_to_student' ), 10, 1 ); | |
| add_action( 'tutor_finish_quiz_attempt', array( $this, 'quiz_finished_send_email_to_student' ), 10, 1 ); | |
| add_action( 'tutor_quiz/attempt_ended', array( $this, 'quiz_finished_send_email_to_instructor' ), 10, 1 ); | |
| add_action( 'tutor_finish_quiz_attempt', array( $this, 'quiz_finished_send_email_to_instructor' ), 10, 1 ); | |
| add_action( 'tutor_course_complete_after', array( $this, 'course_complete_email_to_student' ), 10, 1 ); | |
| add_action( 'tutor_course_complete_after', array( $this, 'course_complete_email_to_teacher' ), 10, 1 ); | |
| // add_action('tutor/course/enrol_status_change/after', array($this, 'course_enroll_email'), 10, 2); | |
| add_action( 'tutor_after_enrolled', array( $this, 'course_enroll_email_to_teacher' ), 10, 3 ); | |
| add_action( 'tutor_after_enrolled', array( $this, 'course_enroll_email_to_student' ), 10, 3 ); | |
| add_action( 'tutor_after_add_question', array( $this, 'tutor_after_add_question' ), 10, 2 ); | |
| add_action( 'tutor_lesson_completed_email_after', array( $this, 'tutor_lesson_completed_email_after' ), 10, 1 ); | |
| /** | |
| * @since 1.6.9 | |
| */ | |
| add_action( 'tutor_add_new_instructor_after', array( $this, 'tutor_new_instructor_signup' ), 10, 2 ); | |
| // adding hook for instructor register | |
| add_action( 'tutor_new_instructor_after', array( $this, 'tutor_new_instructor_signup' ), 10, 2 ); | |
| add_action( 'tutor_after_student_signup', array( $this, 'tutor_new_student_signup' ), 10, 2 ); | |
| add_action( 'draft_to_pending', array( $this, 'tutor_course_pending' ), 10, 3 ); | |
| add_action( 'auto-draft_to_pending', array( $this, 'tutor_course_pending' ), 10, 3 ); | |
| add_action( 'draft_to_publish', array( $this, 'tutor_course_published' ), 10, 3 ); | |
| add_action( 'auto-draft_to_publish', array( $this, 'tutor_course_published' ), 10, 3 ); | |
| add_action( 'pending_to_publish', array( $this, 'tutor_course_published' ), 10, 3 ); | |
| add_action( 'save_post_' . tutor()->course_post_type, array( $this, 'tutor_course_updated' ), 10, 3 ); | |
| add_action( 'wp_ajax_save_email_template', array( $this, 'save_email_template' ) ); | |
| add_action( 'wp_ajax_send_test_email_ajax', array( $this, 'send_test_email_ajax' ) ); | |
| add_action( 'wp_ajax_import_bulk_student', array( $this, 'import_bulk_student' ) ); | |
| // add_filter( 'tutor_localize_data', array( $this, 'email_current_template_data' ) ); | |
| /** | |
| * Send mail to instructor if their course accepted or rejected | |
| * | |
| * @since 1.9.8 | |
| */ | |
| add_action( 'save_post_' . tutor()->course_post_type, array( $this, 'tutor_course_update_notification' ), 20, 3 ); | |
| add_action( 'tutor_assignment/after/submitted', array( $this, 'tutor_assignment_after_submitted' ), 10, 3 ); | |
| add_action( 'tutor_assignment/evaluate/after', array( $this, 'tutor_after_assignment_evaluate' ), 10, 3 ); | |
| add_action( 'tutor_enrollment/after/delete', array( $this, 'tutor_student_remove_from_course' ), 10, 3 ); | |
| add_action( 'tutor_enrollment/after/cancel', array( $this, 'tutor_student_remove_from_course' ), 10, 3 ); | |
| add_action( 'tutor_enrollment/after/expired', array( $this, 'tutor_enrollment_after_expired' ), 10, 3 ); // @since 1.8.1 | |
| add_action( 'tutor_announcement_editor/after', array( $this, 'notification_checkbox_for_announcement' ) ); | |
| add_action( 'tutor_announcements/after/save', array( $this, 'tutor_announcements_notify_students' ), 10, 3 ); | |
| add_action( 'tutor_after_answer_to_question', array( $this, 'tutor_after_answer_to_question' ), 10, 3 ); | |
| add_action( 'tutor_quiz/attempt/submitted/feedback', array( $this, 'feedback_submitted_for_quiz_attempt' ), 10, 3 ); | |
| add_action( 'tutor_course_complete_after', array( $this, 'tutor_course_complete_after' ), 10, 3 ); | |
| /** | |
| * @since 1.7.4 | |
| */ | |
| add_action( 'tutor_after_approved_instructor', array( $this, 'instructor_application_approved' ), 10 ); | |
| add_action( 'tutor_after_rejected_instructor', array( $this, 'instructor_application_rejected' ), 10 ); | |
| add_action( 'tutor_after_approved_withdraw', array( $this, 'withdrawal_request_approved' ), 10 ); | |
| add_action( 'tutor_after_rejected_withdraw', array( $this, 'withdrawal_request_rejected' ), 10 ); | |
| add_action( 'tutor_insert_withdraw_after', array( $this, 'withdrawal_request_placed' ), 10 ); | |
| add_action( 'tutor-pro/content-drip/new_lesson_published', array( $this, 'new_lqa_published' ), 10 ); | |
| add_action( 'tutor-pro/content-drip/new_quiz_published', array( $this, 'new_lqa_published' ), 10 ); | |
| add_action( 'tutor-pro/content-drip/new_assignment_published', array( $this, 'new_lqa_published' ), 10 ); | |
| add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_email_scripts' ) ); | |
| /** | |
| * @since 1.8.7 | |
| * Cron register/deregister | |
| */ | |
| add_filter( 'cron_schedules', array( $this, 'tutor_cron_schedules' ) ); | |
| add_action( 'tutor_email_scheduler_cron', array( $this, 'run_scheduler' ) ); | |
| add_action( 'tutor_addon_before_disable_tutor-pro/addons/tutor-email/tutor-email.php', array( $this, 'deregister_scheduler' ) ); | |
| register_deactivation_hook( TUTOR_PRO_FILE, array( $this, 'deregister_scheduler' ) ); | |
| add_action( | |
| 'init', | |
| function() { | |
| $is_os_native = isset( $_GET['tutor_cron'] ) && $_GET['tutor_cron'] == '1'; | |
| if ( $is_os_native ) { | |
| $this->run_scheduler( true ); | |
| exit; | |
| } | |
| } | |
| ); | |
| add_action( | |
| 'tutor_option_save_after', | |
| function() { | |
| // Set schedule again based on new interval setting | |
| $this->register_scheduler( true ); | |
| } | |
| ); | |
| // Register scheduler as normal procedure | |
| $this->register_scheduler(); | |
| // assign email variables | |
| add_action( 'init', array( $this, 'save_recipient_data' ) ); | |
| $this->email_logo = esc_url( TUTOR_EMAIL()->url . 'assets/images/tutor-logo.png' ); | |
| $this->email_options = get_option( 'email_template_data' ); | |
| } | |
| public function import_bulk_student() { | |
| tutor_utils()->checking_nonce(); | |
| $data_to_import = json_decode( stripslashes( $_POST['bulk_user'] ), true ); | |
| foreach ( $data_to_import as $data_import ) { | |
| $users = array(); | |
| $data = array( | |
| 'user_login' => isset( $data_import['username'] ) ? sanitize_text_field( $data_import['username'] ) : '', | |
| 'user_email' => isset( $data_import['email'] ) ? sanitize_text_field( $data_import['email'] ) : '', | |
| 'user_pass' => isset( $data_import['username'] ) ? sanitize_text_field( $data_import['username'] ) : '', | |
| ); | |
| $user_id = wp_insert_user( $data ); | |
| if ( ! is_wp_error( $user_id ) ) { | |
| $users[] = $user_id; | |
| } | |
| } | |
| wp_send_json( $users ); | |
| } | |
| /** | |
| * Save if email template data not found. | |
| * | |
| * @return void | |
| */ | |
| public function save_recipient_data() { | |
| $option_data = get_option( 'email_template_data' ); | |
| $recipient_data = ( new EmailData() )->get_recipients(); | |
| if ( isset( $option_data ) && empty( $option_data ) ) { | |
| update_option( 'email_template_data', $recipient_data ); | |
| } | |
| } | |
| public function enqueue_email_scripts() { | |
| if ( get_request( 'tab_page' ) === 'email_notification' ) { | |
| wp_enqueue_script( 'tutor-pro-email-template', tutor_pro()->url . 'addons/tutor-email/assets/js/email_template.js', array( 'jquery' ), TUTOR_PRO_VERSION, true ); | |
| wp_enqueue_style( 'tutor-pro-email-styles', tutor_pro()->url . 'addons/tutor-email/assets/css/email-manage.css', array(), true, null ); | |
| } | |
| } | |
| public function email_current_template_data( $localize_data ) { | |
| $email_data['get_email_data'] = ( new EmailData() )->get_recipients(); | |
| return $email_data; | |
| } | |
| /** | |
| * Function to save_email_template | |
| * | |
| * @return JSON | |
| */ | |
| public function save_email_template() { | |
| tutor_utils()->checking_nonce(); | |
| $to = isset( $_POST['to'] ) ? sanitize_text_field( $_POST['to'] ) : null; | |
| $key = isset( $_POST['key'] ) ? sanitize_text_field( $_POST['key'] ) : null; | |
| $email_footer_text = isset( $_POST['email-footer-text'] ) ? sanitize_text_field( $_POST['email-footer-text'] ) : null; | |
| $email_block_heading = isset( $_POST['email-block-heading'] ) ? sanitize_text_field( $_POST['email-block-heading'] ) : null; | |
| $email_block_content = isset( $_POST['email-block-content'] ) ? sanitize_text_field( $_POST['email-block-content'] ) : null; | |
| $email_before_button = isset( $_POST['email-before-button'] ) ? sanitize_text_field( $_POST['email-before-button'] ) : null; | |
| $tutor_email_options = array(); | |
| $tutor_email_options = get_option( 'email_template_data' ); | |
| $tutor_options = get_option( 'tutor_option' ); | |
| $message = json_encode( wp_unslash( $_POST['email-additional-message'] ) ); | |
| $email_option_data = ! empty( $tutor_email_options ) ? $tutor_email_options : array(); | |
| $pattern = array( '/<p[^>]*><\\/p[^>]*>/', '/\<[\/]{0,1}div[^\>]*\>/i' ); | |
| // $message = preg_replace( $pattern, '', $message ); | |
| $tutor_options[$to][$key] = $_POST['tutor_option'][$to][$key]; | |
| $email_request[ $to ][ $key ] = array( | |
| 'subject' => sanitize_text_field( wp_unslash( $_POST['email-subject'] ) ), | |
| 'heading' => sanitize_text_field( wp_unslash( $_POST['email-heading'] ) ), | |
| 'message' => $message, | |
| 'footer_text' => sanitize_textarea_field( wp_unslash( $email_footer_text ) ), | |
| 'block_heading' => sanitize_textarea_field( $email_block_heading ), | |
| 'block_content' => sanitize_textarea_field( $email_block_content ), | |
| 'before_button' => wp_kses_post( wp_unslash( $email_before_button ) ), | |
| ); | |
| if ( ! empty( $email_option_data ) ) { | |
| foreach ( $email_option_data as $key => $email_data ) { | |
| if ( isset( $email_request[ $key ] ) ) { | |
| $email_output[ $key ] = array_merge( $email_option_data[ $key ], $email_request[ $key ] ); | |
| } else { | |
| $email_output[ $key ] = $email_option_data[ $key ]; | |
| } | |
| } | |
| $tutor_email_options = ( ! array_key_exists( $to, $email_output ) ) ? array_merge( $email_output, $email_request ) : $email_output; | |
| } else { | |
| $tutor_email_options = array_merge( $email_option_data, $email_request ); | |
| } | |
| // $tutor_email_options = array(); | |
| update_option( 'email_template_data', $tutor_email_options ); | |
| update_option( 'tutor_option', $tutor_options ); | |
| wp_send_json_success( $message ); | |
| } | |
| public function notification_checkbox_for_announcement() { | |
| $notify_checked = tutor_utils()->get_option( 'email_to_students.new_announcement_posted' ); | |
| if ( $notify_checked ) : ?> | |
| <div class="tutor-option-field-row"> | |
| <div class="tutor-form-check tutor-mb-4"> | |
| <input id="tutor_announcement-notification-email" type="checkbox" class="tutor-form-check-input tutor-form-check-20" name="tutor_notify_students" checked="checked"/> | |
| <label for="tutor_announcement-notification-email"> | |
| <?php _e( 'Send email notification to all students of this course.', 'tutor-pro' ); ?> | |
| </label> | |
| </div> | |
| </div> | |
| <?php | |
| endif; | |
| } | |
| /** | |
| * Load email template | |
| * | |
| * @return string | |
| * | |
| * @since 1.8.0 | |
| */ | |
| public function tutor_load_email_template( $template, $pro = true ) { | |
| include tutor_get_template( 'email.' . $template, $pro ); | |
| } | |
| public static function tutor_load_email_preview( $template, $pro = true ) { | |
| include tutor_get_template( 'email.' . $template, $pro ); | |
| } | |
| /** | |
| * @param $to | |
| * @param $subject | |
| * @param $message | |
| * @param $headers | |
| * @param array $attachments | |
| * | |
| * @return bool | |
| * | |
| * | |
| * Send E-Mail Notification for Tutor Event | |
| */ | |
| public function send( $to, $subject, $message, $headers, $attachments = array(), $force_enqueue = false ) { | |
| $message = apply_filters( 'tutor_mail_content', $message ); | |
| $this->enqueue_email( $to, $subject, $message, $headers, $attachments, $force_enqueue ); | |
| } | |
| /** | |
| * Get the from name for outgoing emails from tutor | |
| * | |
| * @return string | |
| */ | |
| public function get_from_name() { | |
| $email_from_name = tutor_utils()->get_option( 'email_from_name' ); | |
| $from_name = apply_filters( 'tutor_email_from_name', $email_from_name ); | |
| return wp_specialchars_decode( esc_html( $from_name ), ENT_QUOTES ); | |
| } | |
| /** | |
| * Get the from name for outgoing emails from tutor | |
| * | |
| * @return string | |
| */ | |
| public function get_from_address() { | |
| $email_from_address = tutor_utils()->get_option( 'email_from_address' ); | |
| $from_address = apply_filters( 'tutor_email_from_address', $email_from_address ); | |
| return sanitize_email( $from_address ); | |
| } | |
| /** | |
| * @return string | |
| * | |
| * Get content type | |
| */ | |
| public function get_content_type() { | |
| return apply_filters( 'tutor_email_content_type', 'text/html' ); | |
| } | |
| public function get_message( $message = '', $search = array(), $replace = array() ) { | |
| $email_footer_text = tutor_utils()->get_option( 'email_footer_text' ); | |
| $message = str_replace( $search, $replace, $message ); | |
| if ( $email_footer_text ) { | |
| $message .= '<div class="tutor-email-footer-content">' . wp_unslash( json_decode( $email_footer_text ) ) . '</div>'; | |
| } | |
| return $message; | |
| } | |
| /** | |
| * Function to replace and return | |
| * | |
| * @param mixed $message . | |
| * @param mixed $search . | |
| * @param mixed $replace . | |
| * @return void | |
| */ | |
| public function get_replaced_text( $message = '', $search = array(), $replace = array() ) { | |
| return str_replace( $search, $replace, wp_unslash( json_decode( $message ) ) ); | |
| } | |
| public function _generate_email( $string ) { | |
| $username = strtolower( str_replace( array( ' ', '_' ), '', $string ) ); | |
| return esc_attr( $username . '@' . parse_url( home_url() )['host'] ); | |
| } | |
| public function _generate_username( $string ) { | |
| return strtolower( str_replace( array( ' ', '.', '_', '-' ), '', $string ) ); | |
| } | |
| public function send_test_email_ajax() { | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $email_data = ( new EmailData() )->get_recipients(); | |
| $recipient_data = $email_data[ get_request( 'email_to' ) ][ get_request( 'email_key' ) ]; | |
| $tempData = $email_data[ get_request( 'email_to' ) ][ get_request( 'email_key' ) ]; | |
| $user_id = get_current_user_id(); | |
| $site_url = get_bloginfo( 'url' ); | |
| $current_user = get_userdata( $user_id ); | |
| $student_name = __( 'James Andy', 'tutor-pro' ); | |
| $instructor_name = __( 'John Doe', 'tutor-pro' ); | |
| $instructor_description = __( 'Full-Stack Engineer & CSM, CSD, ZCE', 'tutor-pro' ); | |
| $email_template = get_request( 'email_template' ); | |
| $testing_email = ! empty( get_request( 'testing_email' ) ) ? get_request( 'testing_email' ) : $current_user->user_email; | |
| $notice_icon = TUTOR_EMAIL()->url . 'assets/images/warning.png'; | |
| $tutor_url = 'https://www.themeum.com/product/tutor-lms'; | |
| $approved_url = sprintf( admin_url( 'admin.php?page=%s&action=%s' ), 'tutor_withdraw_requests', 'approved' ); | |
| $rejected_url = sprintf( admin_url( 'admin.php?page=%s&action=%s' ), 'tutor_withdraw_requests', 'rejected' ); | |
| $get_subject = wp_kses_post( $recipient_data['subject'] ); | |
| $course_title = __( 'Mastering WordPress-From Beginner to Advance', 'tutor-pro' ); | |
| $lesson_title = __( 'Basics of WordPress', 'tutor-pro' ); | |
| $quiz_title = __( 'What is the default post_type of WordPress?', 'tutor-pro' ); | |
| $assignment_name = __( 'Create your first WordPress site', 'tutor-pro' ); | |
| $total_amount = 100; | |
| $earned_amount = 80; | |
| $instructor_avatar = get_avatar_url( wp_get_current_user()->ID ); | |
| $lorem_date = the_time( 'l, F jS, Y' ); | |
| $lorem_title = 'Lorem ipsum dolor sit amet'; | |
| $lorem_content = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam et fermentum dui. Ut orci quam, ornare sed lorem sed, hendrerit auctor dolor. Nulla viverra, nibh quis ultrices malesuada, ligula ipsum vulputate diam, aliquam egestas nibh ante vel dui. Sed in tellus interdum eros vulputate placerat sed non enim. Pellentesque eget.'; | |
| $lorem_content_sm = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam et fermentum dui. Ut orci quam, ornare sed lorem sed, hendrerit auctor dolor?'; | |
| $replacable['{email_heading}'] = isset( $recipient_data['heading'] ) ? $recipient_data['heading'] : ''; | |
| $replacable['{email_message}'] = isset( $recipient_data['message'] ) ? $recipient_data['message'] : ''; | |
| $replacable['{footer_text}'] = isset( $recipient_data['footer_text'] ) ? $recipient_data['footer_text'] : ''; | |
| $replacable['{student_name}'] = $student_name; | |
| $replacable['{student_username}'] = $this->_generate_username( $student_name ); | |
| $replacable['{user_name}'] = $current_user->display_name; | |
| $replacable['{admin_name}'] = $current_user->display_name; | |
| $replacable['{admin_user}'] = $current_user->display_name; | |
| $replacable['{student_email}'] = $current_user->user_email; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{tutor_url}'] = $tutor_url; | |
| $replacable['{site_name}'] = get_bloginfo( 'name' ); | |
| $replacable['{course_url}'] = $site_url; | |
| $replacable['{profile_url}'] = $site_url; | |
| $replacable['{student_url}'] = get_author_posts_url( $user_id ); | |
| $replacable['{course_title}'] = $course_title; | |
| $replacable['{course_name}'] = $course_title; | |
| $replacable['{total_amount}'] = $total_amount; | |
| $replacable['{earned_amount}'] = $earned_amount; | |
| $replacable['{lesson_title}'] = $lesson_title; | |
| $replacable['{lesson_name}'] = $lesson_title; | |
| $replacable['{quiz_name}'] = $quiz_title; | |
| $replacable['{quiz_title}'] = $quiz_title; | |
| $replacable['{question}'] = $lorem_content_sm; | |
| $replacable['{enroll_time}'] = isset( $recipient_data['enroll_time'] ) ? $recipient_data['enroll_time'] : ''; | |
| $replacable['{instructor_username}'] = $instructor_name; | |
| $replacable['{instructor_avatar}'] = $instructor_avatar; | |
| $replacable['{instructor_description}'] = $instructor_description; | |
| $replacable['{logo}'] = TUTOR_EMAIL()->url . 'assets/images/tutor-logo.png'; | |
| $replacable['{answer_by}'] = $student_name; | |
| $replacable['{answer_date}'] = $lorem_date; | |
| $replacable['{before_button}'] = isset( $recipient_data['before_button'] ) ? $recipient_data['before_button'] : ''; | |
| $replacable['{username}'] = $current_user->user_nicename; | |
| $replacable['{instructor_email}'] = $this->_generate_email( $instructor_name ); | |
| $replacable['{student_email}'] = $this->_generate_email( $student_name ); | |
| $replacable['{instructor_name}'] = $instructor_name; | |
| $replacable['{block_heading}'] = isset( $recipient_data['block_heading'] ) ? $recipient_data['block_heading'] : ''; | |
| $replacable['{block_content}'] = isset( $recipient_data['block_content'] ) ? $recipient_data['block_content'] : ''; | |
| $replacable['{withdraw_amount}'] = isset( $recipient_data['withdraw_amount'] ) ? $recipient_data['withdraw_amount'] : ''; | |
| $replacable['{assignment_name}'] = $assignment_name; | |
| $replacable['{assignment_score}'] = isset( $recipient_data['assignment_score'] ) ? $recipient_data['assignment_score'] : ''; | |
| $replacable['{assignment_max_mark}'] = isset( $recipient_data['assignment_max_mark'] ) ? $recipient_data['assignment_max_mark'] : ''; | |
| $replacable['{testing_email_notice}'] = '<div class="tutor-email-warning"><img src="' . $notice_icon . '" alt="notice"><span><span class="no-res">This is a</span> test mail</span></div>'; | |
| $replacable['{approved_url}'] = $approved_url; | |
| $replacable['{rejected_url}'] = $rejected_url; | |
| $replacable['{announcement_title}'] = $lorem_title; | |
| $replacable['{announcement_content}'] = $lorem_content; | |
| $replacable['{announcement_date}'] = $lorem_date; | |
| $replacable['{author_fullname}'] = $student_name; | |
| $replacable['{assignment_comment}'] = $lorem_content; | |
| $subject = $this->get_replaced_text( $get_subject, array_keys( $replacable ), array_values( $replacable ) ); | |
| // die($get_subject); | |
| ob_start(); | |
| $this->tutor_load_email_template( $email_template ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/testing_emails', ob_get_clean() ); | |
| $message = $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ); | |
| // die($message); | |
| $this->send( $testing_email, $subject, $message, $header ); | |
| } | |
| /** | |
| * Function to send course_complete_email_to_student | |
| * | |
| * @param int $course_id is related to course . | |
| * @return string | |
| */ | |
| public function course_complete_email_to_student( $course_id ) { | |
| $course_completed_to_student = tutor_utils()->get_option( 'email_to_students.completed_course' ); | |
| if ( ! $course_completed_to_student ) { | |
| return; | |
| } | |
| $user_id = get_current_user_id(); | |
| $course = get_post( $course_id ); | |
| $student = get_userdata( $user_id ); | |
| $teacher = get_userdata( $course->post_author ); | |
| $instructor_avatar = get_avatar_url( wp_get_current_user()->ID ); | |
| $instructor_email = $teacher->user_email; | |
| $instructor_description = $teacher->user_description; | |
| $completion_time = tutor_utils()->is_completed_course( $course_id ); | |
| $completion_time = $completion_time ? $completion_time : tutor_time(); | |
| $completion_time_format = date_i18n( get_option( 'date_format' ), $completion_time ) . ' ' . date_i18n( get_option( 'time_format' ), $completion_time ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_students']['completed_course']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'student_course_completed_email_header', $header, $course_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{instructor_username}'] = $teacher->display_name; | |
| $replacable['{user_name}'] = $student->display_name; | |
| $replacable['{course_name}'] = $course->post_title; | |
| $replacable['{completion_time}'] = $completion_time_format; | |
| $replacable['{course_url}'] = get_the_permalink( $course_id ); | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{instructor_avatar}'] = $instructor_avatar; | |
| $replacable['{instructor_email}'] = $instructor_email; | |
| $replacable['{instructor_description}'] = $instructor_description; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{before_button}'] = $option_data['before_button']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_student_course_completed' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/course_completed', ob_get_clean() ); | |
| $email_tpl = apply_filters( 'tutor_certificate_add_url_to_email', $email_tpl, $course_id ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $student->user_email, $subject, $message, $header ); | |
| } | |
| public function course_complete_email_to_teacher( $course_id ) { | |
| $course_completed_to_teacher = tutor_utils()->get_option( 'email_to_teachers.a_student_completed_course' ); | |
| if ( ! $course_completed_to_teacher ) { | |
| return; | |
| } | |
| $user_id = get_current_user_id(); | |
| $student = get_userdata( $user_id ); | |
| $course = get_post( $course_id ); | |
| $teacher = get_userdata( $course->post_author ); | |
| $completion_time = tutor_utils()->is_completed_course( $course_id ); | |
| $completion_time = $completion_time ? $completion_time : tutor_time(); | |
| $completion_time_format = date_i18n( get_option( 'date_format' ), $completion_time ) . ' ' . date_i18n( get_option( 'time_format' ), $completion_time ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['a_student_completed_course']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'student_course_completed_email_header', $header, $course_id ); | |
| $student_report_url = add_query_arg( | |
| array( | |
| 'page' => 'tutor_report', | |
| 'sub_page' => 'students', | |
| 'student_id' => $user_id, | |
| ), | |
| admin_url( 'admin.php' ) | |
| ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{user_name}'] = $teacher->display_name; | |
| $replacable['{student_name}'] = $student->display_name; | |
| $replacable['{student_username}'] = $student->display_name; | |
| $replacable['{student_email}'] = $student->user_email; | |
| $replacable['{course_name}'] = $course->post_title; | |
| $replacable['{completion_time}'] = $completion_time_format; | |
| $replacable['{course_url}'] = get_the_permalink( $course_id ); | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{student_report_url}'] = $student_report_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{before_button}'] = $this->get_replaced_text( $option_data['before_button'], array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_course_completed' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/course_completed', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $teacher->user_email, $subject, $message, $header ); | |
| } | |
| /** | |
| * Send the quiz to Student | |
| * | |
| * @param $attempt_id | |
| */ | |
| public function quiz_finished_send_email_to_student( $attempt_id ) { | |
| $quiz_completed = tutor_utils()->get_option( 'email_to_students.quiz_completed' ); | |
| if ( ! $quiz_completed ) { | |
| return; | |
| } | |
| $attempt = tutor_utils()->get_attempt( $attempt_id ); | |
| $earned_percentage = $attempt->earned_marks > 0 ? ( number_format( ( $attempt->earned_marks * 100 ) / $attempt->total_marks ) ) : 0; | |
| $passing_grade = (int) tutor_utils()->get_quiz_option( $attempt->quiz_id, 'passing_grade', 0 ); | |
| $attempt_result = $earned_percentage >= $passing_grade ? | |
| '<span class="tutor-badge-label label-success">' . esc_attr( 'Pass' ) . '</span>' : | |
| '<span class="tutor-badge-label label-danger">' . esc_attr( 'Fail' ) . '</span>'; | |
| // pr( $attempt ); | |
| // die; | |
| $attempt_info = tutor_utils()->quiz_attempt_info( $attempt_id ); | |
| $submission_time = tutor_utils()->avalue_dot( 'submission_time', $attempt_info ); | |
| $submission_time = $submission_time ? $submission_time : tutor_time(); | |
| $quiz_id = tutor_utils()->avalue_dot( 'comment_post_ID', $attempt ); | |
| $quiz_name = get_the_title( $quiz_id ); | |
| $course = tutor_utils()->get_course_by_quiz( $quiz_id ); | |
| $course_id = tutor_utils()->avalue_dot( 'ID', $course ); | |
| $course_title = get_the_title( $course_id ); | |
| $submission_time_format = date_i18n( get_option( 'date_format' ), $submission_time ) . ' ' . date_i18n( get_option( 'time_format' ), $submission_time ); | |
| $quiz_url = get_the_permalink( $quiz_id ); | |
| $user = get_userdata( tutor_utils()->avalue_dot( 'user_id', $attempt ) ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_students']['quiz_completed']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'student_quiz_completed_email_header', $header, $attempt_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{user_name}'] = $user->display_name; | |
| $replacable['{total_marks}'] = $attempt->total_marks; | |
| $replacable['{earned_marks}'] = $attempt->earned_marks; | |
| $replacable['{attempt_result}'] = $attempt_result; | |
| $replacable['{quiz_name}'] = $quiz_name; | |
| $replacable['{course_name}'] = $course_title; | |
| $replacable['{submission_time}'] = $submission_time_format; | |
| $replacable['{quiz_url}'] = "<a href='{$quiz_url}'>{$quiz_url}</a>"; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_student_quiz_completed' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/quiz_completed', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| // die( $message ); | |
| $this->send( $user->user_email, $subject, $message, $header ); | |
| } | |
| public function quiz_finished_send_email_to_instructor( $attempt_id ) { | |
| $isEnable = tutor_utils()->get_option( 'email_to_teachers.student_submitted_quiz' ); | |
| if ( ! $isEnable ) { | |
| return; | |
| } | |
| $attempt = tutor_utils()->get_attempt( $attempt_id ); | |
| $attempt_info = tutor_utils()->quiz_attempt_info( $attempt_id ); | |
| $submission_time = tutor_utils()->avalue_dot( 'submission_time', $attempt_info ); | |
| $submission_time = $submission_time ? $submission_time : tutor_time(); | |
| $quiz_id = tutor_utils()->avalue_dot( 'comment_post_ID', $attempt ); | |
| $quiz_name = get_the_title( $quiz_id ); | |
| $course = tutor_utils()->get_course_by_quiz( $quiz_id ); | |
| $course_id = tutor_utils()->avalue_dot( 'ID', $course ); | |
| $course_title = get_the_title( $course_id ); | |
| $submission_time_format = date_i18n( get_option( 'date_format' ), $submission_time ) . ' ' . date_i18n( get_option( 'time_format' ), $submission_time ); | |
| $attempt_url = tutor_utils()->get_tutor_dashboard_page_permalink( 'quiz-attempts/quiz-reviews/?attempt_id=' . $attempt_id ); | |
| $user = get_userdata( tutor_utils()->avalue_dot( 'user_id', $attempt ) ); | |
| $teacher = get_userdata( $course->post_author ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['student_submitted_quiz']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'student_quiz_completed_to_instructor_email_header', $header, $attempt_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{user_name}'] = $teacher->display_name; | |
| $replacable['{student_name}'] = $user->display_name; | |
| $replacable['{quiz_name}'] = $quiz_name; | |
| $replacable['{course_name}'] = $course_title; | |
| $replacable['{submission_time}'] = $submission_time_format; | |
| $replacable['{quiz_review_url}'] = "<a href='{$attempt_url}'>{$attempt_url}</a>"; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_quiz_completed' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/quiz_completed/to_instructor', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $teacher->user_email, $subject, $message, $header ); | |
| } | |
| /** | |
| * @param $enrol_id | |
| * @param $status_to | |
| * | |
| * E-Mail to teacher when success enrol. | |
| */ | |
| public function course_enroll_email_to_teacher( $course_id, $student_id, $enrol_id, $status_to = 'completed' ) { | |
| $enroll_notification = tutor_utils()->get_option( 'email_to_teachers.a_student_enrolled_in_course' ); | |
| if ( ! $enroll_notification || $status_to !== 'completed' ) { | |
| return; | |
| } | |
| $student = get_userdata( $student_id ); | |
| $course = tutor_utils()->get_course_by_enrol_id( $enrol_id ); | |
| $teacher = get_userdata( $course->post_author ); | |
| $enroll_time = tutor_time(); | |
| $enroll_time_format = date_i18n( get_option( 'date_format' ), $enroll_time ) . ' ' . date_i18n( get_option( 'time_format' ), $enroll_time ); | |
| $profile_url = tutor_utils()->profile_url( $student_id, false ); | |
| $amount_data = tutor_utils()->get_earning_sum( $teacher->ID ); | |
| $total_amount = $amount_data->balance; | |
| $earned_amount = $amount_data->instructor_amount; | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['a_student_enrolled_in_course']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'to_instructor_course_enrolled_email_header', $header, $course->ID ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{user_name}'] = $teacher->display_name; | |
| $replacable['{student_username}'] = $student->display_name; | |
| $replacable['{student_email}'] = $student->user_email; | |
| $replacable['{profile_url}'] = $profile_url; | |
| $replacable['{dashboard_url}'] = tutor_utils()->get_tutor_dashboard_page_permalink(); | |
| $replacable['{course_name}'] = $course->post_title; | |
| $replacable['{total_amount}'] = $total_amount; | |
| $replacable['{earned_amount}'] = $earned_amount; | |
| $replacable['{enroll_time}'] = $enroll_time_format; | |
| $replacable['{course_url}'] = get_the_permalink( $course->ID ); | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_course_enrolled' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/to_teacher_course_enrolled', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $teacher->user_email, $subject, $message, $header ); | |
| } | |
| /** | |
| * @param $enrol_id | |
| * @param $status_to | |
| * | |
| * E-Mail to student when success enrol. | |
| */ | |
| public function course_enroll_email_to_student( $course_id, $student_id, $enrol_id, $status_to = 'completed' ) { | |
| $enroll_notification = tutor_utils()->get_option( 'email_to_students.course_enrolled' ); | |
| if ( ! $enroll_notification || $status_to !== 'completed' ) { | |
| return; | |
| } | |
| $student = get_userdata( $student_id ); | |
| // if student not found return. | |
| if ( false === $student ) { | |
| return; | |
| } | |
| $course = tutor_utils()->get_course_by_enrol_id( $enrol_id ); | |
| $enroll_time = tutor_time(); | |
| $enroll_time_format = date_i18n( get_option( 'date_format' ), $enroll_time ) . ' ' . date_i18n( get_option( 'time_format' ), $enroll_time ); | |
| $course_start_url = tutor_utils()->get_course_first_lesson( $course_id ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_students']['course_enrolled']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'student_course_enrolled_email_header', $header, $enrol_id ); | |
| // pr($student);die; | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{user_name}'] = $student->display_name; | |
| $replacable['{course_name}'] = $course->post_title; | |
| $replacable['{enroll_time}'] = $enroll_time_format; | |
| $replacable['{course_url}'] = get_the_permalink( $course->ID ); | |
| $replacable['{course_start_url}'] = $course_start_url; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_student_course_enrolled' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/student_course_enrolled', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $student->user_email, $subject, $message, $header ); | |
| } | |
| public function tutor_after_add_question( $course_id, $comment_id ) { | |
| $enroll_notification = tutor_utils()->get_option( 'email_to_teachers.a_student_placed_question' ); | |
| if ( ! $enroll_notification ) { | |
| return; | |
| } | |
| $user_id = get_current_user_id(); | |
| $student = get_userdata( $user_id ); | |
| $course = get_post( $course_id ); | |
| $teacher = get_userdata( $course->post_author ); | |
| $get_comment = tutor_utils()->get_qa_question( $comment_id ); | |
| $question = $get_comment->comment_content; | |
| $question_title = substr( $get_comment->comment_content, 0, 40 ); | |
| $enroll_time = tutor_time(); | |
| $enroll_time_format = date_i18n( get_option( 'date_format' ), $enroll_time ) . ' ' . date_i18n( get_option( 'time_format' ), $enroll_time ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $user_id = get_current_user_id(); | |
| $student = get_userdata( $user_id ); | |
| $course_id = tutor_utils()->get_course_id_by( 'lesson', $lesson_id ); | |
| $course = get_post( $course_id ); | |
| $teacher = get_userdata( $course->post_author ); | |
| $option_data = $this->email_options['email_to_teachers']['a_student_placed_question']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'to_teacher_asked_question_by_student_email_header', $header, $course_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{user_name}'] = $teacher->display_name; | |
| $replacable['{student_username}'] = $student->display_name; | |
| $replacable['{course_name}'] = $course->post_title; | |
| $replacable['{course_url}'] = get_the_permalink( $course_id ); | |
| $replacable['{enroll_time}'] = $enroll_time_format; | |
| $replacable['{question_title}'] = $question_title; | |
| $replacable['{question}'] = wpautop( stripslashes( $question ) ); | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_asked_question_by_student' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/to_teacher_asked_question_by_student', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $teacher->user_email, $subject, $message, $header ); | |
| } | |
| public function tutor_lesson_completed_email_after( $lesson_id ) { | |
| $course_completed_to_teacher = tutor_utils()->get_option( 'email_to_teachers.a_student_completed_lesson' ); | |
| if ( ! $course_completed_to_teacher ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $user_id = get_current_user_id(); | |
| $student = get_userdata( $user_id ); | |
| $course_id = tutor_utils()->get_course_id_by( 'lesson', $lesson_id ); | |
| $lesson = get_post( $lesson_id ); | |
| $course = get_post( $course_id ); | |
| $teacher = get_userdata( $course->post_author ); | |
| $completion_time = tutor_time(); | |
| $completion_time_format = date_i18n( get_option( 'date_format' ), $completion_time ) . ' ' . date_i18n( get_option( 'time_format' ), $completion_time ); | |
| $option_data = $this->email_options['email_to_teachers']['a_student_completed_lesson']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'student_lesson_completed_email_header', $header, $lesson_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{user_name}'] = $teacher->display_name; | |
| $replacable['{student_username}'] = $student->display_name; | |
| $replacable['{course_name}'] = $course->post_title; | |
| $replacable['{lesson_name}'] = $lesson->post_title; | |
| $replacable['{completion_time}'] = $completion_time_format; | |
| $replacable['{lesson_url}'] = get_the_permalink( $lesson_id ); | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = isset( $option_data['footer_text'] ) ? $option_data['footer_text'] : ''; | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_lesson_completed' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/lesson_completed', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $teacher->user_email, $subject, $message, $header ); | |
| } | |
| /** | |
| * After instructor successfully signup | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_new_instructor_signup( $user_id ) { | |
| $new_instructor_signup = tutor_utils()->get_option( 'email_to_admin.new_instructor_signup' ); | |
| if ( ! $new_instructor_signup ) { | |
| return; | |
| } | |
| $instructor_review_url = add_query_arg( | |
| array( | |
| 'page' => 'tutor-instructors', | |
| 'action' => 'review', | |
| 'instructor' => $user_id, | |
| ), | |
| admin_url( 'admin.php' ) | |
| ); | |
| $instructor_id = tutor_utils()->get_user_id( $user_id ); | |
| $instructor = get_userdata( $instructor_id ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $signup_time = tutor_time(); | |
| $signup_time_format = date_i18n( get_option( 'date_format' ), $signup_time ) . ' ' . date_i18n( get_option( 'time_format' ), $signup_time ); | |
| $admin_users = get_users( array( 'role__in' => array( 'administrator' ) ) ); | |
| $option_data = $this->email_options['email_to_admin']['new_instructor_signup']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'instructor_signup_email_header', $header, $instructor_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{instructor_name}'] = $instructor->display_name; | |
| $replacable['{review_url}'] = $instructor_review_url; | |
| $replacable['{instructor_email}'] = $instructor->user_email; | |
| $replacable['{signup_time}'] = $signup_time_format; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_admin_new_instructor_signup' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/new_instructor_signup', ob_get_clean() ); | |
| foreach ( $admin_users as $admin_user ) { | |
| $replacable['{user_name}'] = $admin_user->display_name; | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $admin_user->user_email, $subject, $message, $header ); | |
| } | |
| $this->instructor_application_received( $instructor ); | |
| } | |
| private function instructor_application_received( $instructor ) { | |
| $send_received = tutor_utils()->get_option( 'email_to_teachers.instructor_application_received' ); | |
| if ( ! $send_received ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['instructor_application_received']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'instructor_application_received_email_header', $header, $instructor->ID ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{user_name}'] = $instructor->display_name; | |
| $replacable['{instructor_username}'] = $instructor->display_name; | |
| $replacable['{instructor_email}'] = $instructor->user_email; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_become_application_received' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/instructor_application_received', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| // die($message); | |
| $this->send( $instructor->user_email, $subject, $message, $header ); | |
| } | |
| /** | |
| * After student successfully signup | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_new_student_signup( $user_id ) { | |
| $new_student_signup = tutor_utils()->get_option( 'email_to_admin.new_student_signup' ); | |
| if ( ! $new_student_signup ) { | |
| return; | |
| } | |
| $student_id = tutor_utils()->get_user_id( $user_id ); | |
| $student = get_userdata( $student_id ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $signup_time = tutor_time(); | |
| $signup_time_format = date_i18n( get_option( 'date_format' ), $signup_time ) . ' ' . date_i18n( get_option( 'time_format' ), $signup_time ); | |
| $admin_users = get_users( array( 'role__in' => array( 'administrator' ) ) ); | |
| $option_data = $this->email_options['email_to_admin']['new_student_signup']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'student_signup_email_header', $header, $student_id ); | |
| $profile_url = tutor_utils()->profile_url( $student_id, false ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{student_name}'] = $student->display_name; | |
| $replacable['{student_email}'] = $student->user_email; | |
| $replacable['{signup_time}'] = $signup_time_format; | |
| $replacable['{profile_url}'] = $profile_url; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_admin_new_student_signup' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/new_student_signup', ob_get_clean() ); | |
| foreach ( $admin_users as $admin_user ) { | |
| $replacable['{user_name}'] = $admin_user->display_name; | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $admin_user->user_email, $subject, $message, $header ); | |
| } | |
| } | |
| /** | |
| * After new course submit for review | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_course_pending( $post ) { | |
| if ( $post->post_type !== tutor()->course_post_type ) { | |
| return true; | |
| } | |
| $new_course_submitted = tutor_utils()->get_option( 'email_to_admin.new_course_submitted' ); | |
| if ( ! $new_course_submitted ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $submitted_time = tutor_time(); | |
| $submitted_time_format = date_i18n( get_option( 'date_format' ), $submitted_time ) . ' ' . date_i18n( get_option( 'time_format' ), $submitted_time ); | |
| $instructor_name = get_the_author_meta( 'display_name', $post->post_author ); | |
| $admin_users = get_users( array( 'role__in' => array( 'administrator' ) ) ); | |
| $option_data = $this->email_options['email_to_admin']['new_course_submitted']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'course_updated_email_header', $header, $post->ID ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{course_name}'] = $post->post_title; | |
| $replacable['{course_url}'] = get_the_permalink( $post->ID ); | |
| $replacable['{course_edit_url}'] = get_edit_post_link( $post->ID ); | |
| $replacable['{instructor_name}'] = $instructor_name; | |
| $replacable['{submitted_time}'] = $submitted_time_format; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_admin_new_course_submitted_for_review' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/new_course_submitted', ob_get_clean() ); | |
| foreach ( $admin_users as $admin_user ) { | |
| $replacable['{user_name}'] = $admin_user->display_name; | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $admin_user->user_email, $subject, $message, $header ); | |
| } | |
| } | |
| /** | |
| * After new course published | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_course_published( $post ) { | |
| if ( $post->post_type !== tutor()->course_post_type ) { | |
| return true; | |
| } | |
| $new_course_published = tutor_utils()->get_option( 'email_to_admin.new_course_published' ); | |
| if ( ! $new_course_published ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $published_time = tutor_time(); | |
| $published_time_format = date_i18n( get_option( 'date_format' ), $published_time ) . ' ' . date_i18n( get_option( 'time_format' ), $published_time ); | |
| $instructor_name = get_the_author_meta( 'display_name', $post->post_author ); | |
| $admin_users = get_users( array( 'role__in' => array( 'administrator' ) ) ); | |
| $option_data = $this->email_options['email_to_admin']['new_course_published']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'course_updated_email_header', $header, $post->ID ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{course_name}'] = $post->post_title; | |
| $replacable['{course_url}'] = get_the_permalink( $post->ID ); | |
| $replacable['{instructor_name}'] = $instructor_name; | |
| $replacable['{published_time}'] = $published_time_format; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_admin_new_course_published' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/new_course_published', ob_get_clean() ); | |
| foreach ( $admin_users as $admin_user ) { | |
| $replacable['{user_name}'] = $admin_user->display_name; | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $admin_user->user_email, $subject, $message, $header ); | |
| } | |
| } | |
| /** | |
| * After course updated/edited | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_course_updated( $course_id, $course, $update = false ) { | |
| $course_updated = tutor_utils()->get_option( 'email_to_admin.course_updated' ); | |
| $tutor_ajax = isset( $_POST['tutor_ajax_action'] ) ? $_POST['tutor_ajax_action'] : null; | |
| $auto_save = $tutor_ajax == 'tutor_course_builder_draft_save'; | |
| if ( ! isset( $course_updated ) || ! $update || $course->post_status != 'publish' || $auto_save ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $updated_time = tutor_time(); | |
| $updated_time_format = date_i18n( get_option( 'date_format' ), $updated_time ) . ' ' . date_i18n( get_option( 'time_format' ), $updated_time ); | |
| $instructor_name = get_the_author_meta( 'display_name', $course->post_author ); | |
| $admin_users = get_users( array( 'role__in' => array( 'administrator' ) ) ); | |
| $option_data = $this->email_options['email_to_admin']['course_updated']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'course_updated_email_header', $header, $course_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_title}'] = $site_name; | |
| $replacable['{course_name}'] = $course->post_title; | |
| $replacable['{course_url}'] = get_the_permalink( $course_id ); | |
| $replacable['{instructor_name}'] = $instructor_name; | |
| $replacable['{updated_time}'] = $updated_time_format; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_admin_course_updated' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/course_updated', ob_get_clean() ); | |
| foreach ( $admin_users as $admin_user ) { | |
| $replacable['{user_name}'] = $admin_user->display_name; | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $admin_user->user_email, $subject, $message, $header ); | |
| } | |
| } | |
| /** | |
| * After assignment submitted | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_assignment_after_submitted( $assignment_submit_id ) { | |
| // get post id by comment | |
| $assignment_post_id = $this->get_comment_post_id_by_comment_id( $assignment_submit_id ); | |
| // get assignment autor and course autor | |
| $authors = $this->get_assignment_and_course_authors( $assignment_post_id ); | |
| $student_submitted_assignment = tutor_utils()->get_option( 'email_to_teachers.student_submitted_assignment' ); | |
| if ( ! $student_submitted_assignment ) { | |
| return; | |
| } | |
| $submitted_assignment = tutor_utils()->get_assignment_submit_info( $assignment_submit_id ); | |
| $student_name = get_the_author_meta( 'display_name', $submitted_assignment->user_id ); | |
| $course_name = get_the_title( $submitted_assignment->comment_parent ); | |
| $course_url = get_the_permalink( $submitted_assignment->comment_parent ); | |
| $author_id = get_post_field( 'post_author', $submitted_assignment->comment_parent ); | |
| $instructor_name = get_the_author_meta( 'display_name', $author_id ); | |
| $assignment_name = get_the_title( $submitted_assignment->comment_post_ID ); | |
| $submitted_url = tutor_utils()->get_tutor_dashboard_page_permalink( 'assignments/submitted' ); | |
| $review_link = esc_url( $submitted_url . '?assignment=' . $submitted_assignment->comment_post_ID ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['student_submitted_assignment']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'student_submitted_assignment_email_header', $header, $assignment_submit_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{student_name}'] = $student_name; | |
| $replacable['{course_name}'] = $course_name; | |
| $replacable['{user_name}'] = $instructor_name; | |
| $replacable['{assignment_name}'] = $assignment_name; | |
| $replacable['{review_link}'] = $review_link; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{before_button}'] = $option_data['before_button']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); // pending to add user_name | |
| $this->tutor_load_email_template( 'to_instructor_student_submitted_assignment' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/student_submitted_assignment', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $admin_emails = $author_emails = $to_emails = array(); | |
| $admin_users = get_users( array( 'role__in' => array( 'administrator' ) ) ); | |
| foreach ( $admin_users as $admin_user ) { | |
| $admin_emails[] = $admin_user->user_email; | |
| } | |
| foreach ( $authors as $author ) { | |
| $author_emails[] = $author; | |
| } | |
| $to_emails = array_merge( $admin_emails, $author_emails ); | |
| $this->send( $to_emails, $subject, $message, $header ); | |
| } | |
| /** | |
| * After assignment evaluate | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_after_assignment_evaluate( $assignment_submit_id ) { | |
| $assignment_graded = tutor_utils()->get_option( 'email_to_students.assignment_graded' ); | |
| if ( ! $assignment_graded ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $submitted_assignment = tutor_utils()->get_assignment_submit_info( $assignment_submit_id ); | |
| $student_email = get_the_author_meta( 'user_email', $submitted_assignment->user_id ); | |
| $student_name = get_the_author_meta( 'display_name', $submitted_assignment->user_id ); | |
| $course_name = get_the_title( $submitted_assignment->comment_parent ); | |
| $course_url = get_the_permalink( $submitted_assignment->comment_parent ); | |
| $assignment_max_mark = tutor_utils()->get_assignment_option( $submitted_assignment->comment_post_ID, 'total_mark' ); | |
| $assignment_name = get_the_title( $submitted_assignment->comment_post_ID ); | |
| $assignment_score = get_comment_meta( $assignment_submit_id, 'assignment_mark', true ); | |
| $assignment_comment = get_comment_meta( $assignment_submit_id, 'instructor_note', true ); | |
| $option_data = $this->email_options['email_to_students']['assignment_graded']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'assignment_evaluate_email_header', $header, $assignment_submit_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{course_name}'] = $course_name; | |
| $replacable['{course_url}'] = $course_url; | |
| $replacable['{user_name}'] = $student_name; | |
| $replacable['{assignment_name}'] = $assignment_name; | |
| $replacable['{assignment_max_mark}'] = $assignment_max_mark; | |
| $replacable['{assignment_score}'] = $assignment_score; | |
| $replacable['{assignment_comment}'] = $assignment_comment; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_student_assignment_evaluate' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/assignment_evaluate', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $student_email, $subject, $message, $header ); | |
| } | |
| /** | |
| * After remove student from course | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_student_remove_from_course( $enrol_id ) { | |
| $remove_from_course = tutor_utils()->get_option( 'email_to_students.remove_from_course' ); | |
| if ( ! $remove_from_course ) { | |
| return; | |
| } | |
| $enrolment = tutor_utils()->get_enrolment_by_enrol_id( $enrol_id ); | |
| if ( ! $enrolment ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $course_name = $enrolment->course_title; | |
| $course_url = get_the_permalink( $enrolment->course_id ); | |
| $student_email = $enrolment->user_email; | |
| $student_name = $enrolment->display_name; | |
| $option_data = $this->email_options['email_to_students']['remove_from_course']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'remove_from_course_email_header', $header, $enrol_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{user_name}'] = $student_name; | |
| $replacable['{course_name}'] = $course_name; | |
| $replacable['{course_url}'] = $course_url; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_student_remove_from_course' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/remove_from_course', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $student_email, $subject, $message, $header ); | |
| } | |
| /** | |
| * Enrollment After Expired | |
| * | |
| * @since 1.8.1 | |
| */ | |
| public function tutor_enrollment_after_expired( $enrol_id ) { | |
| $enrollment_expired = tutor_utils()->get_option( 'email_to_students.enrollment_expired' ); | |
| if ( ! $enrollment_expired ) { | |
| return; | |
| } | |
| $enrolment = tutor_utils()->get_enrolment_by_enrol_id( $enrol_id ); | |
| if ( ! $enrolment ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $course_name = $enrolment->course_title; | |
| $course_url = get_the_permalink( $enrolment->course_id ); | |
| $student_name = $enrolment->display_name; | |
| $student_email = $enrolment->user_email; | |
| $option_data = $this->email_options['email_to_students']['enrollment_expired']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'enrollment_expired_email_header', $header, $enrol_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{user_name}'] = $student_name; | |
| $replacable['{course_name}'] = $course_name; | |
| $replacable['{course_url}'] = $course_url; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_student_enrollment_expired' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/to_student_enrollment_expired', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $student_email, $subject, $message, $header ); | |
| } | |
| /** | |
| * After save new announcement | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_announcements_notify_students( $announcement_id = 0, $announcement = array(), $action_type = '' ) { | |
| if ( isset( $_POST['tutor_notify_students'] ) && 'on' !== $_POST['tutor_notify_students'] ) { | |
| return; | |
| } | |
| $new_announcement_posted = tutor_utils()->get_option( 'email_to_students.new_announcement_posted' ); | |
| $announcement_updated = tutor_utils()->get_option( 'email_to_students.announcement_updated' ); | |
| if ( ! $new_announcement_posted || ! $announcement_updated ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $course_name = get_the_title( $announcement->post_parent ); | |
| $course_url = get_the_permalink( $announcement->post_parent ); | |
| $announcement_title = $announcement->post_title; | |
| $announcement_content = $announcement->post_content; | |
| $announcement_author = $announcement->post_author; | |
| $announcement_date = $announcement->post_date; | |
| $author_fullname = get_the_author_meta( 'display_name', $announcement_author ); | |
| $option_data_create = $this->email_options['email_to_students']['new_announcement_posted']; | |
| $option_data_update = $this->email_options['email_to_students']['announcement_updated']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $replacable['{author_fullname}'] = $author_fullname; | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{course_name}'] = $course_name; | |
| $replacable['{course_url}'] = $course_url; | |
| $replacable['{announcement_title}'] = $announcement_title; | |
| $replacable['{announcement_content}'] = $announcement_content; | |
| $replacable['{announcement_date}'] = $announcement_date; | |
| $enrolled_students = tutor_utils()->get_students_all_data_by_course_id( $announcement->post_parent ); | |
| // pr($enrolled_students); | |
| foreach ( $enrolled_students as $enrolled_student ) { | |
| $replacable['{user_name}'] = $enrolled_student->display_name; | |
| if ( 'create' == $action_type ) { | |
| $replacable['{logo}'] = isset($option_data_create['logo'])?$option_data_create['logo']:$this->email_logo; | |
| $replacable['{email_heading}'] = $this->get_replaced_text( $option_data_create['heading'], array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{footer_text}'] = $option_data_create['footer_text']; | |
| $replacable['{email_message}'] = $this->get_replaced_text( $option_data_create['message'], array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( $option_data_create['subject'], array_keys( $replacable ), array_values( $replacable ) ); | |
| $template = 'to_student_new_announcement_posted'; | |
| } elseif ( 'update' == $action_type ) { | |
| $replacable['{logo}'] = isset($option_data_update['logo'])?$option_data_update['logo']:$this->email_logo; | |
| $replacable['{email_heading}'] = $this->get_replaced_text( $option_data_update['heading'], array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{footer_text}'] = $option_data_update['footer_text']; | |
| $replacable['{email_message}'] = $this->get_replaced_text( $option_data_update['message'], array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( $option_data_update['subject'], array_keys( $replacable ), array_values( $replacable ) ); | |
| $template = 'to_student_announcement_updated'; | |
| } | |
| ob_start(); | |
| $this->tutor_load_email_template( $template ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/' . $template, ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| // die($message); | |
| $this->send( $enrolled_student->user_email, $subject, $message, $header ); | |
| } | |
| } | |
| /** | |
| * After question has been answered | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_after_answer_to_question( $answer_id ) { | |
| $after_question_answered = tutor_utils()->get_option( 'email_to_students.after_question_answered' ); | |
| if ( ! $after_question_answered ) { | |
| return; | |
| } | |
| $answer = tutor_utils()->get_qa_answer_by_answer_id( $answer_id ); | |
| // pr($answer_id);die; | |
| $course_name = get_the_title( $answer->comment_post_ID ); | |
| $course_url = get_the_permalink( $answer->comment_post_ID ); | |
| $question_by = get_the_author_meta( 'user_email', $answer->question_by ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_students']['after_question_answered']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'question_answered_email_header', $header, $answer_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{answer}'] = $answer->comment_content; | |
| $replacable['{answer_by}'] = $answer->display_name; | |
| $replacable['{user_name}'] = $answer->display_name; | |
| $replacable['{answer_date}'] = $answer->comment_date; | |
| $replacable['{question}'] = $answer->question; | |
| $replacable['{question_title}'] = $answer->question_title; | |
| $replacable['{course_name}'] = $course_name; | |
| $replacable['{course_url}'] = $course_url; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_student_question_answered' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/question_answered', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| // pr($message);die; | |
| $this->send( $question_by, $subject, $message, $header ); | |
| } | |
| /** | |
| * After quiz attempts feedback | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function feedback_submitted_for_quiz_attempt( $attempt_id ) { | |
| $feedback_submitted_for_quiz = tutor_utils()->get_option( 'email_to_students.feedback_submitted_for_quiz' ); | |
| if ( ! $feedback_submitted_for_quiz ) { | |
| return; | |
| } | |
| $attempt = tutor_utils()->get_attempt( $attempt_id ); | |
| $quiz_title = get_post_field( 'post_title', $attempt->quiz_id ); | |
| $course = get_post( $attempt->course_id ); | |
| $instructor_name = get_the_author_meta( 'display_name', $course->post_author ); | |
| $instructor_feedback = get_post_meta( $attempt_id, 'instructor_feedback', true ); | |
| $block_heading = $feedback_submitted_for_quiz['block_heading']; | |
| $block_content = $feedback_submitted_for_quiz['block_content']; | |
| $user_email = get_the_author_meta( 'user_email', $attempt->user_id ); | |
| $student_fullname = get_the_author_meta( 'display_name', $attempt->user_id ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_students']['feedback_submitted_for_quiz']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'feedback_submitted_for_quiz_email_header', $header, $attempt_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{quiz_name}'] = $quiz_title; | |
| $replacable['{total_marks}'] = $attempt->total_marks; | |
| $replacable['{earned_marks}'] = $attempt->earned_marks; | |
| $replacable['{course_name}'] = $course->post_title; | |
| $replacable['{instructor_name}'] = $instructor_name; | |
| $replacable['{user_name}'] = $student_fullname; | |
| $replacable['{instructor_feedback}'] = $instructor_feedback; | |
| $replacable['{instructor_feedback}'] = $instructor_feedback; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{block_heading}'] = $block_heading; | |
| $replacable['{block_content}'] = $block_content; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_student_feedback_submitted_for_quiz' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/feedback_submitted_for_quiz', ob_get_clean() ); | |
| $message = $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ); | |
| $this->send( $user_email, $subject, $message, $header ); | |
| } | |
| /** | |
| * After course completed | |
| * | |
| * @since 1.6.9 | |
| */ | |
| public function tutor_course_complete_after( $course_id ) { | |
| $rate_course_and_instructor = tutor_utils()->get_option( 'email_to_students.rate_course_and_instructor' ); | |
| if ( ! $rate_course_and_instructor ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $course = get_post( $course_id ); | |
| $course_url = get_the_permalink( $course_id ); | |
| $instructor_url = tutor_utils()->profile_url( $course->post_author, true ); | |
| $user_id = get_current_user_id(); | |
| $user_email = get_the_author_meta( 'user_email', $user_id ); | |
| $student_fullname = get_the_author_meta( 'display_name', $user_id ); | |
| $option_data = $this->email_options['email_to_students']['rate_course_and_instructor']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'rate_course_and_instructor_email_header', $header, $course_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{user_name}'] = $student_fullname; | |
| $replacable['{course_name}'] = $course->post_title; | |
| $replacable['{course_url}'] = $course_url; | |
| $replacable['{instructor_url}'] = $instructor_url; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_student_rate_course_and_instructor' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/rate_course_and_instructor', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $user_email, $subject, $message, $header ); | |
| } | |
| public function get_comment_post_id_by_comment_id( $comment_id ) { | |
| global $wpdb; | |
| $comment_table = $wpdb->prefix . 'comments'; | |
| $query = $wpdb->get_row( | |
| $wpdb->prepare( "SELECT comment_post_ID FROM $comment_table WHERE comment_ID = %d", $comment_id ) | |
| ); | |
| $comment_post_ID = $query->comment_post_ID; | |
| return $comment_post_ID; | |
| } | |
| /* | |
| *require assignment post id | |
| return authors of assignment and course author's email (unique) | |
| */ | |
| public function get_assignment_and_course_authors( $assignment_post_id ) { | |
| // get course id of assignment | |
| $course_id = tutor_utils()->get_course_id_by( 'assignment', $assignment_post_id ); | |
| $course_author = $this->get_author_by_post_id( $course_id ); | |
| $assignment_author = $this->get_author_by_post_id( $assignment_post_id ); | |
| $authors = array(); | |
| if ( $course_author !== false ) { | |
| $authors[] = $course_author->user_email; | |
| } | |
| if ( $assignment_author !== false ) { | |
| $authors[] = $assignment_author->user_email; | |
| } | |
| return array_unique( $authors ); | |
| } | |
| public function get_author_by_post_id( $post_id ) { | |
| global $wpdb; | |
| $user_table = $wpdb->prefix . 'users'; | |
| $post_table = $wpdb->prefix . 'posts'; | |
| // get author for associate course | |
| $author = $wpdb->get_row( | |
| $wpdb->prepare( "SELECT u.ID,u.user_email FROM $user_table u JOIN $post_table p ON p.post_author = u.ID WHERE p.ID = %d", $post_id ) | |
| ); | |
| return $author ? $author : false; | |
| } | |
| public function instructor_application_approved( $instructor_id ) { | |
| $send_accepted = tutor_utils()->get_option( 'email_to_teachers.instructor_application_accepted' ); | |
| if ( ! $send_accepted ) { | |
| return; | |
| } | |
| $user_info = get_userdata( $instructor_id ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['instructor_application_accepted']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'instructor_application_approved_email_header', $header, $user_info->ID ); | |
| $replacable['{dashboard_url}'] = tutor_utils()->get_tutor_dashboard_page_permalink(); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{instructor_username}'] = $user_info->display_name; | |
| $replacable['{user_name}'] = $user_info->display_name; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_become_application_approved' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/instructor_application_approved', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $user_info->user_email, $subject, $message, $header ); | |
| } | |
| public function instructor_application_rejected( $instructor_id ) { | |
| $send_rejected = tutor_utils()->get_option( 'email_to_teachers.instructor_application_rejected' ); | |
| if ( ! $send_rejected ) { | |
| return; | |
| } | |
| $user_info = get_userdata( $instructor_id ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['instructor_application_rejected']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'instructor_application_rejected_email_header', $header, $user_info->ID ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{instructor_username}'] = $user_info->display_name; | |
| $replacable['{user_name}'] = $user_info->display_name; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_become_application_rejected' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/instructor_application_rejected', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $user_info->user_email, $subject, $message, $header ); | |
| } | |
| private function get_instructor_by_witdrawal( $withdrawal_id ) { | |
| global $wpdb; | |
| $user_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->prefix}tutor_withdraws WHERE withdraw_id = %d", $withdrawal_id ) ); | |
| return get_userdata( $user_id ); | |
| } | |
| public function withdrawal_request_approved( $withdrawal_id ) { | |
| $option_status = tutor_utils()->get_option( 'email_to_teachers.withdrawal_request_approved' ); | |
| if ( ! $option_status ) { | |
| return; | |
| } | |
| $instructor = $this->get_instructor_by_witdrawal( $withdrawal_id ); | |
| $withdrawal = $this->get_witdrawal_by_id( $withdrawal_id ); | |
| $withdraw_method = maybe_unserialize( $withdrawal->method_data )['withdraw_method_name']; | |
| $approve_time = $withdrawal->created_at; | |
| $withdraw_approve_time = date_i18n( get_option( 'date_format' ), $approve_time ) . ' ' . date_i18n( get_option( 'time_format' ), $approve_time ); | |
| $withdraw_amount = $withdrawal->amount; | |
| $currency = get_option( 'woocommerce_currency' ); | |
| $total_amount = tutor_utils()->get_earning_sum( $instructor->ID )->balance; | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['withdrawal_request_approved']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'withdrawal_request_approved_email_header', $header, $withdrawal_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{instructor_username}'] = $instructor->display_name; | |
| $replacable['{admin_user}'] = wp_get_current_user()->display_name; | |
| $replacable['{user_name}'] = $instructor->display_name; | |
| $replacable['{withdraw_amount}'] = $withdraw_amount . ' ' . $currency; | |
| $replacable['{withdraw_method_name}'] = $withdraw_method; | |
| $replacable['{withdraw_approve_time}'] = $withdraw_approve_time; | |
| $replacable['{total_amount}'] = $total_amount . ' ' . $currency; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_withdrawal_request_approved' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/withdrawal_request_approved', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $instructor->user_email, $subject, $message, $header ); | |
| } | |
| public function withdrawal_request_rejected( $withdrawal_id ) { | |
| $instructor = $this->get_instructor_by_witdrawal( $withdrawal_id ); | |
| $option_status = tutor_utils()->get_option( 'email_to_teachers.withdrawal_request_rejected' ); | |
| if ( ! $option_status ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['withdrawal_request_rejected']; | |
| $withdrawal = $this->get_witdrawal_by_id( $withdrawal_id ); | |
| $withdraw_method = maybe_unserialize( $withdrawal->method_data )['withdraw_method_name']; | |
| $reject_time = $withdrawal->created_at; | |
| $withdraw_reject_time = date_i18n( get_option( 'date_format' ), $reject_time ) . ' ' . date_i18n( get_option( 'time_format' ), $reject_time ); | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'withdrawal_request_rejected_email_header', $header, $withdrawal_id ); | |
| // $this->send( $instructor->user_email, 'subject', json_encode( $withdraw_method ), $header ); | |
| // die; | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{admin_user}'] = wp_get_current_user()->display_name; | |
| $replacable['{instructor_username}'] = $instructor->display_name; | |
| $replacable['{withdraw_amount}'] = $withdrawal->amount; | |
| $replacable['{withdraw_method_name}'] = $withdraw_method; | |
| $replacable['{withdraw_reject_time}'] = $withdraw_reject_time; | |
| $replacable['{user_name}'] = $instructor->display_name; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_withdrawal_request_rejected' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/withdrawal_request_rejected', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $instructor->user_email, $subject, $message, $header ); | |
| } | |
| private function get_witdrawal_by_id( $withdrawal_id ) { | |
| global $wpdb; | |
| $withdraw_request = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}tutor_withdraws WHERE withdraw_id = %d", $withdrawal_id ) ); | |
| return $withdraw_request; | |
| } | |
| public function withdrawal_request_placed( $withdrawal_id ) { | |
| $option_status = tutor_utils()->get_option( 'email_to_admin.new_withdrawal_request' ); | |
| if ( ! $option_status ) { | |
| return; | |
| } | |
| $instructor = $this->get_instructor_by_witdrawal( $withdrawal_id ); | |
| $withdraw = $this->get_witdrawal_by_id( $withdrawal_id ); | |
| $withdraw_amount = $withdraw->amount; | |
| // $admin_email = get_option( 'admin_email' ); | |
| $admin_users = get_users( array( 'role__in' => array( 'administrator' ) ) ); | |
| $approved_url = add_query_arg( | |
| array( | |
| 'page' => 'tutor_withdraw_requests', | |
| 'action' => 'approve', | |
| 'withdraw_id' => $withdrawal_id, | |
| ), | |
| admin_url( 'admin.php' ) | |
| ); | |
| $rejected_url = add_query_arg( | |
| array( | |
| 'page' => 'tutor_withdraw_requests', | |
| 'action' => 'reject', | |
| 'withdraw_id' => $withdrawal_id, | |
| ), | |
| admin_url( 'admin.php' ) | |
| ); | |
| $subject = __( 'New withdrawal request from ' . $instructor->display_name . ' for ' . $instructor->amount, 'tutor-pro' ); | |
| $currency = get_option( 'woocommerce_currency' ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_admin']['new_withdrawal_request']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'new_withdrawal_request_email_header', $header, $withdrawal_id ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{instructor_username}'] = $instructor->display_name; | |
| $replacable['{instructor_email}'] = $instructor->user_email; | |
| $replacable['{withdraw_amount}'] = $withdraw_amount . ' ' . $currency; | |
| $replacable['{approved_url}'] = $approved_url; | |
| $replacable['{rejected_url}'] = $rejected_url; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_admin_new_withdrawal_request' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/new_withdrawal_request', ob_get_clean() ); | |
| foreach ( $admin_users as $admin_user ) { | |
| $replacable['{user_name}'] = $admin_user->display_name; | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $admin_user->user_email, $subject, $message, $header ); | |
| } | |
| $this->withdrawal_received_to_instructor( $instructor, $withdrawal_id ); | |
| } | |
| private function withdrawal_received_to_instructor( $instructor, $withdrawal_id ) { | |
| $option_status = tutor_utils()->get_option( 'email_to_teachers.withdrawal_request_received' ); | |
| if ( ! $option_status ) { | |
| return; | |
| } | |
| $withdraw = $this->get_witdrawal_by_id( $withdrawal_id ); | |
| $withdraw_amount = $withdraw->amount; | |
| $currency = get_option( 'woocommerce_currency' ); | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['withdrawal_request_received']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'withdrawal_request_received_email_header', $header, $instructor->ID ); | |
| $withdrawal = $this->get_witdrawal_by_id( $withdrawal_id ); | |
| $withdraw_method = maybe_unserialize( $withdrawal->method_data )['withdraw_method_name']; | |
| $reject_time = $withdrawal->created_at; | |
| $withdraw_time = date_i18n( get_option( 'date_format' ), $reject_time ) . ' ' . date_i18n( get_option( 'time_format' ), $reject_time ); | |
| $total_amount = tutor_utils()->get_earning_sum()->balance; | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{instructor_username}'] = $instructor->display_name; | |
| $replacable['{user_name}'] = $instructor->display_name; | |
| $replacable['{total_amount}'] = $total_amount . ' ' . $currency; | |
| $replacable['{withdraw_amount}'] = $withdraw_amount . ' ' . $currency; | |
| $replacable['{withdraw_method}'] = $withdraw_method; | |
| $replacable['{withdraw_time}'] = $withdraw_time; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_withdrawal_request_received' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/withdrawal_request_received', ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $instructor->user_email, $subject, $message, $header ); | |
| } | |
| // lqa means lesson or quiz or assignment | |
| public function new_lqa_published( $lqa ) { | |
| // pr($lqa);die; | |
| // pending | |
| $lqa_type = $lqa['lqa_type']; | |
| $option_status = tutor_utils()->get_option( 'email_to_students.new_' . $lqa_type . '_published' ); | |
| if ( ! $option_status ) { | |
| return; | |
| } | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_students'][ 'new_' . $lqa_type . '_published' ]; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{student_username}'] = $lqa['student']->display_name; | |
| $replacable['{user_name}'] = $lqa['student']->display_name; | |
| $replacable[ '{' . $lqa_type . '_title}' ] = $lqa['lqa']->post_title; | |
| $replacable['{course_title}'] = $lqa['course']->post_title; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| // $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = sprintf( __( 'New %s Published', 'tutor-pro' ), __( $lqa_type, 'tutor-pro' ) ); | |
| $hook_name = 'new_' . strtolower( $lqa_type ) . '_published'; | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_student_new_' . $lqa['lqa_type'] . '_published' ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/' . $hook_name, ob_get_clean() ); | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( $hook_name . '_email_header', $header, $lqa['lqa']->ID ); | |
| $this->send( $lqa['student']->user_email, $subject, $message, $header, array(), true ); | |
| } | |
| private function enqueue_email( $to, $subject, $message, $headers, $attachments = array(), $force_enqueue = false ) { | |
| global $wpdb; | |
| $data = array( | |
| 'mail_to' => $to, | |
| 'subject' => $subject, | |
| 'message' => $message, | |
| 'headers' => serialize( $headers ), | |
| ); | |
| if ( is_string( $to ) && ! $force_enqueue ) { | |
| // Send email instantly in case single recipient | |
| $this->send_mail( array( $data ) ); | |
| return; | |
| } | |
| ! is_array( $to ) ? $to = array( $to ) : 0; | |
| foreach ( $to as $email ) { | |
| $insert_data = array_merge( $data, array( 'mail_to' => $email ) ); | |
| $wpdb->insert( $this->queue_table, $insert_data ); | |
| } | |
| } | |
| private function send_mail( $mails ) { | |
| add_filter( 'wp_mail_from', array( $this, 'get_from_address' ) ); | |
| add_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) ); | |
| add_filter( 'wp_mail_content_type', array( $this, 'get_content_type' ) ); | |
| foreach ( $mails as $mail ) { | |
| $mail['headers'] = unserialize( $mail['headers'] ); | |
| wp_mail( $mail['mail_to'], $mail['subject'], $mail['message'], $mail['headers'] ); | |
| } | |
| remove_filter( 'wp_mail_from', array( $this, 'get_from_address' ) ); | |
| remove_filter( 'wp_mail_from_name', array( $this, 'get_from_name' ) ); | |
| remove_filter( 'wp_mail_content_type', array( $this, 'get_content_type' ) ); | |
| } | |
| public function tutor_cron_schedules( $schedules ) { | |
| $intervals = array( 300, 900, 1800, 3600 ); | |
| foreach ( $intervals as $second ) { | |
| $hook = $second . 'second'; | |
| if ( ! isset( $schedules[ $hook ] ) ) { | |
| $schedules[ $hook ] = array( | |
| 'interval' => $second, | |
| 'display' => $second . ' ' . __( 'second', 'tutor-pro' ), | |
| ); | |
| } | |
| } | |
| return $schedules; | |
| } | |
| public function deregister_scheduler() { | |
| wp_clear_scheduled_hook( 'tutor_email_scheduler_cron' ); | |
| } | |
| public function register_scheduler( $override_old = false ) { | |
| $override_old ? $this->deregister_scheduler() : 0; | |
| $event_timestamp = wp_next_scheduled( 'tutor_email_scheduler_cron' ); | |
| if ( $event_timestamp === false ) { | |
| // Register scheduler if not already | |
| $is_disabled = (bool) tutor_utils()->get_option( 'tutor_email_disable_wpcron' ); | |
| $interval = (int) tutor_utils()->get_option( 'tutor_email_cron_frequency' ); | |
| ( ! $interval || ! is_numeric( $interval ) || $interval <= 0 ) ? $interval = 900 : 0; | |
| if ( ! $is_disabled ) { | |
| wp_schedule_event( time(), $interval . 'second', 'tutor_email_scheduler_cron' ); | |
| } | |
| } | |
| } | |
| public function run_scheduler() { | |
| $limit = tutor_utils()->get_option( 'tutor_bulk_email_limit', 10 ); | |
| ( ! $limit || ! is_numeric( $limit ) || $limit <= 0 ) ? $limit = 10 : 0; | |
| $is_os_native = isset( $_GET['tutor_cron'] ) && $_GET['tutor_cron'] == '1'; | |
| global $wpdb; | |
| $mails = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$this->queue_table} ORDER BY id ASC LIMIT %d", $limit ) ); | |
| $mail_count = is_array( $mails ) ? count( $mails ) : 0; | |
| if ( ! $mail_count ) { | |
| $is_os_native ? exit( json_encode( array( 'call_again' => 'no' ) ) ) : 0; | |
| return; | |
| } | |
| $mails = array_map( | |
| function( $mail ) { | |
| return (array) $mail; | |
| }, | |
| $mails | |
| ); | |
| // Send mail | |
| $this->send_mail( $mails ); | |
| // Delete from queue | |
| $ids = implode( ',', array_column( $mails, 'id' ) ); | |
| $wpdb->query( "DELETE FROM {$this->queue_table} WHERE id IN ({$ids})" ); | |
| if ( $is_os_native ) { | |
| $call = $mail_count >= $limit ? 'yes' : 'no'; | |
| exit( json_encode( array( 'call_again' => $call ) ) ); | |
| } | |
| } | |
| /** | |
| * Send course update notification mail to instructor | |
| * | |
| * Event course publish | trash | |
| * | |
| * @since 1.9.8 | |
| */ | |
| public function tutor_course_update_notification( $post_id, $post, $update ) { | |
| // check if author is tutor instructor | |
| $course = $post; | |
| $course_status = $course->post_status; | |
| $is_enable_publish_mail = tutor_utils()->get_option( 'email_to_teachers.instructor_course_publish' ); | |
| // $is_enable_reject_mail = tutor_utils()->get_option( 'email_to_teachers.instructor_course_reject' ); | |
| if ( tutor_utils()->is_instructor( $course->post_author ) && 'publish' === $course_status ) { | |
| // check if already publish mail sent | |
| $post_meta = get_post_meta( $post_id, 'tutor_instructor_course_publish', true ); | |
| if ( ! $post_meta ) { | |
| $site_url = get_bloginfo( 'url' ); | |
| $site_name = get_bloginfo( 'name' ); | |
| $option_data = $this->email_options['email_to_teachers']['instructor_course_publish']; | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'to_instructor_course_update_subject', $header, $course->ID ); | |
| $instructor_name = get_the_author_meta( 'display_name', $course->post_author ); | |
| $course_url = get_post_permalink( $course->ID ); | |
| $course_edit_url = get_edit_post_link( $course->ID ); | |
| $course_title = $course->post_title; | |
| $author_email = get_the_author_meta( 'user_email', $course->post_author ); | |
| $replacable['{testing_email_notice}'] = ''; | |
| $replacable['{course_name}'] = $course_title; | |
| $replacable['{site_url}'] = $site_url; | |
| $replacable['{site_name}'] = $site_name; | |
| $replacable['{user_name}'] = $instructor_name; | |
| $replacable['{course_url}'] = $course_url; | |
| $replacable['{course_edit_url}'] = $course_edit_url; | |
| $replacable['{logo}'] = isset($option_data['logo'])?$option_data['logo']:''; | |
| $replacable['{email_heading}'] = $option_data['heading']; | |
| $replacable['{footer_text}'] = $this->get_replaced_text( json_encode($option_data['footer_text']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $replacable['{email_message}'] = $this->get_replaced_text( json_encode($option_data['message']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $subject = $this->get_replaced_text( json_encode($option_data['subject']), array_keys( $replacable ), array_values( $replacable ) ); | |
| $message = ''; | |
| $email_tpl = ''; | |
| if ( 'draft' === $course_status && $is_enable_publish_mail ) { | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_course_rejected' ); | |
| $email_tpl = apply_filters( 'to_instructor_course_rejected', ob_get_clean() ); | |
| } | |
| if ( 'publish' === $course_status && $is_enable_publish_mail ) { | |
| ob_start(); | |
| $this->tutor_load_email_template( 'to_instructor_course_accepted' ); | |
| $email_tpl = apply_filters( 'to_instructor_course_accepted', ob_get_clean() ); | |
| } | |
| $message = html_entity_decode( $this->get_message( $email_tpl, array_keys( $replacable ), array_values( $replacable ) ) ); | |
| $this->send( $author_email, $subject, $message, $header, array(), true ); | |
| update_post_meta( $post_id, 'tutor_instructor_course_publish', true ); | |
| } | |
| } | |
| } | |
| /** | |
| * Facilitate tutor_course_update_notification method | |
| * | |
| * @param required | |
| * | |
| * @return bool | |
| * | |
| * @since 1.9.8 | |
| */ | |
| public function tutor_send_course_update_notification( $author_email, $template, $file_tpl_variable, $replace_data, $course, $subject ) { | |
| if ( '' !== $template ) { | |
| $to_emails = array( $author_email ); | |
| ob_start(); | |
| $this->tutor_load_email_template( $template ); | |
| $email_tpl = apply_filters( 'tutor_email_tpl/to_instructor_course_update', ob_get_clean() ); | |
| $message = $this->get_message( $email_tpl, $file_tpl_variable, $replace_data ); | |
| $header = 'Content-Type: ' . $this->get_content_type() . "\r\n"; | |
| $header = apply_filters( 'to_instructor_course_update_subject', $header, $course->ID ); | |
| $this->send( array_unique( $to_emails ), $subject, $message, $header ); | |
| return true; | |
| } | |
| return false; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment