Current File : /home/kelaby89/abl.academy/wp-content/plugins/learnpress/inc/emails/class-lp-email-hooks.php
<?php

use LearnPress\Models\UserItems\UserCourseModel;

defined( 'ABSPATH' ) || exit();

if ( ! class_exists( 'LP_Email_Hooks' ) ) {

	/**
	 * Class LP_Email_Hooks
	 */
	class LP_Email_Hooks {
		protected static $instance;
		protected $actions;

		protected function __construct() {
			// Define class handle send email with hook corresponding
			$this->actions = apply_filters(
				'learn-press/email-actions',
				[
					// preview course
					'learn_press_course_submit_rejected',
					'learn_press_course_submit_approved',
					'learn_press_course_submit_for_reviewer',

					// New order
					'learn-press/order/status-pending-to-processing' => [
						LP_Email_New_Order_Admin::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-new-order-admin.php',
						LP_Email_New_Order_User::class  => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-new-order-user.php',
						LP_Email_New_Order_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-new-order-instructor.php',
						LP_Email_New_Order_Guest::class => LP_PLUGIN_PATH . 'inc/emails/guest/class-lp-email-new-order-guest.php',
						LP_Email_Processing_Order_User::class => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-processing-order-user.php',
						LP_Email_Processing_Order_Guest::class => LP_PLUGIN_PATH . 'inc/emails/guest/class-lp-email-processing-order-guest.php',
					],
					'learn-press/order/status-pending-to-completed' => [
						LP_Email_New_Order_Admin::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-new-order-admin.php',
						LP_Email_New_Order_User::class  => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-new-order-user.php',
						LP_Email_New_Order_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-new-order-instructor.php',
						LP_Email_New_Order_Guest::class => LP_PLUGIN_PATH . 'inc/emails/guest/class-lp-email-new-order-guest.php',
					],

					// Completed order
					'learn-press/order/status-completed' => [
						LP_Email_Completed_Order_User::class  => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-completed-order-user.php',
						LP_Email_Completed_Order_Admin::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-completed-order-admin.php',
						LP_Email_Completed_Order_Guest::class => LP_PLUGIN_PATH . 'inc/emails/guest/class-lp-email-completed-order-guest.php',
					],

					// User enrolled course when order completed before
					'learnpress/user/course-enrolled'    => [
						LP_Email_Enrolled_Course_User::class       => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-enrolled-course-user.php',
						LP_Email_Enrolled_Course_Admin::class      => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-enrolled-course-admin.php',
						LP_Email_Enrolled_Course_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-enrolled-course-instructor.php',
					],

					// Cancelled order
					'learn-press/order/status-cancelled' => [
						LP_Email_Cancelled_Order_User::class       => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-cancelled-order-user.php',
						LP_Email_Cancelled_Order_Admin::class      => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-cancelled-order-admin.php',
						LP_Email_Cancelled_Order_Guest::class      => LP_PLUGIN_PATH . 'inc/emails/guest/class-lp-email-cancelled-order-guest.php',
						LP_Email_Cancelled_Order_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-cancelled-order-instructor.php',
					],

					// Finished course
					'learn-press/user-course-finished'   => [
						LP_Email_Finished_Course_Admin::class      => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-finished-course-admin.php',
						LP_Email_Finished_Course_User::class       => LP_PLUGIN_PATH . 'inc/emails/student/class-lp-email-finished-course-user.php',
						LP_Email_Finished_Course_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-finished-course-instructor.php',
					],

					// User become a teacher
					'learn-press/become-a-teacher-sent'  => [
						LP_Email_Become_An_Instructor::class => LP_PLUGIN_PATH . 'inc/emails/admin/class-lp-email-become-an-instructor.php',
					],
					'learn-press/user-become-a-teacher-accept' => [
						LP_Email_Instructor_Accepted::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-instructor-accepted.php',
					],
					'learn-press/user-become-a-teacher-deny' => [
						LP_Email_Instructor_Denied::class => LP_PLUGIN_PATH . 'inc/emails/instructor/class-lp-email-instructor-denied.php',
					],
				]
			);

			foreach ( $this->actions as $tag_hook => $action ) {
				// Stop call many times background email when enroll course,
				if ( $tag_hook === 'learnpress/user/course-enrolled' ) {
					continue;
				}

				add_action( $tag_hook, array( $this, 'handle_send_email_on_background' ), 10, 10 );
			}

			/*** Override message change password */
			add_filter( 'retrieve_password_notification_email', array( $this, 'retrieve_password_message' ), 11, 4 );
			add_filter(
				'lp/background/allow_callback',
				function ( $callbacks ) {
					$callbacks[] = LP_Email_Hooks::class . ':users_enrolled_courses';
					return $callbacks;
				}
			);
		}

		protected function include() {
		}

		/**
		 * Call background email
		 * Check hook and call class email corresponding
		 *
		 * @author tungnx
		 * @since 4.1.1
		 * @version 1.0.0
		 */
		public function handle_send_email_on_background() {
			$args           = func_get_args();
			$args           = array_merge( $args, [ 'params_request' => $_REQUEST ] );
			$email_bg       = LP_Background_Single_Email::instance();
			$current_filter = current_filter();

			try {
				if ( isset( $this->actions[ $current_filter ] ) && is_array( $this->actions[ $current_filter ] ) ) {
					foreach ( $this->actions[ $current_filter ] as $class_email => $path_file ) {
						$data_send = [
							'params'     => $args,
							'class_name' => $class_email,
						];
						$email_bg->data( $data_send )->dispatch();
					}
				}
			} catch ( Throwable $e ) {
				error_log( $e->getMessage() );
			}
		}

		/**
		 * Override message reset password
		 *
		 * @param array $data_mail
		 * @param string $key
		 * @param string $user_login
		 * @param WP_User $user_data
		 *
		 * @return array
		 * @version 1.0.1
		 * @since 4.2.6.9
		 */
		public function retrieve_password_message( $data_mail, $key, $user_login, $user_data ) {
			try {
				include_once LP_PLUGIN_PATH . 'inc/emails/types/class-lp-email-reset-password.php';
				$email_reset_pass = new LP_Email_Reset_Password();
				if ( ! $email_reset_pass->enable ) {
					return $data_mail;
				}

				$email_reset_pass = new LP_Email_Reset_Password();
				$params           = [
					'user_login' => $user_login,
					'reset_key'  => $key,
				];
				$email_reset_pass->set_data_content( $params );
				$message              = $email_reset_pass->get_content();
				$message              = apply_filters( 'learn-press/email-content', $email_reset_pass->apply_style_inline( $message ), $this );
				$data_mail['message'] = $message;
				$data_mail['subject'] = $email_reset_pass->get_subject();
				$data_mail['headers'] = $email_reset_pass->get_headers();
			} catch ( Throwable $e ) {
				error_log( $e->getMessage() );
			}

			return $data_mail;
		}

		/**
		 * Send mail when users enrolled courses
		 *
		 * @throws Exception
		 *
		 * @since 4.2.8.7
		 * @version 1.0.0
		 */
		public static function users_enrolled_courses( $data ) {
			$user_course_ids = LP_Helper::sanitize_params_submitted( $data['user_course_ids'] ?? [] );

			foreach ( $user_course_ids as $user_course_id ) {
				$user_id         = $user_course_id['user_id'] ?? 0;
				$course_id       = $user_course_id['course_id'] ?? 0;
				$userCourseModel = UserCourseModel::find( $user_id, $course_id, true );
				if ( ! $userCourseModel ) {
					continue;
				}

				$data_send = [
					$userCourseModel->ref_id,
					$userCourseModel->item_id,
					$userCourseModel->user_id,
				];

				// Send email to user enrolled course
				$email_enrolled = new LP_Email_Enrolled_Course_User();
				$email_enrolled->handle( $data_send );

				// Send email to admin when user enrolled course
				$email_enrolled_to_admin = new LP_Email_Enrolled_Course_Admin();
				$email_enrolled_to_admin->handle( $data_send );

				// Send email to instructor when user enrolled course's instructor
				$email_enrolled_to_instructor = new LP_Email_Enrolled_Course_Instructor();
				$email_enrolled_to_instructor->handle( $data_send );

				do_action( 'lp/email/users-enrolled-courses/send-mail', $userCourseModel, $data_send );
			}
		}

		/**
		 * @return LP_Email_Hooks
		 */
		public static function instance(): self {
			if ( is_null( self::$instance ) ) {
				self::$instance = new self();
			}

			return self::$instance;
		}
	}

	LP_Email_Hooks::instance();
}
Page not found – Hello World !