From bd31513e5db8ef82c98a13f74af38ccf7139fe48 Mon Sep 17 00:00:00 2001 From: Marcus Hill Date: Sun, 22 Jun 2025 09:59:23 +0100 Subject: [PATCH 001/244] Add db fields for ticket_quote --- database_updates.php | 32 ++++++++++++++++++-------------- db.sql | 3 ++- includes/database_version.php | 2 +- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/database_updates.php b/database_updates.php index 33bf60a3..dc8374b0 100644 --- a/database_updates.php +++ b/database_updates.php @@ -2776,7 +2776,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { //Dropping patch panel as a patch panel can be documented as an asset with interfaces. mysqli_query($mysqli, "DROP TABLE `patch_panel_ports`"); mysqli_query($mysqli, "DROP TABLE `patch_panels`"); - + mysqli_query($mysqli, "RENAME TABLE `events` TO `calendar_events`"); mysqli_query($mysqli, "RENAME TABLE `event_attendees` TO `calendar_event_attendees`"); @@ -2957,7 +2957,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { ALTER TABLE `calendar_events` ADD FOREIGN KEY (`event_calendar_id`) REFERENCES `calendars`(`calendar_id`) ON DELETE CASCADE "); - + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.3'"); } @@ -2974,7 +2974,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { ALTER TABLE `certificate_history` ADD FOREIGN KEY (`certificate_history_certificate_id`) REFERENCES `certificates`(`certificate_id`) ON DELETE CASCADE "); - + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.4'"); } @@ -3335,14 +3335,14 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { ADD FOREIGN KEY (`vendor_id`) REFERENCES `vendors`(`vendor_id`) ON DELETE CASCADE, ADD FOREIGN KEY (`file_id`) REFERENCES `files`(`file_id`) ON DELETE CASCADE "); - + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.5'"); } if (CURRENT_DATABASE_VERSION == '2.0.5') { // CONVERT All tables TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci - + $tables = [ 'accounts', 'api_keys', 'app_logs', 'asset_credentials', 'asset_custom', 'asset_documents', 'asset_files', 'asset_history', 'asset_interface_links', 'asset_interfaces', 'asset_notes', 'assets', @@ -3381,14 +3381,14 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { } if (CURRENT_DATABASE_VERSION == '2.0.7') { - + mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_hash`"); mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.0.8'"); } if (CURRENT_DATABASE_VERSION == '2.0.8') { - + mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_has_thumbnail`"); mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_has_preview`"); mysqli_query($mysqli, "ALTER TABLE `files` DROP `file_asset_id`"); @@ -3397,7 +3397,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { } if (CURRENT_DATABASE_VERSION == '2.0.9') { - + mysqli_query($mysqli, "ALTER TABLE `contacts` ADD `contact_phone_country_code` VARCHAR(10) DEFAULT 1 AFTER `contact_email`"); mysqli_query($mysqli, "ALTER TABLE `contacts` ADD `contact_mobile_country_code` VARCHAR(10) DEFAULT 1 AFTER `contact_extension`"); @@ -3425,7 +3425,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { } if (CURRENT_DATABASE_VERSION == '2.1.2') { - + // Update country_code to NULL for `contacts` table mysqli_query($mysqli, "ALTER TABLE `contacts` MODIFY `contact_phone_country_code` VARCHAR(10) DEFAULT NULL"); mysqli_query($mysqli, "ALTER TABLE `contacts` MODIFY `contact_mobile_country_code` VARCHAR(10) DEFAULT NULL"); @@ -3460,7 +3460,7 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { if (CURRENT_DATABASE_VERSION == '2.1.3') { mysqli_query($mysqli, "ALTER TABLE `client_stripe` ADD `stripe_pm_details` VARCHAR(200) DEFAULT NULL AFTER `stripe_pm`"); mysqli_query($mysqli, "ALTER TABLE `client_stripe` ADD `stripe_pm_created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP AFTER `stripe_pm_details`"); - + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.1.4'"); } @@ -3675,13 +3675,17 @@ if (LATEST_DATABASE_VERSION > CURRENT_DATABASE_VERSION) { mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.0'"); } - // if (CURRENT_DATABASE_VERSION == '2.2.0') { - // // Insert queries here required to update to DB version 2.2.1 + if (CURRENT_DATABASE_VERSION == '2.2.0') { + mysqli_query($mysqli, "ALTER TABLE `tickets` ADD `ticket_quote_id` INT(11) NOT NULL DEFAULT 0 AFTER `ticket_asset_id`"); + mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.1'"); + } + + // if (CURRENT_DATABASE_VERSION == '2.2.1') { + // // Insert queries here required to update to DB version 2.2.2 // // Then, update the database to the next sequential version - // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.1'"); + // mysqli_query($mysqli, "UPDATE `settings` SET `config_current_database_version` = '2.2.2'"); // } } else { // Up-to-date } - \ No newline at end of file diff --git a/db.sql b/db.sql index 651117df..d02d3ea2 100644 --- a/db.sql +++ b/db.sql @@ -1,4 +1,4 @@ -/*M!999999\- enable the sandbox mode */ +/*M!999999\- enable the sandbox mode */ -- MariaDB dump 10.19 Distrib 10.11.11-MariaDB, for debian-linux-gnu (x86_64) -- -- Host: localhost Database: itflow_dev @@ -2318,6 +2318,7 @@ CREATE TABLE `tickets` ( `ticket_contact_id` int(11) NOT NULL DEFAULT 0, `ticket_location_id` int(11) NOT NULL DEFAULT 0, `ticket_asset_id` int(11) NOT NULL DEFAULT 0, + `ticket_quote_id` int(11) NOT NULL DEFAULT 0, `ticket_invoice_id` int(11) NOT NULL DEFAULT 0, `ticket_project_id` int(11) NOT NULL DEFAULT 0, `ticket_recurring_ticket_id` int(11) DEFAULT 0, diff --git a/includes/database_version.php b/includes/database_version.php index 19e5f1d6..5ade9c63 100644 --- a/includes/database_version.php +++ b/includes/database_version.php @@ -5,4 +5,4 @@ * It is used in conjunction with database_updates.php */ -DEFINE("LATEST_DATABASE_VERSION", "2.2.0"); +DEFINE("LATEST_DATABASE_VERSION", "2.2.1"); From 2ca50776ec2aa5af0272d3835af3a48ace5faed2 Mon Sep 17 00:00:00 2001 From: Marcus Hill Date: Sun, 22 Jun 2025 10:00:53 +0100 Subject: [PATCH 002/244] Ticket - Move ticket metadata/details into their own card (source, category, time, closure details, etc) - Start adding support for ticket_quote --- ticket.php | 213 +++++++++++++++++++++++++++++++++++------------------ 1 file changed, 142 insertions(+), 71 deletions(-) diff --git a/ticket.php b/ticket.php index b2b56e99..df7bfba3 100644 --- a/ticket.php +++ b/ticket.php @@ -34,6 +34,7 @@ if (isset($_GET['ticket_id'])) { LEFT JOIN asset_interfaces ON interface_asset_id = asset_id AND interface_primary = 1 LEFT JOIN vendors ON ticket_vendor_id = vendor_id LEFT JOIN projects ON ticket_project_id = project_id + LEFT JOIN quotes ON ticket_quote_id = quote_id LEFT JOIN invoices ON ticket_invoice_id = invoice_id LEFT JOIN ticket_statuses ON ticket_status = ticket_status_id LEFT JOIN categories ON ticket_category = category_id @@ -104,13 +105,15 @@ if (isset($_GET['ticket_id'])) { $ticket_updated_at_ago = timeAgo($row['ticket_updated_at']); $ticket_resolved_at = nullable_htmlentities($row['ticket_resolved_at']); $ticket_resolved_at_ago = timeAgo($row['ticket_resolved_at']); + $ticket_resolved_date = date('Y-m-d', strtotime($ticket_resolved_at)); $ticket_closed_at = nullable_htmlentities($row['ticket_closed_at']); $ticket_closed_at_ago = timeAgo($row['ticket_closed_at']); + $ticket_closed_date = date('Y-m-d', strtotime($ticket_closed_at)); $ticket_closed_by = intval($row['ticket_closed_by']); $ticket_assigned_to = intval($row['ticket_assigned_to']); if (empty($ticket_assigned_to)) { - $ticket_assigned_to_display = "Not Assigned"; + $ticket_assigned_to_display = "Not Assigned"; } else { $ticket_assigned_to_display = nullable_htmlentities($row['user_name']); } @@ -163,6 +166,11 @@ if (isset($_GET['ticket_id'])) { $location_zip = nullable_htmlentities($row['location_zip']); $location_phone = formatPhoneNumber($row['location_phone']); + $quote_id = intval($row['ticket_quote_id']); + $quote_prefix = nullable_htmlentities($row['quote_prefix']); + $quote_number = intval($row['quote_number']); + $quote_created_at = nullable_htmlentities($row['quote_created_at']); + $invoice_id = intval($row['ticket_invoice_id']); $invoice_prefix = nullable_htmlentities($row['invoice_prefix']); $invoice_number = intval($row['invoice_number']); @@ -181,7 +189,7 @@ if (isset($_GET['ticket_id'])) { $row = mysqli_fetch_array($sql_project_manager); $project_manager_name = nullable_htmlentities($row['user_name']); } - + if ($contact_id) { //Get Contact Ticket Stats $ticket_related_open = mysqli_query($mysqli, "SELECT COUNT(ticket_id) AS ticket_related_open FROM tickets WHERE ticket_status != 'Closed' AND ticket_contact_id = $contact_id "); @@ -472,39 +480,12 @@ if (isset($_GET['ticket_id'])) {
-
- -
Updated:
- - -
- Closed by: -
-
- Closed at: -
-
- -
- -
- Feedback: -
- - + + + +
+ +
- + +
@@ -530,21 +516,29 @@ if (isset($_GET['ticket_id'])) {
- + + +
Scheduled:
- + - // Billable - if ($config_module_enable_accounting) { ?> - = 1) { ?> + + = 1) { ?> + +
- Invoiced: + Quoted:
- = 1) { ?> + + + +
+ Invoiced: +
+
Ticket is
- - + + + + +
- Tasks Completed% + Tasks Completed + %
/
- -
- Total time worked: -
- - - -
- -
- - - 0) { ?> -
- -
- -
@@ -660,7 +638,7 @@ if (isset($_GET['ticket_id'])) {
- +
+ +
+ +
+
+ +
+
+ +
+ +
+
+
+ +
+
+ +
+
+ +
+ +
+ +
+
+
+
+ +
+ +
+ +
+
+ +
+ +
+
+ + +
+
+ value="1" id="billable"> + +
+
+ + + + + + +
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ + +
+ To-do: project, etc. + +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+
+ +
+ +
+
+
+ +
+
+ +
+
+ +
+ +
+
+
+ +
+ +
+ + + + + + + + + + + + + + + + + + + + diff --git a/tickets.php b/tickets.php index f8cd8bb7..89429b1a 100644 --- a/tickets.php +++ b/tickets.php @@ -166,7 +166,7 @@ $sql_categories = mysqli_query( = 2) { ?>
- 0) { ?> @@ -438,6 +438,6 @@ if (isset($_GET["view"])) { Date: Mon, 30 Jun 2025 14:41:12 +0200 Subject: [PATCH 031/244] - Enhanced the document retrieval process by including the document description in the SQL query. - Implemented file upload capabilities, allowing users to attach files to documents with support for various formats (PDF, Word, text). - Created modals for adding new documents and uploading files, improving user experience. - Added functions for formatting file sizes and retrieving appropriate icons based on file extensions. - Updated the document display logic to handle attached files, providing inline previews for PDFs and images. --- client/document.php | 144 +++++++++++++++++++++++++++++++++++++++++-- client/documents.php | 127 +++++++++++++++++++++++++++++++++++--- client/functions.php | 45 ++++++++++++++ client/post.php | 129 +++++++++++++++++++++++++++++++++++++- 4 files changed, 431 insertions(+), 14 deletions(-) diff --git a/client/document.php b/client/document.php index 6628eaf6..6fe2eb75 100644 --- a/client/document.php +++ b/client/document.php @@ -29,7 +29,7 @@ if (!isset($_GET['id']) && !intval($_GET['id'])) { $document_id = intval($_GET['id']); $sql_document = mysqli_query($mysqli, - "SELECT document_id, document_name, document_content + "SELECT document_id, document_name, document_content, document_description FROM documents WHERE document_id = $document_id AND document_client_visible = 1 AND document_client_id = $session_client_id AND document_template = 0 AND document_archived_at IS NULL LIMIT 1" @@ -41,11 +41,21 @@ if ($row) { $document_id = intval($row['document_id']); $document_name = nullable_htmlentities($row['document_name']); $document_content = $purifier->purify($row['document_content']); + $document_description = nullable_htmlentities($row['document_description']); } else { header("Location: post.php?logout"); exit(); } +// Check for associated files +$sql_files = mysqli_query($mysqli, + "SELECT f.file_id, f.file_name, f.file_reference_name, f.file_ext, f.file_size, f.file_mime_type + FROM files f + INNER JOIN document_files df ON f.file_id = df.file_id + WHERE df.document_id = $document_id AND f.file_client_id = $session_client_id + ORDER BY f.file_name ASC" +); + ?> -
-
-

- + 0) { + $file_row = mysqli_fetch_array($sql_files); + $file_id = intval($file_row['file_id']); + $file_name = nullable_htmlentities($file_row['file_name']); + $file_reference_name = nullable_htmlentities($file_row['file_reference_name']); + $file_ext = strtolower($file_row['file_ext']); + $file_size = intval($file_row['file_size']); + $file_mime_type = nullable_htmlentities($file_row['file_mime_type']); + $file_size_formatted = formatBytes($file_size); + + $file_path = "../uploads/clients/$session_client_id/$file_reference_name"; + + // For PDF files, display them inline + if ($file_ext == 'pdf') { + ?> +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ <?php echo $file_name; ?> +
+
+ +
+
+
+
+

+ + + +
+ +
+
+
+
+
+ +
+
+
+

+ Type: File
+ Size: +

+ Uploaded file: $file_name

$document_description

") { ?> +
+ +
+ +
+
+
+
+ +
+
+

+ +
-
+ -

Documents

+
+

Documents

+
+
+
+ + +
+
+
-
- - +
+
+
+ @@ -40,7 +54,9 @@ $documents_sql = mysqli_query($mysqli, "SELECT document_id, document_name, docum ?> - - + +
Name CreatedActions
+ + + + + + +
-
+
+ + + + + 1024 && $i < count($units) - 1; $i++) { + $bytes /= 1024; + } + + return round($bytes, $precision) . ' ' . $units[$i]; +} diff --git a/client/post.php b/client/post.php index 03ec1773..6edaa09d 100644 --- a/client/post.php +++ b/client/post.php @@ -629,7 +629,7 @@ if (isset($_GET['stripe_save_card'])) { if (!empty($config_smtp_host)) { $subject = "Payment method saved"; - $body = "Hello $session_contact_name,

We’re writing to confirm that your payment details have been securely stored with Stripe, our trusted payment processor.

By agreeing to save your payment information, you have authorized us to automatically bill your card ($stripe_pm_details) for any future invoices. The payment details you’ve provided are securely stored with Stripe and will be used solely for invoices. We do not have access to your full card details.

You may update or remove your payment information at any time using the portal.

Thank you for your business!

--
$company_name - Billing Department
$config_invoice_from_email
$company_phone"; + $body = "Hello $session_contact_name,

We're writing to confirm that your payment details have been securely stored with Stripe, our trusted payment processor.

By agreeing to save your payment information, you have authorized us to automatically bill your card ($stripe_pm_details) for any future invoices. The payment details you've provided are securely stored with Stripe and will be used solely for invoices. We do not have access to your full card details.

You may update or remove your payment information at any time using the portal.

Thank you for your business!

--
$company_name - Billing Department
$config_invoice_from_email
$company_phone"; $data = [ [ @@ -750,3 +750,130 @@ if (isset($_POST['delete_recurring_payment'])) { header("Location: " . $_SERVER["HTTP_REFERER"]); } + +if (isset($_POST['client_add_document'])) { + + // Permission check - only primary or technical contacts can create documents + if ($session_contact_primary == 0 && !$session_contact_is_technical_contact) { + header("Location: post.php?logout"); + exit(); + } + + $document_name = sanitizeInput($_POST['document_name']); + $document_description = sanitizeInput($_POST['document_description']); + $document_content = mysqli_real_escape_string($mysqli, $_POST['document_content']); + $document_content_raw = sanitizeInput($document_name . " " . strip_tags($_POST['document_content'])); + + // Create document + mysqli_query($mysqli, "INSERT INTO documents SET + document_name = '$document_name', + document_description = '$document_description', + document_content = '$document_content', + document_content_raw = '$document_content_raw', + document_client_visible = 1, + document_client_id = $session_client_id, + document_created_by = $session_contact_id"); + + $document_id = mysqli_insert_id($mysqli); + + // Logging + logAction("Document", "Create", "Client contact $session_contact_name created document $document_name", $session_client_id, $document_id); + + $_SESSION['alert_message'] = "Document $document_name created successfully"; + + header('Location: documents.php'); +} + +if (isset($_POST['client_upload_document'])) { + + // Permission check - only primary or technical contacts can upload documents + if ($session_contact_primary == 0 && !$session_contact_is_technical_contact) { + header("Location: post.php?logout"); + exit(); + } + + $document_name = sanitizeInput($_POST['document_name']); + $document_description = sanitizeInput($_POST['document_description']); + $client_dir = "../uploads/clients/$session_client_id"; + + // Create client directory if it doesn't exist + if (!is_dir($client_dir)) { + mkdir($client_dir, 0755, true); + } + + // Allowed file extensions for documents + $allowedExtensions = ['pdf', 'doc', 'docx', 'txt', 'md', 'odt', 'rtf']; + + // Check if file was uploaded + if (isset($_FILES['document_file']) && $_FILES['document_file']['error'] == 0) { + + // Validate and get a safe file reference name + if ($file_reference_name = checkFileUpload($_FILES['document_file'], $allowedExtensions)) { + + $file_tmp_path = $_FILES['document_file']['tmp_name']; + $file_name = sanitizeInput($_FILES['document_file']['name']); + $extParts = explode('.', $file_name); + $file_extension = strtolower(end($extParts)); + $file_mime_type = sanitizeInput($_FILES['document_file']['type']); + $file_size = intval($_FILES['document_file']['size']); + + // Define destination path and move the uploaded file + $dest_path = $client_dir . "/" . $file_reference_name; + + if (move_uploaded_file($file_tmp_path, $dest_path)) { + + // Create document entry + $document_content = "

Uploaded file: $file_name

$document_description

"; + $document_content_raw = "$document_name $file_name $document_description"; + + mysqli_query($mysqli, "INSERT INTO documents SET + document_name = '$document_name', + document_description = '$document_description', + document_content = '$document_content', + document_content_raw = '$document_content_raw', + document_client_visible = 1, + document_client_id = $session_client_id, + document_created_by = $session_contact_id"); + + $document_id = mysqli_insert_id($mysqli); + + // Create file entry + mysqli_query($mysqli, "INSERT INTO files SET + file_reference_name = '$file_reference_name', + file_name = '$file_name', + file_description = 'Attached to document: $document_name', + file_ext = '$file_extension', + file_mime_type = '$file_mime_type', + file_size = $file_size, + file_created_by = $session_contact_id, + file_client_id = $session_client_id"); + + $file_id = mysqli_insert_id($mysqli); + + // Link file to document + mysqli_query($mysqli, "INSERT INTO document_files SET document_id = $document_id, file_id = $file_id"); + + // Logging + logAction("Document", "Upload", "Client contact $session_contact_name uploaded document $document_name with file $file_name", $session_client_id, $document_id); + + $_SESSION['alert_message'] = "Document $document_name uploaded successfully"; + + } else { + $_SESSION['alert_type'] = 'error'; + $_SESSION['alert_message'] = 'Error uploading file. Please try again.'; + } + + } else { + $_SESSION['alert_type'] = 'error'; + $_SESSION['alert_message'] = 'Invalid file type. Please upload PDF, Word documents, or text files only.'; + } + + } else { + $_SESSION['alert_type'] = 'error'; + $_SESSION['alert_message'] = 'Please select a file to upload.'; + } + + header('Location: documents.php'); +} + +?> From effbf241e64fb7a0144b28d0a5645c196de55c86 Mon Sep 17 00:00:00 2001 From: wrongecho Date: Tue, 1 Jul 2025 10:51:56 +0100 Subject: [PATCH 032/244] Fix default rate and net terms if not provided in api call --- api/v1/clients/client_model.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/v1/clients/client_model.php b/api/v1/clients/client_model.php index a5b9759d..b9e9a6e9 100644 --- a/api/v1/clients/client_model.php +++ b/api/v1/clients/client_model.php @@ -39,7 +39,7 @@ if (isset($_POST['client_rate'])) { } elseif ($client_row) { $rate = $client_row['client_rate']; } else { - $rate = ''; + $rate = 0; } if (isset($_POST['client_currency_code'])) { @@ -55,7 +55,7 @@ if (isset($_POST['client_net_terms'])) { } elseif ($client_row) { $net_terms = $client_row['client_net_terms']; } else { - $net_terms = ''; + $net_terms = 0; } if (isset($_POST['client_tax_id_number'])) { From 873dc1f76d455ae1b1ef865d7dfce8ea0559a081 Mon Sep 17 00:00:00 2001 From: wrongecho Date: Tue, 1 Jul 2025 11:50:20 +0100 Subject: [PATCH 033/244] Fix contact location if not provided in api call --- api/v1/contacts/contact_model.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/v1/contacts/contact_model.php b/api/v1/contacts/contact_model.php index cd909b34..dbac6bda 100644 --- a/api/v1/contacts/contact_model.php +++ b/api/v1/contacts/contact_model.php @@ -103,5 +103,5 @@ if (isset($_POST['contact_location_id'])) { } elseif ($contact_row) { $location_id = $contact_row['contact_location_id']; } else { - $location_id = ''; + $location_id = '0'; } From 8753655c9ceeba9399d6b03cb63e1e59410f29ae Mon Sep 17 00:00:00 2001 From: johnnyq Date: Thu, 3 Jul 2025 14:18:14 -0400 Subject: [PATCH 034/244] Do not allow client portal logins with Contact users of a client that is archived --- client/login.php | 2 +- client/login_microsoft.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/login.php b/client/login.php index e69c6234..09f15a16 100644 --- a/client/login.php +++ b/client/login.php @@ -57,7 +57,7 @@ if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['login'])) { } else { - $sql = mysqli_query($mysqli, "SELECT * FROM users LEFT JOIN contacts ON user_id = contact_user_id WHERE user_email = '$email' AND user_archived_at IS NULL AND user_type = 2 AND user_status = 1 LIMIT 1"); + $sql = mysqli_query($mysqli, "SELECT * FROM users LEFT JOIN contacts ON user_id = contact_user_id LEFT JOIN clients ON contact_client_id = client_id WHERE user_email = '$email' AND client_archived_at IS NULL AND user_archived_at IS NULL AND user_type = 2 AND user_status = 1 LIMIT 1"); $row = mysqli_fetch_array($sql); $client_id = intval($row['contact_client_id']); $user_id = intval($row['user_id']); diff --git a/client/login_microsoft.php b/client/login_microsoft.php index 4c8eae65..c182a16d 100644 --- a/client/login_microsoft.php +++ b/client/login_microsoft.php @@ -100,7 +100,7 @@ if (isset($_POST['code']) && $_POST['state'] == session_id()) { $upn = mysqli_real_escape_string($mysqli, $msgraph_response["userPrincipalName"]); - $sql = mysqli_query($mysqli, "SELECT * FROM users LEFT JOIN contacts ON user_id = contact_user_id WHERE user_email = '$upn' AND user_archived_at IS NULL AND user_type = 2 AND user_status = 1 LIMIT 1"); + $sql = mysqli_query($mysqli, "SELECT * FROM users LEFT JOIN contacts ON user_id = contact_user_id LEFT JOIN contact_client_id = client_id WHERE user_email = '$upn' AND user_archived_at IS NULL AND client_archived_at IS NULL AND user_type = 2 AND user_status = 1 LIMIT 1"); $row = mysqli_fetch_array($sql); $client_id = intval($row['contact_client_id']); $user_id = intval($row['user_id']); From 67dc012caa31e68c30bd012c61d6ca8ed3c2a21a Mon Sep 17 00:00:00 2001 From: johnnyq Date: Thu, 3 Jul 2025 14:44:30 -0400 Subject: [PATCH 035/244] Small wording hints on file uploads instead of upload File its just upload and added the title of the upload modal from upload files to upload file(s) --- client_files.php | 2 +- modals/client_file_upload_modal.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/client_files.php b/client_files.php index 1232b544..04a58e85 100644 --- a/client_files.php +++ b/client_files.php @@ -100,7 +100,7 @@ while ($folder_id > 0) {
@@ -285,4 +285,4 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); require_once "modals/product_add_modal.php"; require_once "modals/product_export_modal.php"; -require_once "includes/footer.php"; +require_once "../includes/footer.php"; diff --git a/project_details.php b/user/project_details.php similarity index 99% rename from project_details.php rename to user/project_details.php index ba893ef7..4b6e63b5 100644 --- a/project_details.php +++ b/user/project_details.php @@ -561,7 +561,7 @@ if (isset($_GET['project_id'])) { } -require_once "includes/footer.php"; +require_once "../includes/footer.php"; ?> diff --git a/projects.php b/user/projects.php similarity index 99% rename from projects.php rename to user/projects.php index 7e44cac9..8b57539b 100644 --- a/projects.php +++ b/user/projects.php @@ -336,10 +336,10 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
- +
There is no Quote here
Back to Quotes"; - require_once "includes/footer.php"; + require_once "../includes/footer.php"; exit(); } @@ -593,7 +593,7 @@ if (isset($_GET['quote_id'])) { require_once "modals/quote_note_modal.php"; } -require_once "includes/footer.php"; +require_once "../includes/footer.php"; ?> diff --git a/quotes.php b/user/quotes.php similarity index 99% rename from quotes.php rename to user/quotes.php index 3e5f5764..742812f1 100644 --- a/quotes.php +++ b/user/quotes.php @@ -273,7 +273,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - @@ -282,4 +282,4 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); require_once "modals/quote_add_modal.php"; require_once "modals/quote_export_modal.php"; -require_once "includes/footer.php"; +require_once "../includes/footer.php"; diff --git a/recurring_expenses.php b/user/recurring_expenses.php similarity index 99% rename from recurring_expenses.php rename to user/recurring_expenses.php index 6743df79..db221aaa 100644 --- a/recurring_expenses.php +++ b/user/recurring_expenses.php @@ -233,7 +233,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - @@ -241,5 +241,5 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); There is no Recurring Invoice here
Back to Recurring Invoices"; - require_once "includes/footer.php"; + require_once "../includes/footer.php"; exit(); } @@ -495,7 +495,7 @@ if (isset($_GET['recurring_invoice_id'])) { } -require_once "includes/footer.php"; +require_once "../includes/footer.php"; ?> diff --git a/recurring_invoices.php b/user/recurring_invoices.php similarity index 99% rename from recurring_invoices.php rename to user/recurring_invoices.php index dda221a6..9bc82260 100644 --- a/recurring_invoices.php +++ b/user/recurring_invoices.php @@ -295,7 +295,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - @@ -303,4 +303,4 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - @@ -248,4 +248,4 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); + + +

ITFlow   ·   Docs   ·   Forum   ·   Services

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Total Execution Time: '.number_format((float) $execution_time, 10) .' seconds'; diff --git a/reports/includes/header.php b/user/reports/includes/header.php similarity index 51% rename from reports/includes/header.php rename to user/reports/includes/header.php index 8a22fd82..76e42de5 100644 --- a/reports/includes/header.php +++ b/user/reports/includes/header.php @@ -22,28 +22,28 @@ header("X-Frame-Options: DENY"); Favicon If Fav Icon exists else use the default one --> - + - + - - - - - - - + + + + + + + - + - + - - + + - @@ -193,4 +193,4 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - - @@ -332,4 +332,4 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); require_once "modals/software_add_modal.php"; require_once "modals/software_add_from_template_modal.php"; require_once "modals/software_export_modal.php"; -require_once "includes/footer.php"; +require_once "../includes/footer.php"; diff --git a/ticket.php b/user/ticket.php similarity index 99% rename from ticket.php rename to user/ticket.php index d638c733..6f5e20fb 100644 --- a/ticket.php +++ b/user/ticket.php @@ -46,7 +46,7 @@ if (isset($_GET['ticket_id'])) { if (mysqli_num_rows($sql) == 0) { echo "

Nothing to see here

Go Back
"; - include_once "includes/footer.php"; + include_once "../includes/footer.php"; } else { $row = mysqli_fetch_array($sql); @@ -1299,7 +1299,7 @@ if (isset($_GET['ticket_id'])) { } } -require_once "includes/footer.php"; +require_once "../includes/footer.php"; ?> diff --git a/tickets.php b/user/tickets.php similarity index 99% rename from tickets.php rename to user/tickets.php index 8e4b394d..1388d416 100644 --- a/tickets.php +++ b/user/tickets.php @@ -441,4 +441,4 @@ if (isset($_GET["view"])) { - + diff --git a/transfers.php b/user/transfers.php similarity index 99% rename from transfers.php rename to user/transfers.php index 6924939f..8ff79ed8 100644 --- a/transfers.php +++ b/user/transfers.php @@ -272,7 +272,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - @@ -280,5 +280,5 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - @@ -248,4 +248,4 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - @@ -294,4 +294,4 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); require_once "modals/vendor_add_modal.php"; require_once "modals/vendor_add_from_template_modal.php"; require_once "modals/vendor_export_modal.php"; -require_once "includes/footer.php"; +require_once "../includes/footer.php"; From 38e2e50a299d566565ef1e2fca62910a6b18fd91 Mon Sep 17 00:00:00 2001 From: johnnyq Date: Mon, 28 Jul 2025 22:48:44 -0400 Subject: [PATCH 102/244] More progress on consolidating files into user and admin --- admin/includes/footer.php | 53 --- admin/includes/header.php | 54 --- admin/includes/inc_all_admin.php | 2 +- admin/includes/modal_footer.php | 9 - admin/includes/modal_header.php | 13 - includes/client_side_nav.php | 354 ------------------ includes/db.php | 6 + includes/footer.php | 34 +- includes/header.php | 57 +-- includes/inc_all_client.php | 316 ---------------- includes/inc_all_user.php | 12 - includes/inc_client_overview_all.php | 12 - includes/inc_xcustom.php | 13 - .../includes}/client_overview_side_nav.php | 0 .../includes}/get_side_nav_counts.php | 0 user/includes/inc_all.php | 2 +- user/includes/inc_all_client.php | 24 +- user/includes/inc_all_user.php | 21 +- user/includes/inc_client_overview_all.php | 13 + .../includes}/inc_client_top_head.php | 6 +- {includes => user/includes}/user_side_nav.php | 0 .../modals/{clients => client}/client_add.php | 0 .../client_bulk_assign_tags.php | 0 .../client_bulk_edit_hourly_rate.php | 0 .../client_bulk_edit_industry.php | 0 .../client_bulk_edit_referral.php | 0 .../{clients => client}/client_bulk_email.php | 0 .../{clients => client}/client_credit_add.php | 0 .../{clients => client}/client_delete.php | 2 +- .../client_download_pdf.php | 0 .../{clients => client}/client_edit.php | 0 .../{clients => client}/client_export.php | 0 .../{clients => client}/client_import.php | 0 user/reports/includes/footer.php | 53 --- user/reports/includes/header.php | 54 --- user/reports/includes/inc_all_reports.php | 2 +- user/vendors.php | 4 +- 37 files changed, 98 insertions(+), 1018 deletions(-) delete mode 100644 admin/includes/footer.php delete mode 100644 admin/includes/header.php delete mode 100644 admin/includes/modal_footer.php delete mode 100644 admin/includes/modal_header.php delete mode 100644 includes/client_side_nav.php create mode 100644 includes/db.php delete mode 100644 includes/inc_all_client.php delete mode 100644 includes/inc_all_user.php delete mode 100644 includes/inc_client_overview_all.php delete mode 100644 includes/inc_xcustom.php rename {includes => user/includes}/client_overview_side_nav.php (100%) rename {includes => user/includes}/get_side_nav_counts.php (100%) create mode 100644 user/includes/inc_client_overview_all.php rename {includes => user/includes}/inc_client_top_head.php (98%) rename {includes => user/includes}/user_side_nav.php (100%) rename user/modals/{clients => client}/client_add.php (100%) rename user/modals/{clients => client}/client_bulk_assign_tags.php (100%) rename user/modals/{clients => client}/client_bulk_edit_hourly_rate.php (100%) rename user/modals/{clients => client}/client_bulk_edit_industry.php (100%) rename user/modals/{clients => client}/client_bulk_edit_referral.php (100%) rename user/modals/{clients => client}/client_bulk_email.php (100%) rename user/modals/{clients => client}/client_credit_add.php (100%) rename user/modals/{clients => client}/client_delete.php (96%) rename user/modals/{clients => client}/client_download_pdf.php (100%) rename user/modals/{clients => client}/client_edit.php (100%) rename user/modals/{clients => client}/client_export.php (100%) rename user/modals/{clients => client}/client_import.php (100%) delete mode 100644 user/reports/includes/footer.php delete mode 100644 user/reports/includes/header.php diff --git a/admin/includes/footer.php b/admin/includes/footer.php deleted file mode 100644 index 60235990..00000000 --- a/admin/includes/footer.php +++ /dev/null @@ -1,53 +0,0 @@ - - - -

ITFlow   ·   Docs   ·   Forum   ·   Services

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Total Execution Time: '.number_format((float) $execution_time, 10) .' seconds'; diff --git a/admin/includes/header.php b/admin/includes/header.php deleted file mode 100644 index 8a22fd82..00000000 --- a/admin/includes/header.php +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - <?php echo $session_company_name; ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"> -
diff --git a/admin/includes/inc_all_admin.php b/admin/includes/inc_all_admin.php index 53d050f9..fb600215 100644 --- a/admin/includes/inc_all_admin.php +++ b/admin/includes/inc_all_admin.php @@ -7,7 +7,7 @@ require_once "../includes/page_title.php"; if (!isset($session_is_admin) || !$session_is_admin) { exit(WORDING_ROLECHECK_FAILED . "
Tell your admin: Your role does not have admin access."); } -require_once "includes/header.php"; +require_once "../includes/header.php"; require_once "../includes/top_nav.php"; require_once "includes/side_nav.php"; require_once "../includes/inc_wrapper.php"; diff --git a/admin/includes/modal_footer.php b/admin/includes/modal_footer.php deleted file mode 100644 index 4bbe5766..00000000 --- a/admin/includes/modal_footer.php +++ /dev/null @@ -1,9 +0,0 @@ - - - - $content]); -?> \ No newline at end of file diff --git a/admin/includes/modal_header.php b/admin/includes/modal_header.php deleted file mode 100644 index 695f098a..00000000 --- a/admin/includes/modal_header.php +++ /dev/null @@ -1,13 +0,0 @@ - 'ID missing.']); -// exit; -//} diff --git a/includes/client_side_nav.php b/includes/client_side_nav.php deleted file mode 100644 index 6fc74f3b..00000000 --- a/includes/client_side_nav.php +++ /dev/null @@ -1,354 +0,0 @@ - - diff --git a/includes/db.php b/includes/db.php new file mode 100644 index 00000000..c22463ae --- /dev/null +++ b/includes/db.php @@ -0,0 +1,6 @@ + +if ($_SERVER['REQUEST_URI'] === '/admin') { ?>

ITFlow   ·   Docs   ·   Forum   ·   Services


@@ -22,24 +22,24 @@ if (str_contains(basename($_SERVER["PHP_SELF"]), "admin_")) { ?> - - - - - - - - - - - - + + + + + + + + + + + + - - - - + + + + diff --git a/includes/header.php b/includes/header.php index 483084e1..9c46be30 100644 --- a/includes/header.php +++ b/includes/header.php @@ -6,6 +6,13 @@ header("X-Frame-Options: DENY"); +// Determine URI prepending logic (URI Routing maybe move to /includes/router.php) +if ($_SERVER['REQUEST_URI'] === '/user/reports') { + $prepend_uri = "../"; +} else { + $prepend_uri = ''; +} + ?> @@ -18,37 +25,33 @@ header("X-Frame-Options: DENY"); <?php echo $session_company_name; ?> - - - - - - - + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + accent- + ">
+ diff --git a/includes/inc_all_client.php b/includes/inc_all_client.php deleted file mode 100644 index 40cccea6..00000000 --- a/includes/inc_all_client.php +++ /dev/null @@ -1,316 +0,0 @@ -window.history.back();"; - exit(); - } - - $sql = mysqli_query($mysqli, "UPDATE clients SET client_accessed_at = NOW() WHERE client_id = $client_id"); - - $sql = mysqli_query( - $mysqli, - "SELECT * FROM clients - LEFT JOIN locations ON clients.client_id = locations.location_client_id AND location_primary = 1 - LEFT JOIN contacts ON clients.client_id = contacts.contact_client_id AND contact_primary = 1 - WHERE client_id = $client_id" - ); - - if (mysqli_num_rows($sql) == 0) { - require_once "header.php"; - - echo "

Nothing to see here

"; - } else { - - $row = mysqli_fetch_array($sql); - $client_name = nullable_htmlentities($row['client_name']); - $client_is_lead = intval($row['client_lead']); - $client_type = nullable_htmlentities($row['client_type']); - $client_website = nullable_htmlentities($row['client_website']); - $client_referral = nullable_htmlentities($row['client_referral']); - $client_currency_code = nullable_htmlentities($row['client_currency_code']); - $client_net_terms = intval($row['client_net_terms']); - if ($client_net_terms == 0) { - $client_net_terms = $config_default_net_terms; - } - $client_tax_id_number = nullable_htmlentities($row['client_tax_id_number']); - $client_abbreviation = nullable_htmlentities($row['client_abbreviation']); - $client_rate = floatval($row['client_rate']); - $client_notes = nullable_htmlentities($row['client_notes']); - $client_created_at = nullable_htmlentities($row['client_created_at']); - $client_archived_at = nullable_htmlentities($row['client_archived_at']); - $contact_id = intval($row['contact_id']); - $contact_name = nullable_htmlentities($row['contact_name']); - $contact_title = nullable_htmlentities($row['contact_title']); - $contact_email = nullable_htmlentities($row['contact_email']); - $contact_phone_country_code = nullable_htmlentities($row['contact_phone_country_code']); - $contact_phone = nullable_htmlentities(formatPhoneNumber($row['contact_phone'], $contact_phone_country_code)); - $contact_extension = nullable_htmlentities($row['contact_extension']); - $contact_mobile_country_code = nullable_htmlentities($row['contact_mobile_country_code']); - $contact_mobile = nullable_htmlentities(formatPhoneNumber($row['contact_mobile'], $contact_mobile_country_code)); - $contact_primary = intval($row['contact_primary']); - $location_id = intval($row['location_id']); - $location_name = nullable_htmlentities($row['location_name']); - $location_address = nullable_htmlentities($row['location_address']); - $location_city = nullable_htmlentities($row['location_city']); - $location_state = nullable_htmlentities($row['location_state']); - $location_zip = nullable_htmlentities($row['location_zip']); - $location_country = nullable_htmlentities($row['location_country']); - $location_phone_country_code = nullable_htmlentities($row['location_phone_country_code']); - $location_phone = nullable_htmlentities(formatPhoneNumber($row['location_phone'], $location_phone_country_code)); - $location_primary = intval($row['location_primary']); - - // Tab Title // No Sanitizing needed - $tab_title = $row['client_name']; - - // Client Tags - - $client_tag_name_display_array = array(); - $client_tag_id_array = array(); - $sql_client_tags = mysqli_query($mysqli, "SELECT * FROM client_tags LEFT JOIN tags ON client_tags.tag_id = tags.tag_id WHERE client_id = $client_id ORDER BY tag_name ASC"); - while ($row = mysqli_fetch_array($sql_client_tags)) { - - $client_tag_id = intval($row['tag_id']); - $client_tag_name = nullable_htmlentities($row['tag_name']); - $client_tag_color = nullable_htmlentities($row['tag_color']); - if (empty($client_tag_color)) { - $client_tag_color = "dark"; - } - $client_tag_icon = nullable_htmlentities($row['tag_icon']); - if (empty($client_tag_icon)) { - $client_tag_icon = "tag"; - } - - $client_tag_id_array[] = $client_tag_id; - $client_tag_name_display_array[] = "$client_tag_name"; - } - $client_tags_display = implode('', $client_tag_name_display_array); - - //Add up all the payments for the invoice and get the total amount paid to the invoice - $sql_invoice_amounts = mysqli_query($mysqli, "SELECT SUM(invoice_amount) AS invoice_amounts FROM invoices WHERE invoice_client_id = $client_id AND invoice_status != 'Draft' AND invoice_status != 'Cancelled' AND invoice_status != 'Non-Billable'"); - $row = mysqli_fetch_array($sql_invoice_amounts); - - $invoice_amounts = floatval($row['invoice_amounts']); - - $sql_amount_paid = mysqli_query($mysqli, "SELECT SUM(payment_amount) AS amount_paid FROM payments, invoices WHERE payment_invoice_id = invoice_id AND invoice_client_id = $client_id"); - $row = mysqli_fetch_array($sql_amount_paid); - - $amount_paid = floatval($row['amount_paid']); - - $balance = $invoice_amounts - $amount_paid; - - //Get Monthly Recurring Total - $sql_recurring_monthly_total = mysqli_query($mysqli, "SELECT SUM(recurring_invoice_amount) AS recurring_monthly_total FROM recurring_invoices WHERE recurring_invoice_status = 1 AND recurring_invoice_frequency = 'month' AND recurring_invoice_client_id = $client_id"); - $row = mysqli_fetch_array($sql_recurring_monthly_total); - - $recurring_monthly_total = floatval($row['recurring_monthly_total']); - - //Get Yearly Recurring Total - $sql_recurring_yearly_total = mysqli_query($mysqli, "SELECT SUM(recurring_invoice_amount) AS recurring_yearly_total FROM recurring_invoices WHERE recurring_invoice_status = 1 AND recurring_invoice_frequency = 'year' AND recurring_invoice_client_id = $client_id"); - $row = mysqli_fetch_array($sql_recurring_yearly_total); - - $recurring_yearly_total = floatval($row['recurring_yearly_total']) / 12; - - $recurring_monthly = $recurring_monthly_total + $recurring_yearly_total; - - // Get Credit Balance - $sql_credit_balance = mysqli_query($mysqli, "SELECT SUM(credit_amount) AS credit_balance FROM credits WHERE credit_client_id = $client_id"); - $row = mysqli_fetch_array($sql_credit_balance); - - $credit_balance = floatval($row['credit_balance']); - - // Badge Counts - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('contact_id') AS num FROM contacts WHERE contact_archived_at IS NULL AND contact_client_id = $client_id")); - $num_contacts = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('location_id') AS num FROM locations WHERE location_archived_at IS NULL AND location_client_id = $client_id")); - $num_locations = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('asset_id') AS num FROM assets WHERE asset_archived_at IS NULL AND asset_client_id = $client_id")); - $num_assets = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('ticket_id') AS num FROM tickets WHERE ticket_archived_at IS NULL AND ticket_closed_at IS NULL AND ticket_status != 4 AND ticket_client_id = $client_id")); - $num_active_tickets = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('ticket_id') AS num FROM tickets WHERE ticket_archived_at IS NULL AND ticket_closed_at IS NOT NULL AND ticket_client_id = $client_id")); - $num_closed_tickets = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('recurring_ticket_id') AS num FROM recurring_tickets WHERE recurring_ticket_client_id = $client_id")); - $num_recurring_tickets = $row['num']; - - // Active Project Count - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('project_id') AS num FROM projects WHERE project_archived_at IS NULL AND project_completed_at IS NULL AND project_client_id = $client_id")); - $num_active_projects = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('service_id') AS num FROM services WHERE service_client_id = $client_id")); - $num_services = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('vendor_id') AS num FROM vendors WHERE vendor_archived_at IS NULL AND vendor_client_id = $client_id")); - $num_vendors = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('credential_id') AS num FROM credentials WHERE credential_archived_at IS NULL AND credential_client_id = $client_id")); - $num_credentials = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('network_id') AS num FROM networks WHERE network_archived_at IS NULL AND network_client_id = $client_id")); - $num_networks = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('rack_id') AS num FROM racks WHERE rack_archived_at IS NULL AND rack_client_id = $client_id")); - $num_racks = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('domain_id') AS num FROM domains WHERE domain_archived_at IS NULL AND domain_client_id = $client_id")); - $num_domains = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('certificate_id') AS num FROM certificates WHERE certificate_archived_at IS NULL AND certificate_client_id = $client_id")); - $num_certificates = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('software_id') AS num FROM software WHERE software_archived_at IS NULL AND software_client_id = $client_id")); - $num_software = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('invoice_id') AS num FROM invoices WHERE (invoice_status = 'Sent' OR invoice_status = 'Viewed' OR invoice_status = 'Partial') AND invoice_archived_at IS NULL AND invoice_client_id = $client_id")); - $num_invoices_open = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('invoice_id') AS num FROM invoices WHERE invoice_status = 'Draft' AND invoice_archived_at IS NULL AND invoice_client_id = $client_id")); - $num_invoices_draft = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('invoice_id') AS num FROM invoices WHERE invoice_status = 'Sent' AND invoice_archived_at IS NULL AND invoice_client_id = $client_id")); - $num_invoices_sent = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('invoice_id') AS num FROM invoices WHERE invoice_status = 'Viewed' AND invoice_archived_at IS NULL AND invoice_client_id = $client_id")); - $num_invoices_viewed = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('invoice_id') AS num FROM invoices WHERE invoice_status = 'Partial' AND invoice_archived_at IS NULL AND invoice_client_id = $client_id")); - $num_invoices_partial = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('invoice_id') AS num FROM invoices WHERE invoice_status = 'Paid' AND invoice_archived_at IS NULL AND invoice_client_id = $client_id")); - $num_invoices_paid = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('invoice_id') AS num FROM invoices WHERE invoice_archived_at IS NULL AND invoice_client_id = $client_id")); - $num_invoices = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('quote_id') AS num FROM quotes WHERE quote_archived_at IS NULL AND quote_client_id = $client_id")); - $num_quotes = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('recurring_invoice_id') AS num FROM recurring_invoices WHERE recurring_invoice_archived_at IS NULL AND recurring_invoice_client_id = $client_id")); - $num_recurring_invoices = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('payment_id') AS num FROM payments, invoices WHERE payment_invoice_id = invoice_id AND invoice_client_id = $client_id")); - $num_payments = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('file_id') AS num FROM files WHERE file_archived_at IS NULL AND file_client_id = $client_id")); - $num_files = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('document_id') AS num FROM documents WHERE document_archived_at IS NULL AND document_client_id = $client_id")); - $num_documents = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('event_id') AS num FROM calendar_events WHERE event_client_id = $client_id")); - $num_calendar_events = $row['num']; - - $row = mysqli_fetch_assoc(mysqli_query($mysqli, "SELECT COUNT('trip_id') AS num FROM trips WHERE trip_archived_at IS NULL AND trip_client_id = $client_id")); - $num_trips = $row['num']; - - // Expiring Items - - // Count Domains Expiring within 45 Days - $row = mysqli_fetch_assoc(mysqli_query( - $mysqli, - "SELECT COUNT('domain_id') AS num FROM domains - WHERE domain_client_id = $client_id - AND domain_expire IS NOT NULL - AND domain_expire < CURRENT_DATE + INTERVAL 45 DAY - AND domain_archived_at IS NULL" - )); - $num_domains_expiring_warning= intval($row['num']); - - // Count Domains Expired or within 7 days - $row = mysqli_fetch_assoc(mysqli_query( - $mysqli, - "SELECT COUNT('domain_id') AS num FROM domains - WHERE domain_client_id = $client_id - AND domain_expire IS NOT NULL - AND ( - domain_expire < CURRENT_DATE - OR domain_expire < CURRENT_DATE + INTERVAL 7 DAY - ) - AND domain_archived_at IS NULL" - )); - $num_domains_urgent = intval($row['num']); - - // Count Certificates Expiring within 7 Days - $row = mysqli_fetch_assoc(mysqli_query( - $mysqli, - "SELECT COUNT('certificate_id') AS num FROM certificates - WHERE certificate_client_id = $client_id - AND certificate_expire IS NOT NULL - AND certificate_expire < CURRENT_DATE + INTERVAL 7 DAY - AND certificate_archived_at IS NULL" - )); - $num_certificates_expiring = intval($row['num']); - - // Count Certificates Expired or within 7 days - $row = mysqli_fetch_assoc(mysqli_query( - $mysqli, - "SELECT COUNT('certificate_id') AS num FROM certificates - WHERE certificate_client_id = $client_id - AND certificate_expire IS NOT NULL - AND ( - certificate_expire < CURRENT_DATE - OR certificate_expire < CURRENT_DATE + INTERVAL 1 DAY - ) - AND certificate_archived_at IS NULL" - )); - $num_certificates_expired = intval($row['num']); - - // Count Software Expiring within 90 Days - $row = mysqli_fetch_assoc(mysqli_query( - $mysqli, - "SELECT COUNT('software_id') AS num FROM software - WHERE software_client_id = $client_id - AND software_expire IS NOT NULL - AND software_expire < CURRENT_DATE + INTERVAL 45 DAY - AND software_archived_at IS NULL" - )); - $num_software_expiring = intval($row['num']); - - // Count Software Expired or within 14 days - $row = mysqli_fetch_assoc(mysqli_query( - $mysqli, - "SELECT COUNT('software_id') AS num FROM software - WHERE software_client_id = $client_id - AND software_expire IS NOT NULL - AND ( - software_expire < CURRENT_DATE - OR software_expire < CURRENT_DATE + INTERVAL 7 DAY - ) - AND software_archived_at IS NULL" - )); - $num_software_expired = intval($row['num']); - - } -} - -require_once "header.php"; -require_once "top_nav.php"; -require_once "client_side_nav.php"; -require_once "inc_wrapper.php"; -require_once "inc_alert_feedback.php"; -require_once "inc_client_top_head.php"; -require_once "filter_header.php"; diff --git a/includes/inc_all_user.php b/includes/inc_all_user.php deleted file mode 100644 index bafda7b6..00000000 --- a/includes/inc_all_user.php +++ /dev/null @@ -1,12 +0,0 @@ -

