431 lines
13 KiB
PHP
431 lines
13 KiB
PHP
<?php
|
|
defined('BASEPATH') or exit('No direct script access allowed');
|
|
|
|
class Hubtel_sms extends AdminController
|
|
{
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
|
|
$this->load->helper('hubtel_sms/hubtel_sms');
|
|
$this->load->model('hubtel_sms_model');
|
|
$this->load->library('hubtel_sms/hubtel_api');
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'view')) {
|
|
access_denied('Hubtel SMS');
|
|
}
|
|
|
|
if (!is_hubtel_sms_enabled()) {
|
|
set_alert('warning', _l('hubtel_sms_module_disabled'));
|
|
redirect(admin_url());
|
|
}
|
|
|
|
$data['title'] = _l('hubtel_sms');
|
|
|
|
// Get statistics
|
|
$data['total_messages'] = $this->hubtel_sms_model->get_total_messages();
|
|
$data['sent_messages'] = $this->hubtel_sms_model->get_total_messages('sent');
|
|
$data['failed_messages'] = $this->hubtel_sms_model->get_total_messages('failed');
|
|
$data['total_cost'] = $this->hubtel_sms_model->get_total_cost();
|
|
|
|
// Get messages and templates
|
|
$data['messages'] = $this->hubtel_sms_model->get_messages();
|
|
$data['templates'] = $this->hubtel_sms_model->get_templates();
|
|
|
|
// Load client groups for bulk SMS
|
|
$this->load->model('client_groups_model');
|
|
$data['client_groups'] = $this->client_groups_model->get_groups();
|
|
|
|
$this->load->view('hubtel_sms/manage', $data);
|
|
}
|
|
|
|
public function send_sms()
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'create')) {
|
|
access_denied('Send SMS');
|
|
}
|
|
|
|
if ($this->input->post()) {
|
|
$response = $this->hubtel_sms_model->send_sms(
|
|
$this->input->post('to'),
|
|
$this->input->post('message'),
|
|
$this->input->post('template_id')
|
|
);
|
|
|
|
if ($response['success']) {
|
|
set_alert('success', _l('sms_sent_successfully'));
|
|
} else {
|
|
set_alert('danger', $response['message']);
|
|
}
|
|
}
|
|
|
|
redirect(admin_url('hubtel_sms'));
|
|
}
|
|
|
|
public function send_bulk_sms()
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'create')) {
|
|
access_denied('Send Bulk SMS');
|
|
}
|
|
|
|
if ($this->input->post()) {
|
|
$client_groups = $this->input->post('client_groups');
|
|
$message = $this->input->post('message');
|
|
$template_id = $this->input->post('template_id');
|
|
|
|
$success = 0;
|
|
$failed = 0;
|
|
$total_recipients = 0;
|
|
|
|
if (!empty($client_groups)) {
|
|
$this->load->model('clients_model');
|
|
foreach ($client_groups as $group_id) {
|
|
$clients = $this->clients_model->get_clients_by_group($group_id);
|
|
foreach ($clients as $client) {
|
|
if (!empty($client['phonenumber'])) {
|
|
$total_recipients++;
|
|
$response = $this->hubtel_sms_model->send_sms(
|
|
$client['phonenumber'],
|
|
$message,
|
|
$template_id
|
|
);
|
|
if ($response['success']) {
|
|
$success++;
|
|
} else {
|
|
$failed++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
set_alert('info', sprintf(
|
|
_l('bulk_sms_sent_info'),
|
|
$total_recipients,
|
|
$success,
|
|
$failed
|
|
));
|
|
}
|
|
|
|
redirect(admin_url('hubtel_sms'));
|
|
}
|
|
|
|
public function view_message($id)
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'view')) {
|
|
access_denied('View Message');
|
|
}
|
|
|
|
$message = $this->hubtel_sms_model->get_messages($id);
|
|
|
|
// If message ID exists, get logs, otherwise use empty array
|
|
$logs = [];
|
|
if ($message && isset($message->message_id)) {
|
|
$logs = $this->hubtel_sms_model->get_message_logs($message->message_id);
|
|
}
|
|
|
|
echo $this->load->view('hubtel_sms/message_details', [
|
|
'message' => $message,
|
|
'logs' => $logs
|
|
], true);
|
|
}
|
|
|
|
public function preview_template($id)
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'view')) {
|
|
access_denied('Preview Template');
|
|
}
|
|
|
|
$template = $this->hubtel_sms_model->get_template($id);
|
|
echo $this->load->view('hubtel_sms/template_preview', [
|
|
'template' => $template
|
|
], true);
|
|
}
|
|
|
|
public function get_template($id)
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'view')) {
|
|
access_denied('Get Template');
|
|
}
|
|
|
|
$template = $this->hubtel_sms_model->get_template($id);
|
|
|
|
if ($template) {
|
|
echo json_encode([
|
|
'success' => true,
|
|
'template' => $template
|
|
]);
|
|
} else {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => _l('template_not_found')
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function resend($id)
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'create')) {
|
|
access_denied('Resend SMS');
|
|
}
|
|
|
|
$message = $this->hubtel_sms_model->get_messages($id);
|
|
if ($message) {
|
|
$response = $this->hubtel_sms_model->send_sms(
|
|
$message->to,
|
|
$message->message
|
|
);
|
|
|
|
echo json_encode($response);
|
|
} else {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => _l('message_not_found')
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function get_recipients_preview()
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'view')) {
|
|
access_denied('Get Recipients Preview');
|
|
}
|
|
|
|
$groups = $this->input->get('groups');
|
|
$recipients = [];
|
|
|
|
if (!empty($groups)) {
|
|
$this->load->model('clients_model');
|
|
foreach ($groups as $group_id) {
|
|
$clients = $this->clients_model->get_clients_by_group($group_id);
|
|
$group_name = $this->client_groups_model->get_group($group_id)->name;
|
|
|
|
foreach ($clients as $client) {
|
|
if (!empty($client['phonenumber'])) {
|
|
$recipients[] = [
|
|
'company' => $client['company'],
|
|
'phonenumber' => $client['phonenumber'],
|
|
'group_name' => $group_name
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'html' => $this->load->view('hubtel_sms/recipients_preview', [
|
|
'recipients' => $recipients
|
|
], true),
|
|
'count' => count($recipients)
|
|
]);
|
|
}
|
|
|
|
public function settings()
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'edit')) {
|
|
access_denied('Hubtel SMS Settings');
|
|
}
|
|
|
|
if ($this->input->post()) {
|
|
$data = $this->input->post();
|
|
|
|
// Update options
|
|
update_option('hubtel_sms_client_id', $data['client_id']);
|
|
update_option('hubtel_sms_client_secret', $data['client_secret']);
|
|
update_option('hubtel_sms_sender_id', $data['sender_id']);
|
|
update_option('hubtel_sms_enabled', isset($data['enabled']) ? 1 : 0);
|
|
|
|
set_alert('success', _l('settings_updated'));
|
|
redirect(admin_url('hubtel_sms/settings'));
|
|
}
|
|
|
|
// Get statistics
|
|
$data['title'] = _l('hubtel_sms_settings');
|
|
$data['total_messages'] = $this->hubtel_sms_model->get_total_messages();
|
|
$data['sent_messages'] = $this->hubtel_sms_model->get_total_messages('sent');
|
|
$data['failed_messages'] = $this->hubtel_sms_model->get_total_messages('failed');
|
|
$data['total_cost'] = $this->hubtel_sms_model->get_total_cost();
|
|
$data['recent_messages'] = $this->hubtel_sms_model->get_recent_messages(5);
|
|
|
|
$this->load->view('hubtel_sms/settings', $data);
|
|
}
|
|
|
|
public function get_recent_messages()
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'view')) {
|
|
ajax_access_denied();
|
|
}
|
|
|
|
$messages = $this->hubtel_sms_model->get_recent_messages(5);
|
|
if ($messages) {
|
|
// Format messages for display
|
|
foreach ($messages as &$message) {
|
|
$message['date_sent_formatted'] = _dt($message['date_sent']);
|
|
$message['cost_formatted'] = app_format_money($message['rate'], get_base_currency());
|
|
}
|
|
}
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'messages' => $messages ?? []
|
|
]);
|
|
}
|
|
|
|
|
|
|
|
// public function get_recent_messages()
|
|
// {
|
|
// if (!has_permission('hubtel_sms', '', 'view')) {
|
|
// ajax_access_denied();
|
|
// }
|
|
|
|
// $messages = $this->hubtel_sms_model->get_recent_messages(5);
|
|
// echo json_encode(['success' => true, 'messages' => $messages]);
|
|
// }
|
|
|
|
public function send_test()
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'edit')) {
|
|
ajax_access_denied();
|
|
}
|
|
|
|
$number = $this->input->post('number');
|
|
if (!$number) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => _l('enter_phone_number')
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$sender_id = get_option('hubtel_sms_sender_id');
|
|
|
|
// Record test message attempt
|
|
$result = $this->hubtel_api->send_sms(
|
|
$number,
|
|
'This Is A Test Message',
|
|
$sender_id
|
|
);
|
|
|
|
// Log the test attempt
|
|
log_activity('SMS Test Attempt - Number: ' . $number . ', Response: ' . json_encode($result));
|
|
|
|
if ($result['success']) {
|
|
$message = _l('test_sms_sent_successfully');
|
|
if (isset($result['data']['messageId'])) {
|
|
$message .= ' (ID: ' . $result['data']['messageId'] . ')';
|
|
}
|
|
$result['message'] = $message;
|
|
}
|
|
|
|
echo json_encode($result);
|
|
}
|
|
|
|
|
|
private function get_module_statistics()
|
|
{
|
|
return [
|
|
'total_messages' => $this->hubtel_sms_model->get_total_messages(),
|
|
'sent_messages' => $this->hubtel_sms_model->get_total_messages('sent'),
|
|
'failed_messages' => $this->hubtel_sms_model->get_total_messages('failed'),
|
|
'total_cost' => $this->hubtel_sms_model->get_total_cost(),
|
|
'recent_messages' => $this->hubtel_sms_model->get_recent_messages(5),
|
|
];
|
|
}
|
|
|
|
|
|
public function get_account_info()
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'view')) {
|
|
ajax_access_denied();
|
|
}
|
|
|
|
$balance = $this->hubtel_api->get_balance();
|
|
|
|
if (!$balance) {
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => _l('unable_to_get_balance')
|
|
]);
|
|
return;
|
|
}
|
|
|
|
echo json_encode([
|
|
'success' => true,
|
|
'data' => [
|
|
'balance' => $balance['balance'] ?? 0,
|
|
'currency' => $balance['currency'] ?? 'GHS',
|
|
'statistics' => $this->get_module_statistics()
|
|
]
|
|
]);
|
|
}
|
|
|
|
public function template($id = '')
|
|
{
|
|
if (!has_permission('hubtel_sms', '', $id ? 'edit' : 'create')) {
|
|
access_denied('SMS Templates');
|
|
}
|
|
|
|
if ($this->input->post()) {
|
|
$data = $this->input->post();
|
|
|
|
if ($id) {
|
|
$success = $this->hubtel_sms_model->update_template($id, $data);
|
|
$message = _l('template_updated');
|
|
} else {
|
|
$success = $this->hubtel_sms_model->add_template($data);
|
|
$message = _l('template_added');
|
|
}
|
|
|
|
if ($success) {
|
|
set_alert('success', $message);
|
|
}
|
|
|
|
redirect(admin_url('hubtel_sms'));
|
|
}
|
|
|
|
$data['title'] = $id ? _l('edit_template') : _l('new_template');
|
|
|
|
if ($id) {
|
|
$data['template'] = $this->hubtel_sms_model->get_template($id);
|
|
if (!$data['template']) {
|
|
show_404();
|
|
}
|
|
}
|
|
|
|
// Get merge fields for templates
|
|
$data['available_merge_fields'] = [
|
|
'client' => [
|
|
'{contact_firstname}' => _l('contact_firstname'),
|
|
'{contact_lastname}' => _l('contact_lastname'),
|
|
'{client_company}' => _l('client_company'),
|
|
'{client_phonenumber}' => _l('client_phonenumber')
|
|
],
|
|
'invoice' => [
|
|
'{invoice_number}' => _l('invoice_number'),
|
|
'{invoice_duedate}' => _l('invoice_duedate'),
|
|
'{invoice_total}' => _l('invoice_total'),
|
|
'{invoice_status}' => _l('invoice_status')
|
|
]
|
|
];
|
|
|
|
$this->load->view('hubtel_sms/template', $data);
|
|
}
|
|
|
|
public function delete_template($id)
|
|
{
|
|
if (!has_permission('hubtel_sms', '', 'delete')) {
|
|
access_denied('Delete SMS Template');
|
|
}
|
|
|
|
if ($this->hubtel_sms_model->delete_template($id)) {
|
|
set_alert('success', _l('template_deleted'));
|
|
}
|
|
|
|
redirect(admin_url('hubtel_sms'));
|
|
}
|
|
} |