CI =& get_instance(); } /** * Replace the email template variables. * * This method finds and replaces the html variables of an email * template. It is used to generate dynamic HTML emails that are * send as notifications to the system users. * * @param array $replace_array Array that contains the variables * to be replaced. * @param string $email_html The email template hmtl. * @return string Returns the new email html that contain the * variables of the $replace_array. */ private function replace_template_variables($replace_array, $email_html) { foreach($replace_array as $var=>$value) { $email_html = str_replace($var, $value, $email_html); } return $email_html; } /** * Send a success email to the customer that booked * a new appointment. * * @expectedException NotificationException Raises when an unexpected * error has occured when the email is send. * * @param array $customer_data Associative array with the customer's * data. Each key has the same name as the corresponding field in db. * @param array $appointment_data Associative array with the appointment's * data. Each key has the same name as the corresponding field in db. * @param string $email_title The email title is going to inform the customer * for the action that was taken. * @return bool Returns the operation result. */ public function send_book_success($customer_data, $appointment_data, $email_title) { $this->CI->load->model('Providers_Model'); $this->CI->load->model('Services_Model'); $this->CI->load->model('Settings_Model'); $provider_data = $this->CI->Providers_Model ->get_row($appointment_data['id_users_provider']); $service_data = $this->CI->Services_Model ->get_row($appointment_data['id_services']); $replace_array = array( '$email_title' => $email_title, '$appointment_service' => $service_data['name'], '$appointment_provider' => $provider_data['first_name'] . ' ' . $provider_data['last_name'], '$appointment_date' => date('d/m/Y H:i', strtotime($appointment_data['start_datetime'])), '$appointment_duration' => $service_data['duration'] . ' minutes', '$appointment_link' => $this->CI->config->item('base_url') . 'appointments/index/' . $appointment_data['hash'], '$company_link' => $this->CI->Settings_Model->get_setting('company_link'), '$company_name' => $this->CI->Settings_Model->get_setting('company_name'), '$customer_name' => $customer_data['first_name'] . ' ' . $customer_data['last_name'] ); $email_html = file_get_contents(dirname(dirname(__FILE__)) . '/views/emails/book_success.php'); $email_html = $this->replace_template_variables($replace_array, $email_html); $mail = new PHPMailer(); $mail->From = $this->CI->Settings_Model->get_setting('company_email'); $mail->FromName = $this->CI->Settings_Model->get_setting('company_name'); $mail->AddAddress($customer_data['email']); // Do not use the name argument, phpmailer crushes. $mail->IsHTML(true); $mail->CharSet = 'UTF-8'; $mail->Subject = $email_title; $mail->Body = $email_html; if(!$mail->Send()) { throw new NotificationException('Email could not been sent. ' . 'Mailer Error (' . __LINE__ . '): ' . $mail->ErrorInfo); } return TRUE; } /** * Send an email notification to a provider that * a new appointment has been added to his plan. * * @expectedException NotificationException Raises when an unexpected * error has occured when the email is send. * * @param array $customer_data Associative array with the customer's * data. Each key has the same name as the corresponding field in db. * @param array $appointment_data Associative array with the appointment's * data. Each key has the same name as the corresponding field in db. * @param string $email_title The email title is going to inform the provider * for the action that was taken. * @return bool Returns the operation result. */ public function send_new_appointment($customer_data, $appointment_data, $email_title) { $this->CI->load->model('Providers_Model'); $this->CI->load->model('Services_Model'); $this->CI->load->model('Settings_Model'); $provider_data = $this->CI->Providers_Model->get_row($appointment_data['id_users_provider']); $service_data = $this->CI->Services_Model->get_row($appointment_data['id_services']); $replace_array = array( '$email_title' => $email_title, '$appointment_service' => $service_data['name'], '$appointment_provider' => $provider_data['first_name'] . ' ' . $provider_data['last_name'], '$appointment_date' => date('d/m/Y H:i', strtotime($appointment_data['start_datetime'])), '$appointment_duration' => $service_data['duration'] . ' minutes', '$appointment_link' => $this->CI->config->item('base_url') . 'appointments/admin/' . $appointment_data['hash'], '$company_link' => $this->CI->Settings_Model->get_setting('company_link'), '$company_name' => $this->CI->Settings_Model->get_setting('company_name'), '$customer_name' => $customer_data['first_name'] . ' ' . $customer_data['last_name'], '$customer_email' => $customer_data['email'], '$customer_phone' => $customer_data['phone_number'], '$customer_address' => $customer_data['address'] ); $email_html = file_get_contents(dirname(dirname(__FILE__)) . '/views/emails/new_appointment.php'); $email_html = $this->replace_template_variables($replace_array, $email_html); $mail = new PHPMailer(); $mail->From = $this->CI->Settings_Model->get_setting('company_email'); $mail->FromName = $this->CI->Settings_Model->get_setting('company_name'); $mail->AddAddress($provider_data['email']); // "Name" argument crushes the phpmailer class. $mail->IsHTML(true); $mail->CharSet = 'UTF-8'; $mail->Subject = $email_title; $mail->Body = $email_html; if (!$mail->Send()) { throw new NotificationException('Email could not been sent. ' . 'Mailer Error (Line ' . __LINE__ . '): ' . $mail->ErrorInfo); } return TRUE; } /** * Send an email notification to a user when an appointment is cancelled. * * @param array $appointment_data The record data of the cancelled appointment. * @param string $user_email The user email where the email notification is going * to be send. */ public function send_cancel_appointment($appointment_data, $user_email) { $this->CI->load->model('Providers_Model'); $this->CI->load->model('Services_Model'); $this->CI->load->model('Settings_Model'); $provider_data = $this->CI->Providers_Model->get_row($appointment_data['id_users_provider']); $service_data = $this->CI->Services_Model->get_row($appointment_data['id_services']); $replace_array = array( '$email_title' => 'Appointment Cancelled', '$appointment_service' => $service_data['name'], '$appointment_provider' => $provider_data['first_name'] . ' ' . $provider_data['last_name'], '$appointment_date' => date('d/m/Y H:i', strtotime($appointment_data['start_datetime'])), '$appointment_duration' => $service_data['duration'] . ' minutes', '$company_link' => $this->CI->Settings_Model->get_setting('company_link'), '$company_name' => $this->CI->Settings_Model->get_setting('company_name') ); $email_html = file_get_contents(dirname(dirname(__FILE__)) . '/views/emails/cancel_appointment.php'); $email_html = $this->replace_template_variables($replace_array, $email_html); $mail = new PHPMailer(); $mail->From = $this->CI->Settings_Model->get_setting('company_email'); $mail->FromName = $this->CI->Settings_Model->get_setting('company_name'); $mail->AddAddress($user_email); // "Name" argument crushes the phpmailer class. $mail->IsHTML(true); $mail->CharSet = 'UTF-8'; $mail->Subject = 'Appointment Cancelled'; $mail->Body = $email_html; if (!$mail->Send()) { throw new NotificationException('Email could not been sent. ' . 'Mailer Error (Line ' . __LINE__ . '): ' . $mail->ErrorInfo); } return TRUE; } /** * Send delete appointment notification. * * This method should be called after the appointment has been deleted. * * IMPORTANT! This method's arguments should be taken * from database before the appointment record is deleted. */ public function send_delete_appointment($appointment_data, $provider_data, $service_data, $customer_data) { // @task Implement sending delete appointment notification. } } /* End of file notifications.php */ /* Location: ./application/libraries/notifications.php */