Nothing to see here

"; } else { @@ -307,10 +307,10 @@ if (isset($_GET['client_id'])) { } } -require_once "header.php"; -require_once "top_nav.php"; -require_once "client_side_nav.php"; -require_once "inc_wrapper.php"; -require_once "inc_alert_feedback.php"; -require_once "inc_client_top_head.php"; -require_once "filter_header.php"; +require_once "../includes/header.php"; +require_once "../includes/top_nav.php"; +require_once "includes/side_nav.php"; +require_once "../includes/inc_wrapper.php"; +require_once "../includes/inc_alert_feedback.php"; +require_once "includes/inc_client_top_head.php"; +require_once "../includes/filter_header.php"; diff --git a/user/includes/inc_all_user.php b/user/includes/inc_all_user.php index bafda7b6..45d12dd3 100644 --- a/user/includes/inc_all_user.php +++ b/user/includes/inc_all_user.php @@ -1,12 +1,13 @@
- + diff --git a/user/modals/clients/client_download_pdf.php b/user/modals/client/client_download_pdf.php similarity index 100% rename from user/modals/clients/client_download_pdf.php rename to user/modals/client/client_download_pdf.php diff --git a/user/modals/clients/client_edit.php b/user/modals/client/client_edit.php similarity index 100% rename from user/modals/clients/client_edit.php rename to user/modals/client/client_edit.php diff --git a/user/modals/clients/client_export.php b/user/modals/client/client_export.php similarity index 100% rename from user/modals/clients/client_export.php rename to user/modals/client/client_export.php diff --git a/user/modals/clients/client_import.php b/user/modals/client/client_import.php similarity index 100% rename from user/modals/clients/client_import.php rename to user/modals/client/client_import.php diff --git a/user/reports/includes/footer.php b/user/reports/includes/footer.php deleted file mode 100644 index a5449dfa..00000000 --- a/user/reports/includes/footer.php +++ /dev/null @@ -1,53 +0,0 @@ - - - -

