MaketRandevu/application/libraries/Email_messages.php

223 lines
7.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php defined('BASEPATH') or exit('No direct script access allowed');
/* ----------------------------------------------------------------------------
* MaketRandevu - MAKET Randevu Portalı
*
* @package EasyAppointments
* @author A.Tselegidis <alextselegidis@gmail.com>
* @copyright Copyright (c) Alex Tselegidis
* @license https://opensource.org/licenses/GPL-3.0 - GPLv3
* @link https://easyappointments.org
* @since v1.4.0
* ---------------------------------------------------------------------------- */
/**
* Email messages library.
*
* Handles the email messaging related functionality.
*
* @package Libraries
*/
class Email_messages
{
/**
* @var EA_Controller|CI_Controller
*/
protected EA_Controller|CI_Controller $CI;
/**
* Email_messages constructor.
*/
public function __construct()
{
$this->CI = &get_instance();
$this->CI->load->model('admins_model');
$this->CI->load->model('appointments_model');
$this->CI->load->model('providers_model');
$this->CI->load->model('secretaries_model');
$this->CI->load->model('secretaries_model');
$this->CI->load->model('settings_model');
$this->CI->load->library('email');
$this->CI->load->library('ics_file');
$this->CI->load->library('timezones');
}
/**
* Send an email with the appointment details.
*
* @param array $appointment Appointment data.
* @param array $provider Provider data.
* @param array $service Service data.
* @param array $customer Customer data.
* @param array $settings App settings.
* @param string $subject Email subject.
* @param string $message Email message.
* @param string $appointment_link Appointment unique URL.
* @param string $recipient_email Recipient email address.
* @param string $ics_stream ICS file contents.
* @param string|null $timezone Custom timezone.
*
* @throws Exception
*/
public function send_appointment_saved(
array $appointment,
array $provider,
array $service,
array $customer,
array $settings,
string $subject,
string $message,
string $appointment_link,
string $recipient_email,
string $ics_stream,
string $timezone = null,
): void {
$appointment_timezone = new DateTimeZone($provider['timezone']);
$appointment_start = new DateTime($appointment['start_datetime'], $appointment_timezone);
$appointment_end = new DateTime($appointment['end_datetime'], $appointment_timezone);
if ($timezone && $timezone !== $provider['timezone']) {
$custom_timezone = new DateTimeZone($timezone);
$appointment_start->setTimezone($custom_timezone);
$appointment['start_datetime'] = $appointment_start->format('Y-m-d H:i:s');
$appointment_end->setTimezone($custom_timezone);
$appointment['end_datetime'] = $appointment_end->format('Y-m-d H:i:s');
}
$html = $this->CI->load->view(
'emails/appointment_saved_email',
[
'subject' => $subject,
'message' => $message,
'appointment' => $appointment,
'service' => $service,
'provider' => $provider,
'customer' => $customer,
'settings' => $settings,
'timezone' => $timezone,
'appointment_link' => $appointment_link,
],
true,
);
$this->CI->email->from($settings['company_email'], $settings['company_email']);
$this->CI->email->to($recipient_email);
$this->CI->email->subject($subject);
$this->CI->email->message($html);
$this->CI->email->attach($ics_stream, 'attachment', 'invitation.ics', 'text/vcalendar');
if (!$this->CI->email->send(false)) {
throw new RuntimeException('Email was not sent: ' . $this->CI->email->print_debugger());
}
}
/**
* Send an email with the appointment removal details.
*
* @param array $appointment Appointment data.
* @param array $provider Provider data.
* @param array $service Service data.
* @param array $customer Customer data.
* @param array $settings App settings.
* @param string $recipient_email Recipient email address.
* @param string|null $reason Removal reason.
* @param string|null $timezone Custom timezone.
*
* @throws Exception
*/
public function send_appointment_deleted(
array $appointment,
array $provider,
array $service,
array $customer,
array $settings,
string $recipient_email,
string $reason = null,
string $timezone = null,
): void {
$appointment_timezone = new DateTimeZone($provider['timezone']);
$appointment_start = new DateTime($appointment['start_datetime'], $appointment_timezone);
$appointment_end = new DateTime($appointment['end_datetime'], $appointment_timezone);
if ($timezone && $timezone !== $provider['timezone']) {
$custom_timezone = new DateTimeZone($timezone);
$appointment_start->setTimezone($custom_timezone);
$appointment['start_datetime'] = $appointment_start->format('Y-m-d H:i:s');
$appointment_end->setTimezone($custom_timezone);
$appointment['end_datetime'] = $appointment_end->format('Y-m-d H:i:s');
}
$html = $this->CI->load->view(
'emails/appointment_deleted_email',
[
'appointment' => $appointment,
'service' => $service,
'provider' => $provider,
'customer' => $customer,
'settings' => $settings,
'timezone' => $timezone,
'reason' => $reason,
],
true,
);
$this->CI->email->from($settings['company_email'], $settings['company_email']);
$this->CI->email->to($recipient_email);
$this->CI->email->subject(lang('appointment_cancelled_title'));
$this->CI->email->message($html);
if (!$this->CI->email->send(false)) {
throw new RuntimeException('Email was not sent: ' . $this->CI->email->print_debugger());
}
}
/**
* Send the account recovery details.
*
* @param string $password New password.
* @param string $recipient_email Recipient email address.
* @param array $settings App settings.
*/
public function send_password(string $password, string $recipient_email, array $settings): void
{
$html = $this->CI->load->view(
'emails/account_recovery_email',
[
'subject' => lang('new_account_password'),
'message' => str_replace('$password', '<strong>' . $password . '</strong>', lang('new_password_is')),
'settings' => $settings,
],
true,
);
$this->CI->email->from($settings['company_email'], $settings['company_email']);
$this->CI->email->to($recipient_email);
$this->CI->email->subject(lang('new_account_password'));
$this->CI->email->message($html);
if (!$this->CI->email->send(false)) {
throw new RuntimeException('Email was not sent: ' . $this->CI->email->print_debugger());
}
}
}