HEX
Server: Apache
System: Linux outside 5.4.8_Algonet_ZeroMAC_0.9.4.8 #6 SMP Mon Feb 3 20:36:07 CET 2020 x86_64
User: server (1002)
PHP: 8.3.20
Disabled: exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,parse_ini_file,show_source
Upload Files
File: /home/muoapartman/www/wp-content/plugins/motopress-hotel-booking-lite/includes/emails/emails.php
<?php

namespace MPHB\Emails;

use \MPHB\PostTypes\BookingCPT;

class Emails {

	/**
	 *
	 * @var Mailer
	 */
	private $mailer = null;

	/**
	 *
	 * @var AbstractEmail[]
	 */
	private $emails;

	/**
	 *
	 * @var Templaters\ReservedRoomsTemplater
	 */
	private $reservedRoomsTemplater;

	/**
	 *
	 * @var Templaters\CancellationBookingTemplater
	 */
	private $cancellationTemplater;

	public function __construct(){
		$this->reservedRoomsTemplater = new Templaters\ReservedRoomsTemplater();
		$this->cancellationTemplater  = new Templaters\CancellationBookingTemplater();

		$this->initEmails();

		$this->addActions();
	}

	private function initEmails(){

		$emails = array();

		$emails[] = new Booking\Admin\PendingEmail( array(
			'id' => 'admin_pending_booking'
			), Templaters\EmailTemplater::create( array(
				'booking' => true
			) )
		);

		$emails[] = new Booking\Admin\ConfirmedEmail( array(
			'id' => 'admin_customer_confirmed_booking'
			), Templaters\EmailTemplater::create( array(
				'booking'			 => true,
				'user_cancellation'	 => true
			) )
		);

		$emails[] = new Booking\Admin\CancelledEmail( array(
			'id' => 'admin_customer_cancelled_booking'
			), Templaters\EmailTemplater::create( array(
				'booking' => true
			) )
		);

		$emails[] = new Booking\Admin\ConfirmedByPaymentEmail( array(
			'id' => 'admin_payment_confirmed_booking'
			), Templaters\EmailTemplater::create( array(
				'booking'	 => true,
				'payment'	 => true
			) )
		);

		$emails[] = new Booking\Customer\CancelledEmail( array(
			'id' => 'customer_cancelled_booking'
			), Templaters\EmailTemplater::create( array(
				'booking' => true
			) )
		);

		$emails[] = new Booking\Customer\PendingEmail( array(
			'id' => 'customer_pending_booking'
			), Templaters\EmailTemplater::create( array(
				'booking'			 => true,
                'booking_details'    => true,
				'user_cancellation'	 => true
			) )
		);

		$emails[] = new Booking\Customer\ConfirmationEmail( array(
			'id' => 'customer_confirmation_booking',
			), Templaters\EmailTemplater::create( array(
				'booking'			 => true,
                'booking_details'    => true,
				'user_confirmation'	 => true,
				'user_cancellation'	 => true
			) )
		);

		$emails[] = new Booking\Customer\ApprovedEmail( array(
			'id' => 'customer_approved_booking'
			), Templaters\EmailTemplater::create( array(
				'booking'			 => true,
                'booking_details'    => true,
				'user_cancellation'	 => true,
                'payment'            => true
			) )
		);
		
		$emails[] = new Booking\Customer\RegistrationEmail( array(
			'id' => 'customer_registration',
			), Templaters\EmailTemplater::create( array(
				'customer_registration' => true
			) )
		);

		array_map( array( $this, 'addEmail' ), $emails );
	}

	/**
	 *
	 * @param \MPHB\Emails\AbstractEmail $email
	 */
	public function addEmail( AbstractEmail $email ){
		$this->emails[$email->getId()] = $email;
	}

	/**
	 *
	 * @param string $id
	 * @return AbstractEmail|null
	 */
	public function getEmail( $id ){
		return isset( $this->emails[$id] ) ? $this->emails[$id] : null;
	}

	private function addActions(){

		add_action( 'mphb_booking_status_changed', array( $this, 'sendBookingMails' ), 10, 2 );
		add_action( 'mphb_resend_confirm', array( $this, 'resendConfirmationEmail' ), 10 );

		add_action( 'mphb_booking_confirmed_with_payment', array( $this, 'sendBookingConfirmedWithPaymentEmail' ), 10, 2 );
		add_action( 'mphb_customer_confirmed_booking', array( $this->getEmail( 'admin_customer_confirmed_booking' ), 'trigger' ) );
		add_action( 'mphb_customer_cancelled_booking', array( $this->getEmail( 'admin_customer_cancelled_booking' ), 'trigger' ) );
		add_action( 'mphb_send_customer_registration_email', array( $this->getEmail( 'customer_registration' ), 'triggerCustomerRegistration' ), 10, 2 );
		
		add_action( 'current_screen', array( $this, 'showDeprecatedTagsNotice' ) );
	}

