174 lines
5.4 KiB
PHP
174 lines
5.4 KiB
PHP
<?php
|
|
defined('BASEPATH') or exit('No direct script access allowed');
|
|
|
|
class Hubtel_sms_model extends App_Model
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
public function get_messages($id = '')
|
|
{
|
|
if (is_numeric($id)) {
|
|
$this->db->where('id', $id);
|
|
return $this->db->get(db_prefix() . 'hubtel_sms_messages')->row();
|
|
}
|
|
|
|
return $this->db->get(db_prefix() . 'hubtel_sms_messages')->result_array();
|
|
}
|
|
|
|
public function get_template($id)
|
|
{
|
|
$this->db->where('id', $id);
|
|
return $this->db->get(db_prefix() . 'hubtel_sms_templates')->row();
|
|
}
|
|
|
|
public function get_templates()
|
|
{
|
|
return $this->db->get(db_prefix() . 'hubtel_sms_templates')->result_array();
|
|
}
|
|
|
|
public function add_template($data)
|
|
{
|
|
$this->db->insert(db_prefix() . 'hubtel_sms_templates', [
|
|
'name' => $data['name'],
|
|
'template' => $data['template']
|
|
]);
|
|
|
|
return $this->db->insert_id();
|
|
}
|
|
|
|
public function update_template($id, $data)
|
|
{
|
|
$this->db->where('id', $id);
|
|
$this->db->update(db_prefix() . 'hubtel_sms_templates', [
|
|
'name' => $data['name'],
|
|
'template' => $data['template'],
|
|
'updated_at' => date('Y-m-d H:i:s')
|
|
]);
|
|
|
|
return $this->db->affected_rows() > 0;
|
|
}
|
|
|
|
public function delete_template($id)
|
|
{
|
|
$this->db->where('id', $id);
|
|
$this->db->delete(db_prefix() . 'hubtel_sms_templates');
|
|
|
|
return $this->db->affected_rows() > 0;
|
|
}
|
|
|
|
public function send_sms($to, $message, $template_id = null)
|
|
{
|
|
// Get Hubtel API credentials
|
|
$client_id = get_option('hubtel_sms_client_id');
|
|
$client_secret = get_option('hubtel_sms_client_secret');
|
|
$sender_id = get_option('hubtel_sms_sender_id');
|
|
|
|
if (empty($client_id) || empty($client_secret) || empty($sender_id)) {
|
|
return [
|
|
'success' => false,
|
|
'message' => 'Hubtel API credentials not configured'
|
|
];
|
|
}
|
|
|
|
// If template is provided, get the message from template
|
|
if ($template_id) {
|
|
$template = $this->get_template($template_id);
|
|
if ($template) {
|
|
$message = $template->template;
|
|
}
|
|
}
|
|
|
|
// Record the message in database
|
|
$message_data = [
|
|
'to' => $to,
|
|
'message' => $message,
|
|
'status' => 'pending',
|
|
'sent_by' => get_staff_user_id()
|
|
];
|
|
|
|
$this->db->insert(db_prefix() . 'hubtel_sms_messages', $message_data);
|
|
$message_id = $this->db->insert_id();
|
|
|
|
// Send SMS using Hubtel API
|
|
$response = $this->hubtel_api->send_sms($to, $message, $sender_id);
|
|
|
|
// Update message status and log the response
|
|
$this->db->where('id', $message_id);
|
|
$this->db->update(db_prefix() . 'hubtel_sms_messages', [
|
|
'status' => $response['success'] ? 'sent' : 'failed'
|
|
]);
|
|
|
|
// Log the response
|
|
$this->db->insert(db_prefix() . 'hubtel_sms_logs', [
|
|
'message_id' => $message_id,
|
|
'response' => json_encode($response),
|
|
'status' => $response['success'] ? 'success' : 'failed'
|
|
]);
|
|
|
|
return $response;
|
|
}
|
|
|
|
public function get_total_messages($status = '')
|
|
{
|
|
if ($status !== '') {
|
|
$this->db->where('status', $status);
|
|
}
|
|
return $this->db->count_all_results(db_prefix() . 'hubtel_sms_messages');
|
|
}
|
|
|
|
public function get_total_cost()
|
|
{
|
|
$this->db->select_sum('rate');
|
|
$this->db->where('status', 'sent');
|
|
$query = $this->db->get(db_prefix() . 'hubtel_sms_messages');
|
|
return $query->row()->rate ?? 0;
|
|
}
|
|
public function get_message_logs($message_id)
|
|
{
|
|
$this->db->where('message_id', $message_id);
|
|
$this->db->order_by('created_at', 'desc');
|
|
return $this->db->get(db_prefix() . 'hubtel_sms_logs')->result_array();
|
|
}
|
|
|
|
private function validate_credentials()
|
|
{
|
|
$client_id = get_option('hubtel_sms_client_id');
|
|
$client_secret = get_option('hubtel_sms_client_secret');
|
|
$sender_id = get_option('hubtel_sms_sender_id');
|
|
|
|
return !empty($client_id) && !empty($client_secret) && !empty($sender_id);
|
|
}
|
|
|
|
private function process_template_merge_fields($template)
|
|
{
|
|
// Add merge field processing here
|
|
// Example: Replace {contact_firstname} with actual value
|
|
$CI = &get_instance();
|
|
|
|
// Load necessary models
|
|
$CI->load->model('clients_model');
|
|
$CI->load->model('invoices_model');
|
|
|
|
// Process client fields
|
|
$client_id = get_client_user_id();
|
|
if ($client_id) {
|
|
$client = $CI->clients_model->get($client_id);
|
|
$template = str_replace('{contact_firstname}', $client->firstname ?? '', $template);
|
|
$template = str_replace('{contact_lastname}', $client->lastname ?? '', $template);
|
|
$template = str_replace('{client_company}', $client->company ?? '', $template);
|
|
$template = str_replace('{client_phonenumber}', $client->phonenumber ?? '', $template);
|
|
}
|
|
|
|
return $template;
|
|
}
|
|
|
|
public function get_recent_messages($limit = 5)
|
|
{
|
|
$this->db->order_by('date_sent', 'desc');
|
|
$this->db->limit($limit);
|
|
return $this->db->get(db_prefix() . 'hubtel_sms_messages')->result_array();
|
|
}
|
|
} |