From 47a4fa78a8860a122716bbcf28abd89889cbda50 Mon Sep 17 00:00:00 2001 From: johnnyq Date: Wed, 13 Nov 2024 17:22:07 -0500 Subject: [PATCH 001/148] Updated task post to use new logAction function, tidy and added more details to logging --- post/user/task.php | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/post/user/task.php b/post/user/task.php index f5026a6d..fed74e6a 100644 --- a/post/user/task.php +++ b/post/user/task.php @@ -6,7 +6,7 @@ if (isset($_POST['add_task'])) { - validateTechRole(); + enforceUserPermission('module_support', 2); $ticket_id = intval($_POST['ticket_id']); $task_name = sanitizeInput($_POST['name']); @@ -21,7 +21,7 @@ if (isset($_POST['add_task'])) { $task_id = mysqli_insert_id($mysqli); // Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Task', log_action = 'Create', log_description = '$session_name created task $task_name', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $task_id"); + logAction("Task", "Create", "$session_name created task $task_name", $client_id, $task_id); $_SESSION['alert_message'] = "You created Task $task_name"; @@ -30,7 +30,7 @@ if (isset($_POST['add_task'])) { if (isset($_POST['edit_task'])) { - validateTechRole(); + enforceUserPermission('module_support', 2); $task_id = intval($_POST['task_id']); $task_name = sanitizeInput($_POST['name']); @@ -50,9 +50,9 @@ if (isset($_POST['edit_task'])) { } // Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Task', log_action = 'Edit', log_description = '$session_name edited task $task_name', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $task_id"); + logAction("Task", "Edit", "$session_name edited task $task_name", $client_id, $task_id); - $_SESSION['alert_message'] = "You edited Task $task_name"; + $_SESSION['alert_message'] = "Task $task_name edited"; header("Location: " . $_SERVER["HTTP_REFERER"]); } @@ -60,7 +60,7 @@ if (isset($_POST['edit_task'])) { if (isset($_GET['delete_task'])) { - validateTechRole(); + enforceUserPermission('module_support', 3); // CSRF Check validateCSRFToken($_GET['csrf_token']); @@ -76,17 +76,17 @@ if (isset($_GET['delete_task'])) { mysqli_query($mysqli, "DELETE FROM tasks WHERE task_id = $task_id"); // Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Task', log_action = 'Delete', log_description = '$session_name deleted task $task_name', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $task_id"); + logAction("Task", "Delete", "$session_name deleted task $task_name", $client_id, $task_id); $_SESSION['alert_type'] = "error"; - $_SESSION['alert_message'] = "You Deleted Task $task_name"; + $_SESSION['alert_message'] = "Task $task_name deleted"; header("Location: " . $_SERVER["HTTP_REFERER"]); } if (isset($_GET['complete_task'])) { - validateTechRole(); + enforceUserPermission('module_support', 2); $task_id = intval($_GET['complete_task']); @@ -109,16 +109,16 @@ if (isset($_GET['complete_task'])) { $ticket_reply_id = mysqli_insert_id($mysqli); // Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Task', log_action = 'Edit', log_description = '$session_name completed task $task_name', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $task_id"); + logAction("Task", "Edit", "$session_name completed task $task_name", $client_id, $task_id); - $_SESSION['alert_message'] = "You completed Task $task_name Great Job!"; + $_SESSION['alert_message'] = "Task $task_name Completed"; header("Location: " . $_SERVER["HTTP_REFERER"]); } if (isset($_GET['undo_complete_task'])) { - validateTechRole(); + enforceUserPermission('module_support', 2); $task_id = intval($_GET['undo_complete_task']); @@ -137,9 +137,10 @@ if (isset($_GET['undo_complete_task'])) { $ticket_reply_id = mysqli_insert_id($mysqli); // Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Task', log_action = 'Edit', log_description = '$session_name un-completed task $task_name', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $task_id"); + logAction("Task", "Edit", "$session_name marked task $task_name as incomplete", $client_id, $task_id); - $_SESSION['alert_message'] = "You marked Task $task_name as incomplete"; + $_SESSION['alert_message'] = "Task $task_name marked as incomplete"; header("Location: " . $_SERVER["HTTP_REFERER"]); -} \ No newline at end of file + +} From 93b5c6aab1735a6e025c3184a12f3d634cdc0137 Mon Sep 17 00:00:00 2001 From: ThaMunsta Date: Wed, 13 Nov 2024 17:25:58 -0500 Subject: [PATCH 002/148] Update guest_post.php fix hotlink on notification --- guest_post.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guest_post.php b/guest_post.php index a1cffd80..410f63dd 100644 --- a/guest_post.php +++ b/guest_post.php @@ -118,7 +118,7 @@ if (isset($_GET['add_ticket_feedback'], $_GET['url_key'])) { mysqli_query($mysqli, "UPDATE tickets SET ticket_feedback = '$feedback' WHERE ticket_id = $ticket_id AND ticket_url_key = '$url_key'"); // Notify on bad feedback if ($feedback == "Bad") { - appNotify("Feedback", "Guest rated ticket ID $ticket_id as bad"); + appNotify("Feedback", "Guest rated ticket ID $ticket_id as bad", "ticket.php?ticket_id=$ticket_id"); } $_SESSION['alert_message'] = "Feedback recorded - thank you"; From 56361c7008592ce6532dd5ef73f7357a5d8d80d9 Mon Sep 17 00:00:00 2001 From: johnnyq Date: Wed, 13 Nov 2024 17:48:24 -0500 Subject: [PATCH 003/148] Partially Updated ticket post to use new logAction function, added some ticket history updates, tidy and added more details to logging --- post/user/task.php | 1 + post/user/ticket.php | 40 +++++++++++++++++++++++++++++----------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/post/user/task.php b/post/user/task.php index fed74e6a..8f31cdd5 100644 --- a/post/user/task.php +++ b/post/user/task.php @@ -139,6 +139,7 @@ if (isset($_GET['undo_complete_task'])) { // Logging logAction("Task", "Edit", "$session_name marked task $task_name as incomplete", $client_id, $task_id); + $_SESSION['alert_type'] = "error"; $_SESSION['alert_message'] = "Task $task_name marked as incomplete"; header("Location: " . $_SERVER["HTTP_REFERER"]); diff --git a/post/user/ticket.php b/post/user/ticket.php index 1137c4bd..a126d9d3 100644 --- a/post/user/ticket.php +++ b/post/user/ticket.php @@ -77,7 +77,7 @@ if (isset($_POST['add_ticket'])) { } // Add Watchers - if (!empty($_POST['watchers'])) { + if (isset($_POST['watchers'])) { foreach ($_POST['watchers'] as $watcher) { $watcher_email = sanitizeInput($watcher); mysqli_query($mysqli, "INSERT INTO ticket_watchers SET watcher_email = '$watcher_email', watcher_ticket_id = $ticket_id"); @@ -157,11 +157,11 @@ if (isset($_POST['add_ticket'])) { customAction('ticket_create', $ticket_id); // Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Ticket', log_action = 'Create', log_description = '$session_name created ticket $config_ticket_prefix$ticket_number - $ticket_subject', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $ticket_id"); + logAction("Ticket", "Create", "$session_name created ticket $config_ticket_prefix$ticket_number - $ticket_subject", $client_id, $ticket_id); - $_SESSION['alert_message'] = "You created Ticket $ticket_subject $config_ticket_prefix$ticket_number"; + $_SESSION['alert_message'] = "Ticket $config_ticket_prefix$ticket_number created"; - header("Location: ticket.php?ticket_id=" . $ticket_id); + header("Location: ticket.php?ticket_id=$ticket_id"); } if (isset($_POST['edit_ticket'])) { @@ -183,6 +183,7 @@ if (isset($_POST['edit_ticket'])) { $project_id = intval($_POST['project']); $client_id = intval($_POST['client_id']); $ticket_number = sanitizeInput($_POST['ticket_number']); + $ticket_prefix = sanitizeInput($config_ticket_prefix); mysqli_query($mysqli, "UPDATE tickets SET ticket_category = $category, ticket_subject = '$subject', ticket_priority = '$priority', ticket_billable = $billable, ticket_details = '$details', ticket_vendor_ticket_number = '$vendor_ticket_number', ticket_contact_id = $contact_id, ticket_vendor_id = $vendor_id, ticket_location_id = $location_id, ticket_asset_id = $asset_id, ticket_project_id = $project_id WHERE ticket_id = $ticket_id"); @@ -193,7 +194,7 @@ if (isset($_POST['edit_ticket'])) { $sql = mysqli_query($mysqli, "SELECT contact_name, contact_email, ticket_prefix, ticket_number, ticket_category, ticket_subject, ticket_details, ticket_priority, ticket_status_name, ticket_created_by, ticket_assigned_to, ticket_client_id FROM tickets LEFT JOIN clients ON ticket_client_id = client_id LEFT JOIN contacts ON ticket_contact_id = contact_id - LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id + LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id WHERE ticket_id = $ticket_id AND ticket_closed_at IS NULL"); $row = mysqli_fetch_array($sql); @@ -242,10 +243,10 @@ if (isset($_POST['edit_ticket'])) { // Custom action/notif handler customAction('ticket_update', $ticket_id); - //Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Ticket', log_action = 'Modify', log_description = '$session_name modified ticket $ticket_number - $subject', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $ticket_id"); + // Logging + logAction("Ticket", "Edit", "$session_name edited ticket $ticket_prefix$ticket_number", $client_id, $ticket_id); - $_SESSION['alert_message'] = "Ticket $ticket_number updated"; + $_SESSION['alert_message'] = "Ticket $ticket_prefix$ticket_number updated"; header("Location: " . $_SERVER["HTTP_REFERER"]); } @@ -258,14 +259,31 @@ if (isset($_POST['edit_ticket_priority'])) { $priority = sanitizeInput($_POST['priority']); $client_id = intval($_POST['client_id']); + // Get ticket details + $sql = mysqli_query($mysqli, "SELECT + ticket_prefix, ticket_number ticket_priority, ticket_status_name, ticket_client_id + FROM tickets + LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id + WHERE ticket_id = $ticket_id" + ); + $row = mysqli_fetch_array($sql); + $ticket_prefix = sanitizeInput($row['ticket_prefix']); + $ticket_number = intval($row['ticket_number']); + $original_priority = sanitizeInput($row['ticket_priority']); + $ticket_status = sanitizeInput($row['ticket_status_name']); + $client_id = intval($row['ticket_client_id']); + mysqli_query($mysqli, "UPDATE tickets SET ticket_priority = '$priority' WHERE ticket_id = $ticket_id"); - //Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Ticket', log_action = 'Modify', log_description = '$session_name edited ticket priority', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $ticket_id"); + // Update Ticket History + mysqli_query($mysqli, "INSERT INTO ticket_history SET ticket_history_status = '$ticket_status', ticket_history_description = '$session_name changed priority from $original_priority to $priority', ticket_history_ticket_id = $ticket_id"); + + // Logging + logAction("Ticket", "Edit", "$session_name changed priority from $original_priority to $priority for ticket $ticket_prefix$ticket_number", $client_id, $ticket_id); customAction('ticket_update', $ticket_id); - $_SESSION['alert_message'] = "Ticket priority updated"; + $_SESSION['alert_message'] = "Priority updated $original_priority to $priority"; header("Location: " . $_SERVER["HTTP_REFERER"]); } From 52284231bb99e3862f41e5107742145d2bac6b68 Mon Sep 17 00:00:00 2001 From: johnnyq Date: Wed, 13 Nov 2024 17:56:28 -0500 Subject: [PATCH 004/148] Remove Dup Edit Priority Logic from ticket post and fix priority from > to --- post/user/ticket.php | 27 ++------------------------- 1 file changed, 2 insertions(+), 25 deletions(-) diff --git a/post/user/ticket.php b/post/user/ticket.php index a126d9d3..fc2d6368 100644 --- a/post/user/ticket.php +++ b/post/user/ticket.php @@ -261,7 +261,7 @@ if (isset($_POST['edit_ticket_priority'])) { // Get ticket details $sql = mysqli_query($mysqli, "SELECT - ticket_prefix, ticket_number ticket_priority, ticket_status_name, ticket_client_id + ticket_prefix, ticket_number, ticket_priority, ticket_status_name, ticket_client_id FROM tickets LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id WHERE ticket_id = $ticket_id" @@ -283,7 +283,7 @@ if (isset($_POST['edit_ticket_priority'])) { customAction('ticket_update', $ticket_id); - $_SESSION['alert_message'] = "Priority updated $original_priority to $priority"; + $_SESSION['alert_message'] = "Priority updated from $original_priority to $priority"; header("Location: " . $_SERVER["HTTP_REFERER"]); } @@ -517,29 +517,6 @@ if (isset($_POST['edit_ticket_vendor'])) { header("Location: " . $_SERVER["HTTP_REFERER"]); } -if (isset($_POST['edit_ticket_priority'])) { - - enforceUserPermission('module_support', 2); - - $ticket_id = intval($_POST['ticket_id']); - $priority = sanitizeInput($_POST['priority']); - $client_id = intval($_POST['client_id']); - - mysqli_query($mysqli, "UPDATE tickets SET ticket_priority = '$priority' WHERE ticket_id = $ticket_id"); - - //Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Ticket', log_action = 'Modify', log_description = '$session_name edited ticket priority', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $ticket_id"); - - // Custom action/notif handler - customAction('ticket_update', $ticket_id); - - $_SESSION['alert_message'] = "Ticket priority updated"; - - header("Location: " . $_SERVER["HTTP_REFERER"]); - - customAction('ticket_update', $ticket_id); -} - if (isset($_POST['assign_ticket'])) { enforceUserPermission('module_support', 2); From e4f618c1502a41f4fd5f20270c1d686716d0d364 Mon Sep 17 00:00:00 2001 From: johnnyq Date: Wed, 13 Nov 2024 18:46:28 -0500 Subject: [PATCH 005/148] More work on Updating ticket post to use new logAction function, added more ticket history updates, tidy and added more details to logging, lots of logic changes need to happen here --- post/user/ticket.php | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) diff --git a/post/user/ticket.php b/post/user/ticket.php index fc2d6368..9ce150d9 100644 --- a/post/user/ticket.php +++ b/post/user/ticket.php @@ -298,18 +298,36 @@ if (isset($_POST['edit_ticket_contact'])) { $ticket_number = sanitizeInput($_POST['ticket_number']); $notify = intval($_POST['contact_notify']); + // Get Original contact, and ticket details + $sql = mysqli_query($mysqli, "SELECT + contact_name, contact_email, ticket_prefix, ticket_number, ticket_status_name, ticket_client_id + FROM tickets + LEFT JOIN contacts ON ticket_contact_id = contact_id + LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id + WHERE ticket_id = $ticket_id" + ); + $row = mysqli_fetch_array($sql); + $original_contact_name = sanitizeInput($row['contact_name']); + $original_contact_email = sanitizeInput($row['contact_email']); + $ticket_prefix = sanitizeInput($row['ticket_prefix']); + $ticket_number = intval($row['ticket_number']); + $ticket_status = sanitizeInput($row['ticket_status_name']); + $client_id = intval($row['ticket_client_id']); + mysqli_query($mysqli, "UPDATE tickets SET ticket_contact_id = $contact_id WHERE ticket_id = $ticket_id"); // Notify new contact if selected if ($notify && !empty($config_smtp_host)) { - // Get contact/ticket details - $sql = mysqli_query($mysqli, "SELECT contact_name, contact_email, ticket_prefix, ticket_number, ticket_category, ticket_subject, ticket_details, ticket_priority, ticket_status_name, ticket_url_key, ticket_created_by, ticket_assigned_to, ticket_client_id FROM tickets + // Get New contact/ticket details + $sql = mysqli_query($mysqli, "SELECT contact_name, contact_email, ticket_prefix, ticket_number, ticket_category, ticket_subject, ticket_details, ticket_priority, ticket_status_name, ticket_url_key, ticket_created_by, ticket_assigned_to, ticket_client_id + FROM tickets LEFT JOIN clients ON ticket_client_id = client_id LEFT JOIN contacts ON ticket_contact_id = contact_id - LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id + LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id WHERE ticket_id = $ticket_id - AND ticket_closed_at IS NULL"); + AND ticket_closed_at IS NULL" + ); $row = mysqli_fetch_array($sql); $contact_name = sanitizeInput($row['contact_name']); @@ -332,6 +350,9 @@ if (isset($_POST['edit_ticket_contact'])) { $company_name = sanitizeInput($row['company_name']); $company_phone = sanitizeInput(formatPhoneNumber($row['company_phone'])); + $config_ticket_from_email = sanitizeInput($config_ticket_from_email); + $config_ticket_from_name = sanitizeInput($config_ticket_from_name); + // Email content $data = []; // Queue array @@ -357,10 +378,13 @@ if (isset($_POST['edit_ticket_contact'])) { // Custom action/notif handler customAction('ticket_update', $ticket_id); - //Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Ticket', log_action = 'Modify', log_description = '$session_name changed contact for ticket $ticket_number', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $ticket_id"); + // Update Ticket History + mysqli_query($mysqli, "INSERT INTO ticket_history SET ticket_history_status = '$ticket_status', ticket_history_description = '$session_name changed the contact from $original_contact_name to $contact_name', ticket_history_ticket_id = $ticket_id"); - $_SESSION['alert_message'] = "Ticket $ticket_number contact updated"; + // Logging + logAction("Ticket", "Edit", "$session_name changed the contact from $original_contact_name to $contact_name for ticket $ticket_prefix$ticket_number", $client_id, $ticket_id); + + $_SESSION['alert_message'] = "Contact changed from $original_contact_name to $contact_name"; header("Location: " . $_SERVER["HTTP_REFERER"]); } @@ -428,8 +452,8 @@ if (isset($_POST['add_ticket_watcher'])) { addToMailQueue($mysqli, $data); } - //Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Ticket', log_action = 'Edit', log_description = '$session_name added watcher $watcher_email to ticket $ticket_number', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $client_id, log_user_id = $session_user_id, log_entity_id = $ticket_id"); + // Logging + logAction("Ticket", "Edit", "$session_name added $watcher_email as a watcher for ticket $ticket_prefix$ticket_number", $client_id, $ticket_id); $_SESSION['alert_message'] = "You added $watcher_email as a watcher to Ticket $ticket_number"; From fc94d7179598d64f730bdab57af753b567134522 Mon Sep 17 00:00:00 2001 From: wrongecho Date: Thu, 14 Nov 2024 08:08:52 +0000 Subject: [PATCH 006/148] Fix typo in ticket archived logging --- post/user/ticket.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/post/user/ticket.php b/post/user/ticket.php index 9ce150d9..2edb75f6 100644 --- a/post/user/ticket.php +++ b/post/user/ticket.php @@ -1490,7 +1490,7 @@ if (isset($_GET['archive_ticket_reply'])) { mysqli_query($mysqli, "UPDATE ticket_replies SET ticket_reply_archived_at = NOW() WHERE ticket_reply_id = $ticket_reply_id"); //Logging - mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Ticket Reply', log_action = 'Archive', log_description = '$session_name arhived ticket reply', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_user_id = $session_user_id, log_entity_id = $ticket_reply_id"); + mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Ticket Reply', log_action = 'Archive', log_description = '$session_name archived ticket reply', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_user_id = $session_user_id, log_entity_id = $ticket_reply_id"); $_SESSION['alert_type'] = "error"; $_SESSION['alert_message'] = "Ticket reply archived"; From 9fe9d8e9ff4485bb81319b45f9f69527b68787ed Mon Sep 17 00:00:00 2001 From: wrongecho Date: Thu, 14 Nov 2024 08:44:08 +0000 Subject: [PATCH 007/148] Clarify notes on debug --- admin_debug.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/admin_debug.php b/admin_debug.php index fc6d659a..1e200bf5 100644 --- a/admin_debug.php +++ b/admin_debug.php @@ -1,4 +1,5 @@ close();

Debugging

    -
  • If you are experiencing a problem with ITFlow you may be directed to this page to gather server/app info.
  • -
  • When creating forum posts / support requests ensure you share the information under Server Info, ITFlow app and Database stats.
  • -
  • Caution: Be careful when sharing the full debug output - it contains your PHP session variables/cookies ("PHPSESSID") which could allow anyone to login to your ITFlow instance
  • -
  • Note: Sometimes you might need to gather PHP error logs as well
  • +
  • If you are experiencing a problem with ITFlow, this page should help you identify any configuration issues.
  • +
  • Note: You might also need to gather error logs

From 28a0343a972a6ca4796a59840f9388a8b0430fd5 Mon Sep 17 00:00:00 2001 From: wrongecho Date: Thu, 14 Nov 2024 11:23:28 +0000 Subject: [PATCH 008/148] Quote notifications - Send an internal email when quotes are accepted/declined - Clients are prompted to confirm accept/decline with confirm-link - Tidy --- admin_settings_quote.php | 10 ++++ database_updates.php | 12 +++-- database_version.php | 2 +- db.sql | 1 + get_settings.php | 1 + guest_footer.php | 3 ++ guest_post.php | 73 +++++++++++++++++++++++++++-- guest_view_quote.php | 6 +-- post/admin/admin_settings_quote.php | 6 ++- 9 files changed, 102 insertions(+), 12 deletions(-) diff --git a/admin_settings_quote.php b/admin_settings_quote.php index ea3c2763..9473c7fb 100644 --- a/admin_settings_quote.php +++ b/admin_settings_quote.php @@ -35,6 +35,16 @@ require_once "inc_all_admin.php"; +
+ +
+
+ +
+ +
+
+
diff --git a/database_updates.php b/database_updates.php index 4751fe7b..c9485e49 100644 --- a/database_updates.php +++ b/database_updates.php @@ -2232,10 +2232,16 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '1.6.5'"); } - // if (CURRENT_DATABASE_VERSION == '1.6.5') { - // // Insert queries here required to update to DB version 1.6.6 + if (CURRENT_DATABASE_VERSION == '1.6.5') { + mysqli_query($mysqli, "ALTER TABLE `settings` ADD `config_quote_notification_email` VARCHAR(200) DEFAULT NULL AFTER `config_quote_from_email`"); + + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '1.6.6'"); + } + + // if (CURRENT_DATABASE_VERSION == '1.6.6') { + // // Insert queries here required to update to DB version 1.6.7 // // Then, update the database to the next sequential version - // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '1.6.6'"); + // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '1.6.7'"); // } } else { diff --git a/database_version.php b/database_version.php index 856c9189..d8b464c4 100644 --- a/database_version.php +++ b/database_version.php @@ -5,4 +5,4 @@ * It is used in conjunction with database_updates.php */ -DEFINE("LATEST_DATABASE_VERSION", "1.6.5"); +DEFINE("LATEST_DATABASE_VERSION", "1.6.6"); diff --git a/db.sql b/db.sql index 223a8662..b6706f94 100644 --- a/db.sql +++ b/db.sql @@ -1517,6 +1517,7 @@ CREATE TABLE `settings` ( `config_quote_footer` text DEFAULT NULL, `config_quote_from_name` varchar(200) DEFAULT NULL, `config_quote_from_email` varchar(200) DEFAULT NULL, + `config_quote_notification_email` varchar(200) DEFAULT NULL, `config_ticket_prefix` varchar(200) DEFAULT NULL, `config_ticket_next_number` int(11) DEFAULT NULL, `config_ticket_from_name` varchar(200) DEFAULT NULL, diff --git a/get_settings.php b/get_settings.php index 40f4cd35..b74f7a66 100644 --- a/get_settings.php +++ b/get_settings.php @@ -58,6 +58,7 @@ $config_quote_next_number = intval($row['config_quote_next_number']); $config_quote_footer = $row['config_quote_footer']; $config_quote_from_name = $row['config_quote_from_name']; $config_quote_from_email = $row['config_quote_from_email']; +$config_quote_notification_email = $row['config_quote_notification_email']; // Projects $config_project_prefix = $row['config_project_prefix']; diff --git a/guest_footer.php b/guest_footer.php index c11e4c88..c6e94e3c 100644 --- a/guest_footer.php +++ b/guest_footer.php @@ -7,6 +7,7 @@ + @@ -23,5 +24,7 @@ + + diff --git a/guest_post.php b/guest_post.php index 410f63dd..b2fd9ac7 100644 --- a/guest_post.php +++ b/guest_post.php @@ -23,11 +23,44 @@ if (isset($_GET['accept_quote'], $_GET['url_key'])) { mysqli_query($mysqli, "UPDATE quotes SET quote_status = 'Accepted' WHERE quote_id = $quote_id"); mysqli_query($mysqli, "INSERT INTO history SET history_status = 'Accepted', history_description = 'Client accepted Quote!', history_quote_id = $quote_id"); + // Notification appNotify("Quote Accepted", "Quote $quote_prefix$quote_number has been accepted by $client_name", "quote.php?quote_id=$quote_id", $client_id); - - customAction('quote_accept', $quote_id); + + // Internal email notification + + $sql_company = mysqli_query($mysqli, "SELECT company_name FROM companies WHERE company_id = 1"); + $row = mysqli_fetch_array($sql_company); + $company_name = sanitizeInput($row['company_name']); + + $sql_settings = mysqli_query($mysqli, "SELECT * FROM settings WHERE company_id = 1"); + $row = mysqli_fetch_array($sql_settings); + $config_smtp_host = $row['config_smtp_host']; + $config_smtp_port = intval($row['config_smtp_port']); + $config_smtp_encryption = $row['config_smtp_encryption']; + $config_smtp_username = $row['config_smtp_username']; + $config_smtp_password = $row['config_smtp_password']; + $config_quote_from_name = sanitizeInput($row['config_quote_from_name']); + $config_quote_from_email = sanitizeInput($row['config_quote_from_email']); + $config_quote_notification_email = sanitizeInput($row['config_quote_notification_email']); + $config_base_url = sanitizeInput($config_base_url); + + if (!empty($config_smtp_host) && !empty($config_quote_notification_email)) { + $subject = "Quote Accepted - $client_name - Quote $quote_prefix$quote_number"; + $body = "Hello,

