| @@ -1,5 +1,9 @@ | ||
| 1 | 1 | <?php |
| 2 | + | |
| 3 | +use LearnPress\Background\LPBackgroundAjax; | |
| 4 | +use LearnPress\Models\UserItems\UserCourseModel; | |
| 5 | + | |
| 2 | 6 | defined( 'ABSPATH' ) || exit(); |
| 3 | 7 | |
| 4 | 8 | if ( ! class_exists( 'LP_Email_Hooks' ) ) { |
| 5 | 9 | |
| @@ -4,8 +8,16 @@ | ||
| 4 | 8 | if ( ! class_exists( 'LP_Email_Hooks' ) ) { |
| 5 | 9 | |
| 6 | 10 | /** |
| 7 | 11 | * Class LP_Email_Hooks |
| 12 | + * | |
| 13 | + * @uses SendEmailAjax::send_mail_order_status_pending_to_processing | |
| 14 | + * @uses SendEmailAjax::send_mail_order_status_pending_to_completed | |
| 15 | + * @uses SendEmailAjax::send_mail_order_status_update_to_completed | |
| 16 | + * @uses SendEmailAjax::send_mail_order_status_update_to_cancelled | |
| 17 | + * @uses SendEmailAjax::send_mail_order_status_update_to_refunded | |
| 18 | + * @uses SendEmailAjax::send_mail_order_refund_requested | |
| 19 | + * @uses SendEmailAjax::send_mail_user_course_finished | |
| 8 | 20 | */ |
| 9 | 21 | class LP_Email_Hooks { |
| 10 | 22 | protected static $instance; |
| 11 | 23 | protected $actions; |
| @@ -12,9 +24,9 @@ | ||
| 12 | 24 | |
| 13 | 25 | protected function __construct() { |
| 14 | 26 | // Define class handle send email with hook corresponding |
| 15 | 27 | $this->actions = apply_filters( |
| 16 | - 'learn-press/email-actions', | |
| 28 | + 'learn-press/email-actions-hooks', | |
| 17 | 29 | [ |
| 18 | 30 | // preview course |
| 19 | 31 | 'learn_press_course_submit_rejected', |
| 20 | 32 | 'learn_press_course_submit_approved', |
| @@ -20,71 +32,29 @@ | ||
| 20 | 32 | 'learn_press_course_submit_approved', |
| 21 | 33 | 'learn_press_course_submit_for_reviewer', |
| 22 | 34 | |
| 23 | 35 | // New order |
| 24 | - 'learn-press/order/status-pending-to-processing' => [ | |
| 25 | - LP_Email_New_Order_Admin::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-new-order-admin.php', | |
| 26 | - LP_Email_New_Order_User::class => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-new-order-user.php', | |
| 27 | - LP_Email_New_Order_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-new-order-instructor.php', | |
| 28 | - LP_Email_New_Order_Guest::class => LP_PLUGIN_PATH . 'inc/emails/guest/class-lp-email-new-order-guest.php', | |
| 29 | - LP_Email_Processing_Order_User::class => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-processing-order-user.php', | |
| 30 | - LP_Email_Processing_Order_Guest::class => LP_PLUGIN_PATH . 'inc/emails/guest/class-lp-email-processing-order-guest.php', | |
| 31 | - ], | |
| 32 | - 'learn-press/order/status-pending-to-completed' => [ | |
| 33 | - LP_Email_New_Order_Admin::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-new-order-admin.php', | |
| 34 | - LP_Email_New_Order_User::class => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-new-order-user.php', | |
| 35 | - LP_Email_New_Order_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-new-order-instructor.php', | |
| 36 | - LP_Email_New_Order_Guest::class => LP_PLUGIN_PATH . 'inc/emails/guest/class-lp-email-new-order-guest.php', | |
| 37 | - ], | |
| 38 | - | |
| 36 | + 'learn-press/order/status-pending-to-processing' => 'send_mail_order_status_pending_to_processing', | |
| 37 | + 'learn-press/order/status-pending-to-completed' => 'send_mail_order_status_pending_to_completed', | |
| 39 | 38 | // Completed order |
| 40 | - 'learn-press/order/status-completed' => [ | |
| 41 | - LP_Email_Completed_Order_User::class => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-completed-order-user.php', | |
| 42 | - LP_Email_Completed_Order_Admin::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-completed-order-admin.php', | |
| 43 | - LP_Email_Completed_Order_Guest::class => LP_PLUGIN_PATH . 'inc/emails/guest/class-lp-email-completed-order-guest.php', | |
| 44 | - ], | |
| 45 | - | |
| 46 | - // User enrolled course when order completed before | |
| 47 | - 'learnpress/user/course-enrolled' => [ | |
| 48 | - LP_Email_Enrolled_Course_User::class => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-enrolled-course-user.php', | |
| 49 | - LP_Email_Enrolled_Course_Admin::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-enrolled-course-admin.php', | |
| 50 | - LP_Email_Enrolled_Course_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-enrolled-course-instructor.php', | |
| 51 | - ], | |
| 52 | - | |
| 39 | + 'learn-press/order/status-completed' => 'send_mail_order_status_update_to_completed', | |
| 53 | 40 | // Cancelled order |
| 54 | - 'learn-press/order/status-cancelled' => [ | |
| 55 | - LP_Email_Cancelled_Order_User::class => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-cancelled-order-user.php', | |
| 56 | - LP_Email_Cancelled_Order_Admin::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-cancelled-order-admin.php', | |
| 57 | - LP_Email_Cancelled_Order_Guest::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-cancelled-order-guest.php', | |
| 58 | - LP_Email_Cancelled_Order_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-cancelled-order-instructor.php', | |
| 59 | - ], | |
| 60 | - | |
| 41 | + 'learn-press/order/status-cancelled' => 'send_mail_order_status_update_to_cancelled', | |
| 42 | + // Refunded order | |
| 43 | + 'learn-press/order/status-refunded' => 'send_mail_order_status_update_to_refunded', | |
| 44 | + // Refund requested | |
| 45 | + 'learn-press/order/refund-requested' => 'send_mail_order_refund_requested', | |
| 61 | 46 | // Finished course |
| 62 | - 'learn-press/user-course-finished' => [ | |
| 63 | - LP_Email_Finished_Course_Admin::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-finished-course-admin.php', | |
| 64 | - LP_Email_Finished_Course_User::class => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-finished-course-user.php', | |
| 65 | - LP_Email_Finished_Course_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-finished-course-instructor.php', | |
| 66 | - ], | |
| 67 | - | |
| 68 | - // User become a teacher | |
| 69 | - 'learn-press/become-a-teacher-sent' => [ | |
| 70 | - LP_Email_Become_An_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-become-an-instructor.php', | |
| 71 | - ], | |
| 72 | - 'learn-press/user-become-a-teacher-accept' => [ | |
| 73 | - LP_Email_Instructor_Accepted::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-instructor-accepted.php', | |
| 74 | - ], | |
| 75 | - 'learn-press/user-become-a-teacher-deny' => [ | |
| 76 | - LP_Email_Instructor_Denied::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-instructor-denied.php', | |
| 77 | - ], | |
| 47 | + 'learn-press/user-course-finished' => 'send_mail_user_course_finished', | |
| 78 | 48 | ] |
| 79 | 49 | ); |
| 80 | 50 | |
| 81 | 51 | foreach ( $this->actions as $tag_hook => $action ) { |
| 82 | - add_action( $tag_hook, array( $this, 'handle_send_email_on_background' ), 10, 10 ); | |
| 52 | + add_action( $tag_hook, array( $this, 'handle_send_email_on_background' ), 11, 10 ); | |
| 83 | 53 | } |
| 84 | - } | |
| 85 | 54 | |
| 86 | - protected function include() { | |
| 55 | + // Override message change password | |
| 56 | + add_filter( 'retrieve_password_notification_email', array( $this, 'retrieve_password_message' ), 11, 4 ); | |
| 87 | 57 | } |
| 88 | 58 | |
| 89 | 59 | /** |
| 90 | 60 | * Call background email |
| @@ -95,19 +65,28 @@ | ||
| 95 | 65 | * @version 1.0.0 |
| 96 | 66 | */ |
| 97 | 67 | public function handle_send_email_on_background() { |
| 98 | 68 | $args = func_get_args(); |
| 69 | + $args = array_merge( $args, [ 'params_request' => $_REQUEST ] ); | |
| 99 | 70 | $email_bg = LP_Background_Single_Email::instance(); |
| 100 | 71 | $current_filter = current_filter(); |
| 101 | 72 | |
| 102 | 73 | try { |
| 103 | - if ( isset( $this->actions[ $current_filter ] ) && is_array( $this->actions[ $current_filter ] ) ) { | |
| 104 | - foreach ( $this->actions[ $current_filter ] as $class_email => $path_file ) { | |
| 74 | + if ( isset( $this->actions[ $current_filter ] ) ) { | |
| 75 | + if ( is_string( $this->actions[ $current_filter ] ) ) { // For new declaration, only string callback | |
| 105 | 76 | $data_send = [ |
| 106 | - 'params' => $args, | |
| 107 | - 'class_name' => $class_email, | |
| 77 | + 'params' => $args, | |
| 78 | + 'lp-load-ajax' => $this->actions[ $current_filter ], | |
| 108 | 79 | ]; |
| 109 | - $email_bg->data( $data_send )->dispatch(); | |
| 80 | + LPBackgroundAjax::handle( $data_send ); | |
| 81 | + } elseif ( is_array( $this->actions[ $current_filter ] ) ) { // For old declaration, has array | |
| 82 | + foreach ( $this->actions[ $current_filter ] as $class_email => $path_file ) { | |
| 83 | + $data_send = [ | |
| 84 | + 'params' => $args, | |
| 85 | + 'class_name' => $class_email, | |
| 86 | + ]; | |
| 87 | + $email_bg->data( $data_send )->dispatch(); | |
| 88 | + } | |
| 110 | 89 | } |
| 111 | 90 | } |
| 112 | 91 | } catch ( Throwable $e ) { |
| 113 | 92 | error_log( $e->getMessage() ); |
| @@ -114,8 +93,46 @@ | ||
| 114 | 93 | } |
| 115 | 94 | } |
| 116 | 95 | |
| 117 | 96 | /** |
| 97 | + * Override message reset password | |
| 98 | + * | |
| 99 | + * @param array $data_mail | |
| 100 | + * @param string $key | |
| 101 | + * @param string $user_login | |
| 102 | + * @param WP_User $user_data | |
| 103 | + * | |
| 104 | + * @return array | |
| 105 | + * @version 1.0.1 | |
| 106 | + * @since 4.2.6.9 | |
| 107 | + */ | |
| 108 | + public function retrieve_password_message( $data_mail, $key, $user_login, $user_data ) { | |
| 109 | + try { | |
| 110 | + include_once LP_PLUGIN_PATH . 'inc/emails/types/class-lp-email-reset-password.php'; | |
| 111 | + $email_reset_pass = new LP_Email_Reset_Password(); | |
| 112 | + if ( ! $email_reset_pass->enable ) { | |
| 113 | + return $data_mail; | |
| 114 | + } | |
| 115 | + | |
| 116 | + $email_reset_pass = new LP_Email_Reset_Password(); | |
| 117 | + $params = [ | |
| 118 | + 'user_login' => $user_login, | |
| 119 | + 'reset_key' => $key, | |
| 120 | + ]; | |
| 121 | + $email_reset_pass->set_data_content( $params ); | |
| 122 | + $message = $email_reset_pass->get_content(); | |
| 123 | + $message = apply_filters( 'learn-press/email-content', $email_reset_pass->apply_style_inline( $message ), $this ); | |
| 124 | + $data_mail['message'] = $message; | |
| 125 | + $data_mail['subject'] = $email_reset_pass->get_subject(); | |
| 126 | + $data_mail['headers'] = $email_reset_pass->get_headers(); | |
| 127 | + } catch ( Throwable $e ) { | |
| 128 | + error_log( $e->getMessage() ); | |
| 129 | + } | |
| 130 | + | |
| 131 | + return $data_mail; | |
| 132 | + } | |
| 133 | + | |
| 134 | + /** | |
| 118 | 135 | * @return LP_Email_Hooks |
| 119 | 136 | */ |
| 120 | 137 | public static function instance(): self { |
| 121 | 138 | if ( is_null( self::$instance ) ) { |
| @@ -127,5 +144,4 @@ | ||
| 127 | 144 | } |
| 128 | 145 | |
| 129 | 146 | LP_Email_Hooks::instance(); |
| 130 | 147 | } |
| 131 | - | |