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')); } }