This is a notification that a quote has been accepted in ITFlow.

Client: $client_name
Quote: $quote_prefix$quote_number

~
$company_name - Billing
$config_quote_from_email"; + + $data[] = [ + 'from' => $config_quote_from_email, + 'from_name' => $config_quote_from_name, + 'recipient' => $config_quote_notification_email, + 'subject' => $subject, + 'body' => $body, + ]; + + $mail = addToMailQueue($mysqli, $data); + } + $_SESSION['alert_message'] = "Quote Accepted"; header("Location: " . $_SERVER["HTTP_REFERER"]); } else { @@ -51,10 +84,44 @@ if (isset($_GET['decline_quote'], $_GET['url_key'])) { mysqli_query($mysqli, "UPDATE quotes SET quote_status = 'Declined' WHERE quote_id = $quote_id"); mysqli_query($mysqli, "INSERT INTO history SET history_status = 'Declined', history_description = 'Client declined Quote!', history_quote_id = $quote_id"); + // Notification appNotify("Quote Declined", "Quote $quote_prefix$quote_number has been declined by $client_name", "quote.php?quote_id=$quote_id", $client_id); - customAction('quote_decline', $quote_id); + + // Internal email notification + + $sql_company = mysqli_query($mysqli, "SELECT company_name FROM companies WHERE company_id = 1"); + $row = mysqli_fetch_array($sql_company); + $company_name = sanitizeInput($row['company_name']); + + $sql_settings = mysqli_query($mysqli, "SELECT * FROM settings WHERE company_id = 1"); + $row = mysqli_fetch_array($sql_settings); + $config_smtp_host = $row['config_smtp_host']; + $config_smtp_port = intval($row['config_smtp_port']); + $config_smtp_encryption = $row['config_smtp_encryption']; + $config_smtp_username = $row['config_smtp_username']; + $config_smtp_password = $row['config_smtp_password']; + $config_quote_from_name = sanitizeInput($row['config_quote_from_name']); + $config_quote_from_email = sanitizeInput($row['config_quote_from_email']); + $config_quote_notification_email = sanitizeInput($row['config_quote_notification_email']); + $config_base_url = sanitizeInput($config_base_url); + + if (!empty($config_smtp_host) && !empty($config_quote_notification_email)) { + $subject = "Quote Declined - $client_name - Quote $quote_prefix$quote_number"; + $body = "Hello,

