From 30499123f193bbc50d240337783f48851636839b Mon Sep 17 00:00:00 2001 From: wrongecho Date: Fri, 9 Jan 2026 13:50:46 +0000 Subject: [PATCH 1/5] Bugfix: Portal not showing contact user id in session --- client/profile.php | 4 ++-- login.php | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/client/profile.php b/client/profile.php index 6209fed5..fae47819 100644 --- a/client/profile.php +++ b/client/profile.php @@ -20,9 +20,9 @@ require_once 'includes/inc_all.php';

Client Primary Contact:

Client Technical Contact:

Client Billing Contact:

- - +

Login via:

+

User ID:

diff --git a/login.php b/login.php index 50f6ea73..039faa0d 100644 --- a/login.php +++ b/login.php @@ -524,6 +524,7 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && (isset($_POST['login']) || isset($_ "; } else { + $user_id = intval($selectedRow['contact_user_id']); $client_id = intval($selectedRow['contact_client_id']); $contact_id = intval($selectedRow['contact_id']); $user_auth_method = sanitizeInput($selectedRow['user_auth_method']); From 64525750b621c8eaa781425651a3f1db3ef210d0 Mon Sep 17 00:00:00 2001 From: wrongecho Date: Fri, 9 Jan 2026 13:56:29 +0000 Subject: [PATCH 2/5] Fix readme demo creds --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d5c52ebe..2985a484 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@
View demo
- Username: demo@demo | Password: demo + Username: demo@demo.com | Password: demo

About From 88a29b75998c26aed27989666386eb28798a8b72 Mon Sep 17 00:00:00 2001 From: wrongecho Date: Fri, 9 Jan 2026 16:56:11 +0000 Subject: [PATCH 3/5] Bugfix: Mail queue loop not sending invoices to all billing contacts --- agent/post/invoice.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/agent/post/invoice.php b/agent/post/invoice.php index 824da9c1..b0283e32 100644 --- a/agent/post/invoice.php +++ b/agent/post/invoice.php @@ -570,15 +570,13 @@ if (isset($_GET['email_invoice'])) { } // Queue Mail - $data = [ - [ + $data[] = [ 'from' => $config_invoice_from_email, 'from_name' => $config_invoice_from_name, 'recipient' => $contact_email, 'recipient_name' => $contact_name, 'subject' => $subject, 'body' => $body - ] ]; addToMailQueue($data); @@ -613,15 +611,13 @@ if (isset($_GET['email_invoice'])) { $billing_contact_name = sanitizeInput($billing_contact['contact_name']); $billing_contact_email = sanitizeInput($billing_contact['contact_email']); - $data = [ - [ + $data[] = [ 'from' => $config_invoice_from_email, 'from_name' => $config_invoice_from_name, 'recipient' => $billing_contact_email, 'recipient_name' => $billing_contact_name, 'subject' => $subject, 'body' => $body - ] ]; logAction("Invoice", "Email", "$session_name Emailed $billing_contact_email Invoice $invoice_prefix$invoice_number Email queued Email ID: $email_id", $client_id, $invoice_id); From 77e4d2b5660f79ac7961a1ce6fb0ec2bef91fe06 Mon Sep 17 00:00:00 2001 From: wrongecho Date: Fri, 9 Jan 2026 17:14:44 +0000 Subject: [PATCH 4/5] Add task approval system --- admin/database_updates.php | 26 +- agent/ajax.php | 20 ++ .../ticket/ticket_task_approver_add.php | 140 ++++++++++ agent/modals/ticket/ticket_task_edit.php | 58 ++++- agent/post/task.php | 241 ++++++++++++++++++ agent/ticket.php | 75 +++++- client/post.php | 37 +++ client/ticket.php | 60 +++++ db.sql | 19 ++ guest/guest_approve_ticket_task.php | 114 +++++++++ guest/guest_post.php | 33 +++ includes/database_version.php | 2 +- 12 files changed, 814 insertions(+), 11 deletions(-) create mode 100644 agent/modals/ticket/ticket_task_approver_add.php create mode 100644 guest/guest_approve_ticket_task.php diff --git a/admin/database_updates.php b/admin/database_updates.php index ee595709..0a173c30 100644 --- a/admin/database_updates.php +++ b/admin/database_updates.php @@ -4134,10 +4134,30 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.8'"); } - // if (CURRENT_DATABASE_VERSION == '2.3.8') { - // // Insert queries here required to update to DB version 2.3.9 + if (CURRENT_DATABASE_VERSION == '2.3.8') { + + mysqli_query($mysqli, " + CREATE TABLE `task_approvals` ( + `approval_id` int(11) NOT NULL AUTO_INCREMENT, + `approval_scope` enum('client','internal') NOT NULL, + `approval_type` enum('any','technical','billing','specific') NOT NULL, + `approval_required_user_id` int(11) DEFAULT NULL, + `approval_status` enum('pending','approved','declined') NOT NULL, + `approval_created_by` int(11) NOT NULL, + `approval_approved_by` varchar(255) DEFAULT NULL, + `approval_url_key` varchar(200) NOT NULL, + `approval_task_id` int(11) NOT NULL, + PRIMARY KEY (`approval_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + "); + + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.9'"); + } + + // if (CURRENT_DATABASE_VERSION == '2.3.9') { + // // Insert queries here required to update to DB version 2.4.0 // // Then, update the database to the next sequential version - // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.3.9'"); + // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.4.0'"); // } } else { diff --git a/agent/ajax.php b/agent/ajax.php index 1fae441c..e153c01f 100644 --- a/agent/ajax.php +++ b/agent/ajax.php @@ -992,3 +992,23 @@ if (isset($_GET['apex_domain_check'])) { echo json_encode($response); } + +// Get internal users/techs +if (isset($_GET['get_internal_users'])) { + enforceUserPermission('module_support'); + + $sql = mysqli_query( + $mysqli, + "SELECT user_id, user_name + FROM users + WHERE user_type = 1 AND user_status = 1 AND user_archived_at IS NULL + ORDER BY user_name" + ); + + while ($row = mysqli_fetch_assoc($sql)) { + $response['users'][] = $row; + } + + echo json_encode($response); + exit; +} diff --git a/agent/modals/ticket/ticket_task_approver_add.php b/agent/modals/ticket/ticket_task_approver_add.php new file mode 100644 index 00000000..03064481 --- /dev/null +++ b/agent/modals/ticket/ticket_task_approver_add.php @@ -0,0 +1,140 @@ + + + +
+ + + + + + + +
+ + + + + +
- + - + + 0) { ?> +
+
+ Task Approvals + + + + + + + + + + + + + + + + + + + + +
ScopeTypeStatusAction
+ + + Delete + + + +
+ +
+ +