/home/edulekha/crm.edulekha.com/modules/appointly/models/Appointly_attendees_model.php
<?php
defined('BASEPATH') or exit('No direct script access allowed');
/**
* Class helper model responsible for appointment attendeees
*/
class Appointly_attendees_model extends App_Model
{
/**
* Create new appointment
*
* @param string $appointment_id
* @param array $attendees
* @return void
*/
public function create($appointment_id, $attendees)
{
foreach ($attendees as $attendee) {
$this->db->insert('appointly_attendees', [
'staff_id' => $attendee,
'appointment_id' => $appointment_id,
]);
}
}
/**
* Get appointment
*
* @param string $appointment_id
* @return array
*/
public function get($appointment_id)
{
$this->db->where('appointment_id', $appointment_id);
$this->db->join('staff', db_prefix() . 'staff.staffid=' . db_prefix() . 'appointly_attendees.staff_id');
return $this->db->get('appointly_attendees')->result_array();
}
public function details($attendee_ids)
{
$data = [];
$this->db->select('CONCAT(firstname, " ", lastname) as name, email');
$this->db->where_in('staffid', $attendee_ids);
$attendees = $this->db->get(db_prefix() . 'staff')->result();
if ($attendees) {
foreach ($attendees as $attendee) {
$data[] = [
'emailAddress' => [
'address' => $attendee->email,
'name' => $attendee->name,
],
];
}
return $data;
}
}
/**
* Get appointment active attendees
*
* @param string $appointment_id
* @return array
*/
public function attendees($appointment_id)
{
$this->db->select('staff_id');
$this->db->where('appointment_id', $appointment_id);
$appointment = $this->db->get('appointly_attendees')->result_array();
return array_map(fn($attendee) => $attendee['staff_id'], $appointment);
}
/**
* Get current contact email
*
* @param array $appointment
* @return array|false
*/
public function get_contact_email($appointment)
{
if ($appointment['source'] && $appointment['source'] == 'external') {
$this->db->select('email');
$this->db->where('id', $appointment['appointment_id']);
$appointment = $this->db->get('appointly_appointments')->row_array();
if ($appointment) {
return $appointment;
}
}
return false;
}
/**
* Send notifications to new attendees
*
* @param array $attendees
* @param array $appointment
* @return void
*/
public function send_notifications_to_new_attendees($attendees, $appointment)
{
$notified_users = [];
foreach ($attendees as $staff) {
if ($staff['staffid'] === get_staff_user_id()) {
continue;
}
// Determine correct notification based on appointment type
$notification_type = 'appointment_is_approved';
// For staff-only meetings, use a different notification
if (isset($appointment['source']) && $appointment['source'] == 'internal_staff') {
$notification_type = 'new_appointment_notification';
}
add_notification([
'description' => $notification_type,
'touserid' => $staff['staffid'],
'fromcompany' => true,
'link' => 'appointly/appointments/view?appointment_id=' . $appointment['id'],
]);
$notified_users[] = $staff['staffid'];
// Send appropriate email template
$template = 'appointly_appointment_approved_to_staff_attendees';
send_mail_template(
$template,
'appointly',
array_to_object($appointment),
array_to_object($staff)
);
}
if (!empty($notified_users)) {
pusher_trigger_notification(array_unique($notified_users));
}
}
/**
* Send new notifications to new assigned contact
*
* @param [array] $appointment
* @return void
*/
public function send_notifications_to_appointment_contact($appointment)
{
$template = mail_template(
'appointly_appointment_approved_to_contact',
'appointly',
array_to_object($appointment)
);
if (! empty($appointment['phone'])) {
$merge_fields = $template->get_merge_fields();
$this->app_sms->trigger(APPOINTLY_SMS_APPOINTMENT_APPROVED_TO_CLIENT, $appointment['phone'], $merge_fields);
}
@$template->send();
}
/**
* Get current assigned contact for appointment
*
* @param [array] $appointment
* @return array
*/
public function get_current_appointment_contact($appointment)
{
$this->db->where('id', $appointment['appointment_id']);
$this->db->where('contact_id', $appointment['contact_id']);
return $this->db->get(db_prefix() . 'appointly_appointments')->row_array();
}
/**
* Update appointment attendees
*
* @param [string] $appointment_id
* @param [array] $attendees
* @return void
*/
public function update($appointment_id, $attendees)
{
$this->deleteAll($appointment_id);
$this->create($appointment_id, $attendees);
}
/**
* Deletet all attendees
*
* @param [string] $appointment_id
* @return void
*/
public function deleteAll($appointment_id)
{
$this->db->where('appointment_id', $appointment_id);
$this->db->delete('appointly_attendees');
}
}