	public function showDeprecatedTagsNotice(){

		$notices = array();
		foreach ( $this->emails as $email ) {
			$notices = array_merge( $notices, $email->getDeprecatedNotices() );
		}

		return $notices;
	}

	/**
	 *
	 * @param \MPHB\Entities\Booking $booking
	 * @param \MPHB\Entities\Payment $payment
	 */
	public function sendBookingConfirmedWithPaymentEmail( $booking, $payment ){
		$this->getEmail( 'admin_payment_confirmed_booking' )->trigger( $booking, array(
			'payment' => $payment
		) );
	}

	/**
	 *
	 * @param \MPHB\Entities\Booking $booking
	 */
	public function sendBookingMails( $booking, $oldStatus ){
		switch ( $booking->getStatus() ) {
			case BookingCPT\Statuses::STATUS_PENDING:
				// Send mails only on confirmation-by-admin mode
				if ( MPHB()->settings()->main()->getConfirmationMode() == 'manual' ) {
					$this->getEmail( 'admin_pending_booking' )->trigger( $booking );
					$this->getEmail( 'customer_pending_booking' )->trigger( $booking );
				}
				break;
			case BookingCPT\Statuses::STATUS_PENDING_USER:
				// Send mail only on confirmation-by-customer mode
				if ( MPHB()->settings()->main()->getConfirmationMode() == 'auto' ) {
					$this->getEmail( 'customer_confirmation_booking' )->trigger( $booking );
				}
				break;
			case BookingCPT\Statuses::STATUS_CONFIRMED:
                if ( MPHB()->settings()->main()->getConfirmationMode() == 'payment' ) {
                    $expectPayment = $booking->getExpectPaymentId();
                    $payment = $expectPayment !== false ? MPHB()->getPaymentRepository()->findById( $expectPayment ) : null;
                    if ( !is_null( $payment ) ) {
                        $this->getEmail( 'customer_approved_booking' )->trigger( $booking, array( 'payment' => $payment ) );
                    } else {
                        $this->getEmail( 'customer_approved_booking' )->trigger( $booking );
                    }
                } else {
                    $this->getEmail( 'customer_approved_booking' )->trigger( $booking );
                }
				break;
			case BookingCPT\Statuses::STATUS_CANCELLED:
				$this->getEmail( 'customer_cancelled_booking' )->trigger( $booking );
				break;
		}
	}

	/**
	 *
	 * @since 3.9.3
	 */
	public function resendConfirmationEmail( $booking ) {
		if( $booking->getStatus() == BookingCPT\Statuses::STATUS_CONFIRMED ) {
			if ( MPHB()->settings()->main()->getConfirmationMode() == 'payment' ) {
					$expectPayment = $booking->getExpectPaymentId();
					$payment = $expectPayment !== false ? MPHB()->getPaymentRepository()->findById( $expectPayment ) : null;
					if ( !is_null( $payment ) ) {
							$this->getEmail( 'customer_approved_booking' )->trigger( $booking, array( 'payment' => $payment ) );
					} else {
							$this->getEmail( 'customer_approved_booking' )->trigger( $booking );
					}
			} else {
					$this->getEmail( 'customer_approved_booking' )->trigger( $booking );
			}
		}
	}


	/**
	 * @return \MPHB\Emails\Mailer
     *
     * @since 3.7.0 added new filter - "mphb_default_mailer".
	 */
	public function getMailer(){
        if (is_null($this->mailer)) {
            $this->mailer = apply_filters('mphb_default_mailer', new Mailer());
        }
		return $this->mailer;
	}

	/**
	 *
	 * @return Templaters\ReservedRoomsTemplater
	 */
	public function getReservedRoomsTemplater(){
		return $this->reservedRoomsTemplater;
	}

	/**
	 *
	 * @return Templaters\CancellationBookingTemplater
	 */
	public function getCancellationTemplater(){
		return $this->cancellationTemplater;
	}
	
	public function getCustomerRegistrationTemplater() {
		return $this->customerRegistrationTemplater;
	}

}