ITFlow   ·   Docs   ·   Forum   ·   Services

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Total Execution Time: '.number_format((float) $execution_time, 10) .' seconds'; diff --git a/user/reports/includes/header.php b/user/reports/includes/header.php deleted file mode 100644 index 76e42de5..00000000 --- a/user/reports/includes/header.php +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - <?php echo $session_company_name; ?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - -"> -
diff --git a/user/reports/includes/inc_all_reports.php b/user/reports/includes/inc_all_reports.php index 1d9b14dc..23f50a66 100644 --- a/user/reports/includes/inc_all_reports.php +++ b/user/reports/includes/inc_all_reports.php @@ -6,7 +6,7 @@ require_once "../../includes/check_login.php"; require_once "../../includes/page_title.php"; // Reporting Perms enforceUserPermission('module_reporting'); -require_once "includes/header.php"; +require_once "../../includes/header.php"; require_once "../../includes/top_nav.php"; require_once "includes/side_nav.php"; require_once "../../includes/inc_wrapper.php"; diff --git a/user/vendors.php b/user/vendors.php index df2290fb..0a5e6e67 100644 --- a/user/vendors.php +++ b/user/vendors.php @@ -283,12 +283,12 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
- - + Date: Mon, 28 Jul 2025 23:29:46 -0400 Subject: [PATCH 103/244] Cleanup some broken links from file dirextory consolidation --- includes/modal_footer.php | 4 ++-- includes/modal_header.php | 6 +++--- user/clients.php | 20 ++++++++++---------- user/modals/client/client_edit.php | 6 +++--- user/post/client.php | 4 ++-- user/post/profile.php | 4 ++-- user/user_details.php | 2 +- 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/includes/modal_footer.php b/includes/modal_footer.php index 4bbe5766..a39ff63f 100644 --- a/includes/modal_footer.php +++ b/includes/modal_footer.php @@ -1,5 +1,5 @@ - - + + Edit @@ -613,11 +613,11 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); @@ -625,10 +625,10 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - + @@ -263,4 +263,4 @@ ob_start();
- "> + "> Remove Avatar
From 9ee76213e168f7f0bf8c385222f8b0b7dd011f14 Mon Sep 17 00:00:00 2001 From: johnnyq Date: Tue, 29 Jul 2025 14:32:43 -0400 Subject: [PATCH 104/244] Update more broken links from file dirextory consolidation --- admin/ai_model.php | 2 +- admin/ai_provider.php | 2 +- {user => admin}/ajax/ajax_ai_model_edit.php | 4 ++-- {user => admin}/ajax/ajax_ai_provider_edit.php | 4 ++-- {user => admin}/ajax/ajax_category_add.php | 10 +++++----- {user => admin}/ajax/ajax_category_edit.php | 10 +++++----- {user => admin}/ajax/ajax_custom_link_edit.php | 10 +++++----- .../ajax/ajax_custom_ticket_status_edit.php | 10 +++++----- .../ajax/ajax_document_template_edit.php | 10 +++++----- .../ajax/ajax_mail_queue_message_view.php | 8 ++++---- .../ajax/ajax_payment_method_edit.php | 10 +++++----- .../ajax/ajax_payment_provider_edit.php | 10 +++++----- {user => admin}/ajax/ajax_role_edit.php | 10 +++++----- .../ajax/ajax_software_template_edit.php | 10 +++++----- {user => admin}/ajax/ajax_tag_add.php | 10 +++++----- {user => admin}/ajax/ajax_tag_edit.php | 10 +++++----- {user => admin}/ajax/ajax_tax_edit.php | 10 +++++----- .../ajax/ajax_ticket_template_task_edit.php | 10 +++++----- {user => admin}/ajax/ajax_user_edit.php | 10 +++++----- .../ajax/ajax_vendor_template_edit.php | 10 +++++----- admin/{api.php => api_keys.php} | 6 +++--- admin/app_log.php | 4 ++-- admin/audit_log.php | 6 +++--- admin/backup.php | 2 +- admin/category.php | 4 ++-- admin/custom_link.php | 4 ++-- admin/debug.php | 2 +- admin/document_template.php | 6 +++--- admin/document_template_details.php | 12 ++++++------ admin/identity_provider.php | 2 +- admin/mail_queue.php | 8 ++++---- admin/modals/admin_ai_model_add_modal.php | 8 ++++---- admin/modals/admin_ai_provider_add_modal.php | 8 ++++---- admin/modals/admin_api_key_add_modal.php | 8 ++++---- admin/modals/admin_category_add_modal.php | 8 ++++---- admin/modals/admin_custom_link_add_modal.php | 8 ++++---- .../admin_document_template_add_modal.php | 8 ++++---- .../modals/admin_payment_method_add_modal.php | 8 ++++---- .../admin_payment_provider_add_modal.php | 8 ++++---- .../admin_project_template_add_modal.php | 8 ++++---- .../admin_project_template_edit_modal.php | 8 ++++---- ...ject_template_ticket_template_add_modal.php | 8 ++++---- admin/modals/admin_role_add_modal.php | 8 ++++---- .../admin_software_template_add_modal.php | 8 ++++---- admin/modals/admin_tag_add_modal.php | 8 ++++---- admin/modals/admin_tax_add_modal.php | 6 +++--- admin/modals/admin_ticket_status_add_modal.php | 8 ++++---- .../modals/admin_ticket_template_add_modal.php | 8 ++++---- .../admin_ticket_template_edit_modal.php | 8 ++++---- admin/modals/admin_user_add_modal.php | 8 ++++---- admin/modals/admin_user_export_modal.php | 8 ++++---- admin/modals/admin_user_invite_modal.php | 8 ++++---- .../modals/admin_vendor_template_add_modal.php | 8 ++++---- admin/modals/{roles => }/role_add.php | 8 ++++---- admin/modals/{roles => }/role_edit.php | 10 +++++----- admin/modals/{users => }/user_add.php | 8 ++++---- .../{users => }/user_all_reset_password.php | 0 admin/modals/{users => }/user_archive.php | 0 admin/modals/{users => }/user_edit.php | 6 +++--- admin/modals/{users => }/user_export.php | 8 ++++---- admin/modals/{users => }/user_invite.php | 8 ++++---- admin/payment_method.php | 2 +- admin/payment_provider.php | 2 +- admin/project_template.php | 6 +++--- admin/project_template_details.php | 4 ++-- admin/roles.php | 10 +++++----- admin/saved_payment_method.php | 4 ++-- admin/settings_ai.php | 2 +- admin/settings_company.php | 4 ++-- admin/settings_custom_fields.php | 4 ++-- admin/settings_default.php | 2 +- admin/settings_invoice.php | 2 +- admin/settings_localization.php | 2 +- admin/settings_mail.php | 2 +- admin/settings_module.php | 2 +- admin/settings_notification.php | 2 +- admin/settings_online_payment.php | 2 +- admin/settings_online_payment_clients.php | 2 +- admin/settings_project.php | 2 +- admin/settings_quote.php | 2 +- admin/settings_security.php | 2 +- admin/settings_telemetry.php | 2 +- admin/settings_theme.php | 4 ++-- admin/settings_ticket.php | 2 +- admin/software_template.php | 4 ++-- admin/tag.php | 4 ++-- admin/tax.php | 2 +- admin/ticket_status.php | 4 ++-- admin/ticket_template.php | 6 +++--- admin/ticket_template_details.php | 10 +++++----- admin/update.php | 2 +- admin/users.php | 18 +++++++++--------- admin/vendor_template.php | 4 ++-- includes/footer.php | 6 +++--- includes/modal_footer.php | 4 ++-- includes/modal_header.php | 6 +++--- includes/top_nav.php | 4 ++-- .../notifications.php | 18 +++++++++++++----- user/ajax/ajax_account_edit.php | 4 ++-- user/ajax/ajax_asset_copy.php | 8 ++++---- user/ajax/ajax_asset_details.php | 10 +++++----- user/ajax/ajax_asset_edit.php | 10 +++++----- user/ajax/ajax_asset_interface_edit.php | 10 +++++----- user/ajax/ajax_asset_link_credential.php | 10 +++++----- user/ajax/ajax_asset_link_document.php | 10 +++++----- user/ajax/ajax_asset_link_file.php | 10 +++++----- user/ajax/ajax_asset_link_service.php | 10 +++++----- user/ajax/ajax_asset_link_software.php | 10 +++++----- user/ajax/ajax_calendar_edit.php | 10 +++++----- user/ajax/ajax_calendar_event_edit.php | 10 +++++----- user/ajax/ajax_certificate_edit.php | 10 +++++----- user/ajax/ajax_contact_details.php | 10 +++++----- user/ajax/ajax_contact_edit.php | 10 +++++----- user/ajax/ajax_contact_link_asset.php | 10 +++++----- user/ajax/ajax_contact_link_credential.php | 10 +++++----- user/ajax/ajax_contact_link_document.php | 10 +++++----- user/ajax/ajax_contact_link_file.php | 10 +++++----- user/ajax/ajax_contact_link_service.php | 10 +++++----- user/ajax/ajax_contact_link_software.php | 10 +++++----- user/ajax/ajax_contact_note_create.php | 10 +++++----- user/ajax/ajax_credential_edit.php | 10 +++++----- user/ajax/ajax_credential_view.php | 4 ++-- user/ajax/ajax_document_edit.php | 10 +++++----- user/ajax/ajax_document_move.php | 10 +++++----- user/ajax/ajax_document_rename.php | 10 +++++----- user/ajax/ajax_document_version_view.php | 8 ++++---- user/ajax/ajax_document_view.php | 8 ++++---- user/ajax/ajax_domain_edit.php | 10 +++++----- user/ajax/ajax_expense_copy.php | 10 +++++----- user/ajax/ajax_expense_edit.php | 10 +++++----- user/ajax/ajax_expense_refund.php | 10 +++++----- user/ajax/ajax_file_move.php | 10 +++++----- user/ajax/ajax_file_rename.php | 10 +++++----- user/ajax/ajax_folder_rename.php | 10 +++++----- user/ajax/ajax_invoice_apply_credit.php | 4 ++-- user/ajax/ajax_invoice_copy.php | 10 +++++----- user/ajax/ajax_invoice_edit.php | 10 +++++----- user/ajax/ajax_invoice_pay.php | 4 ++-- user/ajax/ajax_item_edit.php | 10 +++++----- user/ajax/ajax_location_edit.php | 10 +++++----- user/ajax/ajax_network_edit.php | 10 +++++----- user/ajax/ajax_product_edit.php | 10 +++++----- user/ajax/ajax_project_edit.php | 10 +++++----- user/ajax/ajax_quote_copy.php | 10 +++++----- user/ajax/ajax_quote_edit.php | 10 +++++----- user/ajax/ajax_rack_device_add.php | 10 +++++----- user/ajax/ajax_rack_edit.php | 10 +++++----- user/ajax/ajax_recurring_expense_edit.php | 10 +++++----- user/ajax/ajax_recurring_invoice_edit.php | 10 +++++----- user/ajax/ajax_recurring_ticket_edit.php | 10 +++++----- user/ajax/ajax_revenue_edit.php | 10 +++++----- user/ajax/ajax_service_details.php | 8 ++++---- user/ajax/ajax_service_edit.php | 10 +++++----- user/ajax/ajax_software_edit.php | 10 +++++----- user/ajax/ajax_ticket_assign.php | 10 +++++----- user/ajax/ajax_ticket_billable.php | 10 +++++----- user/ajax/ajax_ticket_contact.php | 10 +++++----- user/ajax/ajax_ticket_edit.php | 10 +++++----- user/ajax/ajax_ticket_priority.php | 10 +++++----- user/ajax/ajax_ticket_reply_edit.php | 10 +++++----- user/ajax/ajax_ticket_reply_redact.php | 10 +++++----- user/ajax/ajax_ticket_task_edit.php | 10 +++++----- user/ajax/ajax_transfer_edit.php | 10 +++++----- user/ajax/ajax_trip_copy.php | 10 +++++----- user/ajax/ajax_trip_edit.php | 10 +++++----- user/ajax/ajax_vendor_details.php | 4 ++-- user/ajax/ajax_vendor_edit.php | 10 +++++----- user/asset_details.php | 2 +- user/assets.php | 2 +- user/calendar.php | 2 +- user/certificates.php | 2 +- user/client_documents.php | 2 +- user/client_files.php | 2 +- user/clients.php | 18 +++++++++--------- user/contacts.php | 2 +- user/credentials.php | 2 +- user/domains.php | 2 +- user/expenses.php | 2 +- user/global_search.php | 4 ++-- user/includes/inc_client_top_head.php | 8 ++++---- user/invoices.php | 2 +- user/locations.php | 2 +- user/modals/account_add_modal.php | 8 ++++---- user/modals/asset_add_modal.php | 8 ++++---- user/modals/asset_bulk_add_ticket_modal.php | 8 ++++---- .../modals/asset_bulk_assign_contact_modal.php | 8 ++++---- .../asset_bulk_assign_location_modal.php | 8 ++++---- ...set_bulk_assign_physical_location_modal.php | 8 ++++---- user/modals/asset_bulk_edit_status_modal.php | 8 ++++---- .../asset_bulk_transfer_client_modal.php | 8 ++++---- user/modals/asset_export_modal.php | 8 ++++---- user/modals/asset_import_modal.php | 8 ++++---- user/modals/asset_interface_add_modal.php | 8 ++++---- ...asset_interface_bulk_edit_network_modal.php | 8 ++++---- .../asset_interface_bulk_edit_type_modal.php | 8 ++++---- user/modals/asset_interface_export_modal.php | 8 ++++---- user/modals/asset_interface_import_modal.php | 8 ++++---- .../asset_interface_multiple_add_modal.php | 8 ++++---- user/modals/budget_create_modal.php | 8 ++++---- user/modals/budget_edit_modal.php | 8 ++++---- user/modals/calendar_add_modal.php | 8 ++++---- user/modals/calendar_event_add_modal.php | 8 ++++---- user/modals/certificate_add_modal.php | 8 ++++---- user/modals/certificate_export_modal.php | 8 ++++---- user/modals/{client => }/client_add.php | 0 user/modals/client_asset_documents_modal.php | 8 ++++---- .../{client => }/client_bulk_assign_tags.php | 8 ++++---- .../client_bulk_edit_hourly_rate.php | 8 ++++---- .../{client => }/client_bulk_edit_industry.php | 8 ++++---- .../{client => }/client_bulk_edit_referral.php | 8 ++++---- user/modals/{client => }/client_bulk_email.php | 8 ++++---- user/modals/{client => }/client_credit_add.php | 0 user/modals/{client => }/client_delete.php | 0 ...client_document_add_file_relation_modal.php | 8 ++++---- ...client_document_add_from_template_modal.php | 8 ++++---- user/modals/client_document_add_modal.php | 8 ++++---- .../modals/client_document_bulk_move_modal.php | 8 ++++---- .../client_document_link_asset_modal.php | 8 ++++---- .../client_document_link_contact_modal.php | 8 ++++---- .../modals/client_document_link_file_modal.php | 8 ++++---- .../client_document_link_software_modal.php | 8 ++++---- .../client_document_link_vendor_modal.php | 8 ++++---- .../{client => }/client_download_pdf.php | 8 ++++---- user/modals/{client => }/client_edit.php | 4 ++-- user/modals/{client => }/client_export.php | 8 ++++---- user/modals/client_file_bulk_move_modal.php | 8 ++++---- user/modals/client_file_link_asset_modal.php | 8 ++++---- user/modals/client_file_upload_modal.php | 8 ++++---- user/modals/client_file_view_modal.php | 2 +- user/modals/{client => }/client_import.php | 8 ++++---- user/modals/client_rack_add_modal.php | 8 ++++---- user/modals/client_recurring_export_modal.php | 8 ++++---- user/modals/contact_add_modal.php | 8 ++++---- user/modals/contact_archive_modal.php | 8 ++++---- .../contact_bulk_assign_location_modal.php | 8 ++++---- user/modals/contact_bulk_assign_tags_modal.php | 8 ++++---- .../contact_bulk_edit_department_modal.php | 8 ++++---- user/modals/contact_bulk_edit_phone_modal.php | 8 ++++---- user/modals/contact_bulk_edit_role_modal.php | 8 ++++---- user/modals/contact_bulk_email_modal.php | 8 ++++---- user/modals/contact_create_note_modal.php | 8 ++++---- user/modals/contact_export_modal.php | 8 ++++---- user/modals/contact_import_modal.php | 8 ++++---- user/modals/contact_invite_modal.php | 8 ++++---- user/modals/credential_add_modal.php | 8 ++++---- .../credential_bulk_assign_tags_modal.php | 8 ++++---- user/modals/credential_export_modal.php | 8 ++++---- user/modals/credential_import_modal.php | 8 ++++---- user/modals/custom_field_create_modal.php | 8 ++++---- user/modals/custom_field_edit_modal.php | 8 ++++---- user/modals/document_edit_visibility_modal.php | 8 ++++---- user/modals/domain_add_modal.php | 8 ++++---- user/modals/domain_export_modal.php | 8 ++++---- user/modals/expense_add_modal.php | 8 ++++---- .../modals/expense_bulk_edit_account_modal.php | 8 ++++---- .../expense_bulk_edit_category_modal.php | 8 ++++---- user/modals/expense_bulk_edit_client_modal.php | 8 ++++---- user/modals/expense_export_modal.php | 8 ++++---- user/modals/folder_create_modal.php | 8 ++++---- user/modals/invoice_add_modal.php | 8 ++++---- user/modals/invoice_add_ticket_modal.php | 6 +++--- .../invoice_bulk_edit_category_modal.php | 8 ++++---- user/modals/invoice_export_modal.php | 8 ++++---- user/modals/invoice_note_modal.php | 8 ++++---- user/modals/invoice_payment_add_bulk_modal.php | 8 ++++---- user/modals/invoice_recurring_add_modal.php | 6 +++--- user/modals/item_edit_modal.php | 8 ++++---- user/modals/location_add_modal.php | 8 ++++---- .../modals/location_bulk_assign_tags_modal.php | 8 ++++---- user/modals/location_export_modal.php | 8 ++++---- user/modals/location_import_modal.php | 8 ++++---- user/modals/network_add_modal.php | 8 ++++---- user/modals/network_export_modal.php | 8 ++++---- user/modals/payment_export_modal.php | 8 ++++---- user/modals/product_add_modal.php | 8 ++++---- .../product_bulk_edit_category_modal.php | 8 ++++---- user/modals/product_export_modal.php | 8 ++++---- user/modals/project_add_modal.php | 8 ++++---- .../project_link_closed_ticket_modal.php | 8 ++++---- user/modals/project_link_ticket_modal.php | 8 ++++---- user/modals/quote_add_modal.php | 8 ++++---- user/modals/quote_export_modal.php | 8 ++++---- user/modals/quote_note_modal.php | 8 ++++---- user/modals/quote_to_invoice_modal.php | 8 ++++---- user/modals/recurring_expense_create_modal.php | 8 ++++---- user/modals/recurring_invoice_add_modal.php | 8 ++++---- user/modals/recurring_invoice_note_modal.php | 8 ++++---- user/modals/recurring_payment_add_modal.php | 8 ++++---- user/modals/recurring_ticket_add_modal.php | 8 ++++---- user/modals/revenue_add_modal.php | 8 ++++---- user/modals/service_add_modal.php | 8 ++++---- user/modals/share_modal.php | 8 ++++---- .../software_add_from_template_modal.php | 8 ++++---- user/modals/software_add_modal.php | 8 ++++---- user/modals/software_export_modal.php | 8 ++++---- user/modals/ticket_add_modal.php | 8 ++++---- user/modals/ticket_add_modal_v2.php | 8 ++++---- user/modals/ticket_add_watcher_modal.php | 8 ++++---- user/modals/ticket_bulk_add_project_modal.php | 8 ++++---- user/modals/ticket_bulk_assign_modal.php | 8 ++++---- .../modals/ticket_bulk_edit_category_modal.php | 8 ++++---- .../modals/ticket_bulk_edit_priority_modal.php | 8 ++++---- user/modals/ticket_bulk_merge_modal.php | 8 ++++---- user/modals/ticket_bulk_reply_modal.php | 8 ++++---- user/modals/ticket_bulk_resolve_modal.php | 8 ++++---- user/modals/ticket_change_client_modal.php | 8 ++++---- user/modals/ticket_edit_asset_modal.php | 8 ++++---- user/modals/ticket_edit_schedule_modal.php | 8 ++++---- user/modals/ticket_edit_vendor_modal.php | 8 ++++---- user/modals/ticket_export_modal.php | 8 ++++---- user/modals/ticket_invoice_add_modal.php | 8 ++++---- user/modals/ticket_merge_modal.php | 8 ++++---- user/modals/top_nav_tickets_modal.php | 2 +- user/modals/transfer_add_modal.php | 8 ++++---- user/modals/trip_add_modal.php | 8 ++++---- user/modals/trip_export_modal.php | 8 ++++---- user/modals/user_mfa_modal.php | 8 ++++---- user/modals/vendor_add_from_template_modal.php | 8 ++++---- user/modals/vendor_add_modal.php | 8 ++++---- user/modals/vendor_contact_add_modal.php | 8 ++++---- user/modals/vendor_contact_edit_modal.php | 8 ++++---- user/modals/vendor_export_modal.php | 8 ++++---- user/networks.php | 2 +- user/post/client.php | 12 ++++++------ user/products.php | 2 +- user/project_details.php | 2 +- user/recurring_tickets.php | 2 +- user/tickets.php | 2 +- 328 files changed, 1210 insertions(+), 1202 deletions(-) rename {user => admin}/ajax/ajax_ai_model_edit.php (97%) rename {user => admin}/ajax/ajax_ai_provider_edit.php (96%) rename {user => admin}/ajax/ajax_category_add.php (86%) rename {user => admin}/ajax/ajax_category_edit.php (91%) rename {user => admin}/ajax/ajax_custom_link_edit.php (95%) rename {user => admin}/ajax/ajax_custom_ticket_status_edit.php (94%) rename {user => admin}/ajax/ajax_document_template_edit.php (90%) rename user/ajax/ajax_admin_mail_queue_message_view.php => admin/ajax/ajax_mail_queue_message_view.php (93%) rename {user => admin}/ajax/ajax_payment_method_edit.php (90%) rename {user => admin}/ajax/ajax_payment_provider_edit.php (96%) rename {user => admin}/ajax/ajax_role_edit.php (97%) rename {user => admin}/ajax/ajax_software_template_edit.php (95%) rename {user => admin}/ajax/ajax_tag_add.php (88%) rename {user => admin}/ajax/ajax_tag_edit.php (94%) rename {user => admin}/ajax/ajax_tax_edit.php (89%) rename {user => admin}/ajax/ajax_ticket_template_task_edit.php (92%) rename {user => admin}/ajax/ajax_user_edit.php (97%) rename {user => admin}/ajax/ajax_vendor_template_edit.php (98%) rename admin/{api.php => api_keys.php} (98%) rename admin/modals/{roles => }/role_add.php (94%) rename admin/modals/{roles => }/role_edit.php (97%) rename admin/modals/{users => }/user_add.php (97%) rename admin/modals/{users => }/user_all_reset_password.php (100%) rename admin/modals/{users => }/user_archive.php (100%) rename admin/modals/{users => }/user_edit.php (98%) rename admin/modals/{users => }/user_export.php (81%) rename admin/modals/{users => }/user_invite.php (92%) rename user/ajax/ajax_notifications.php => modals/notifications.php (92%) rename user/modals/{client => }/client_add.php (100%) rename user/modals/{client => }/client_bulk_assign_tags.php (92%) rename user/modals/{client => }/client_bulk_edit_hourly_rate.php (87%) rename user/modals/{client => }/client_bulk_edit_industry.php (87%) rename user/modals/{client => }/client_bulk_edit_referral.php (92%) rename user/modals/{client => }/client_bulk_email.php (96%) rename user/modals/{client => }/client_credit_add.php (100%) rename user/modals/{client => }/client_delete.php (100%) rename user/modals/{client => }/client_download_pdf.php (98%) rename user/modals/{client => }/client_edit.php (99%) rename user/modals/{client => }/client_export.php (81%) rename user/modals/{client => }/client_import.php (91%) diff --git a/admin/ai_model.php b/admin/ai_model.php index f2fb497d..758a76f3 100644 --- a/admin/ai_model.php +++ b/admin/ai_model.php @@ -111,4 +111,4 @@ $num_rows = mysqli_num_rows($sql); -