This is a notification that a quote has been declined in ITFlow.

Client: $client_name
Quote: $quote_prefix$quote_number

~
$company_name - Billing
$config_quote_from_email"; + + $data[] = [ + 'from' => $config_quote_from_email, + 'from_name' => $config_quote_from_name, + 'recipient' => $config_quote_notification_email, + 'subject' => $subject, + 'body' => $body, + ]; + + $mail = addToMailQueue($mysqli, $data); + } + $_SESSION['alert_type'] = "danger"; $_SESSION['alert_message'] = "Quote Declined"; header("Location: " . $_SERVER["HTTP_REFERER"]); diff --git a/guest_view_quote.php b/guest_view_quote.php index 2996c1bd..b909b79a 100644 --- a/guest_view_quote.php +++ b/guest_view_quote.php @@ -44,7 +44,6 @@ $quote_discount = floatval($row['quote_discount_amount']); $quote_amount = floatval($row['quote_amount']); $quote_currency_code = nullable_htmlentities($row['quote_currency_code']); $quote_note = nullable_htmlentities($row['quote_note']); -$category_id = intval($row['category_id']); $client_id = intval($row['client_id']); $client_name = nullable_htmlentities($row['client_name']); $client_name_escaped = sanitizeInput($row['client_name']); @@ -273,10 +272,10 @@ if ($quote_status == "Draft" || $quote_status == "Sent" || $quote_status == "Vie strtotime("now")) { ?> - + Accept - + Decline @@ -712,7 +711,6 @@ if ($quote_status == "Draft" || $quote_status == "Sent" || $quote_status == "Vie } - Date: Thu, 14 Nov 2024 11:51:39 +0000 Subject: [PATCH 009/148] Import CSV - Check file uploaded Check the file was uploaded when importing a CSV. Can probably convert this into a function at a later date. --- client_asset_import_modal.php | 2 +- client_contact_import_modal.php | 2 +- client_import_modal.php | 3 +-- client_location_import_modal.php | 2 +- client_login_import_modal.php | 2 +- post/user/asset.php | 10 ++++++++++ post/user/client.php | 13 ++++++++++--- post/user/contact.php | 10 +++++++++- post/user/credential.php | 10 +++++++++- post/user/location.php | 10 +++++++++- 10 files changed, 52 insertions(+), 12 deletions(-) diff --git a/client_asset_import_modal.php b/client_asset_import_modal.php index 583bf346..cc10bd7b 100644 --- a/client_asset_import_modal.php +++ b/client_asset_import_modal.php @@ -14,7 +14,7 @@

Format csv file with headings & data:
Name, Description, Type, Make, Model, Serial, OS, Assigned To, Location


- +

diff --git a/client_contact_import_modal.php b/client_contact_import_modal.php index a7c02bfd..bc567b60 100644 --- a/client_contact_import_modal.php +++ b/client_contact_import_modal.php @@ -13,7 +13,7 @@

Format csv file with headings & data:
Name, Title, Department, Email, Phone, Extension, Mobile, Location


- +

diff --git a/client_import_modal.php b/client_import_modal.php index eb447ebe..e6d9eacd 100644 --- a/client_import_modal.php +++ b/client_import_modal.php @@ -8,12 +8,11 @@
-