diff --git a/CHANGELOG.md b/CHANGELOG.md index 3ac2462b..84bb8a77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,16 @@ This file documents all notable changes made to ITFlow. +## [25.02.4] + +### Fixed +- Resolved issue preventing the addition or editing of licenses when no vendor was selected. +- Fixed several undeclared variables in AJAX contact details. +- Corrected the contact ticket count display. +- Addressed an issue where clicking "More Details" in AJAX contact/asset details failed to include the `client_id` in the URL. +- Fixed an issue with recurring invoices in the client URL: clicking "Inactive" or "Active" would unexpectedly navigate away from the client section. +- Added new php function getFieldById() to return a record using just an id and sanitized as well. + ## [25.02.3] ### Fixed diff --git a/admin_role.php b/admin_role.php index f79def74..5ea1e4c6 100644 --- a/admin_role.php +++ b/admin_role.php @@ -1,7 +1,7 @@ "> - - Role + + Role Members - - Admin + + Admin Action @@ -70,17 +70,17 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - + @@ -87,7 +87,7 @@ require_once "includes/inc_all_admin.php";
- + diff --git a/admin_settings_theme.php b/admin_settings_theme.php index a79841cb..c15bd49f 100644 --- a/admin_settings_theme.php +++ b/admin_settings_theme.php @@ -19,7 +19,7 @@ require_once "includes/inc_all_admin.php"; ?> -
+
> diff --git a/admin_user.php b/admin_user.php index dace2d78..a6cee3a2 100644 --- a/admin_user.php +++ b/admin_user.php @@ -6,17 +6,25 @@ $order = "ASC"; require_once "includes/inc_all_admin.php"; - -//Rebuild URL -$url_query_strings_sort = http_build_query($get_copy); +// User Type Filter +if (isset($_GET['type']) && $_GET['type'] == "client") { + $type_filter = "client"; + $type_query = "AND user_type = 2"; +} else { + $type_filter = "user"; + $type_query = "AND user_type = 1"; +} $sql = mysqli_query( $mysqli, - "SELECT SQL_CALC_FOUND_ROWS * FROM users, user_settings, user_roles - WHERE users.user_id = user_settings.user_id - AND user_settings.user_role = user_roles.user_role_id - AND (user_name LIKE '%$q%' OR user_email LIKE '%$q%') + "SELECT SQL_CALC_FOUND_ROWS * FROM users + LEFT JOIN user_roles ON user_role_id = role_id + LEFT JOIN user_settings ON users.user_id = user_settings.user_id + LEFT JOIN contacts ON users.user_id = contact_user_id + LEFT JOIN clients ON contact_client_id = client_id + WHERE (user_name LIKE '%$q%' OR user_email LIKE '%$q%') AND user_archived_at IS NULL + $type_query ORDER BY $sort $order LIMIT $record_from, $record_to" ); @@ -36,6 +44,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()"));
-
- +
+
@@ -77,8 +89,8 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); - - Role + + Role @@ -90,6 +102,13 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); Last Login + + + + Client + + + Action @@ -116,10 +135,14 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); $mfa_status_display = ""; } $user_config_force_mfa = intval($row['user_config_force_mfa']); - $user_role = $row['user_role']; - $user_role_display = nullable_htmlentities($row['user_role_name']); + $user_role = intval($row['user_role_id']); + $user_role_display = nullable_htmlentities($row['role_name']); $user_initials = nullable_htmlentities(initials($user_name)); + $contact_id = intval($row['contact_id']); + $client_id = intval($row['client_id']); + $client_name = nullable_htmlentities($row['client_name']); + $sql_last_login = mysqli_query( $mysqli, "SELECT * FROM logs @@ -139,7 +162,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); } // Get User Client Access Permissions - $user_client_access_sql = mysqli_query($mysqli,"SELECT client_id FROM user_permissions WHERE user_id = $user_id"); + $user_client_access_sql = mysqli_query($mysqli,"SELECT client_id FROM user_client_permissions WHERE user_id = $user_id"); $client_access_array = []; while ($row = mysqli_fetch_assoc($user_client_access_sql)) { $client_access_array[] = intval($row['client_id']); @@ -178,6 +201,9 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli, "SELECT FOUND_ROWS()")); + + +
- + @@ -547,12 +556,13 @@ ob_start(); $ticket_number = intval($row['ticket_number']); $ticket_subject = nullable_htmlentities($row['ticket_subject']); $ticket_priority = nullable_htmlentities($row['ticket_priority']); + $ticket_status_id = intval($row['ticket_status_id']); $ticket_status_name = nullable_htmlentities($row['ticket_status_name']); $ticket_status_color = nullable_htmlentities($row['ticket_status_color']); $ticket_created_at = nullable_htmlentities($row['ticket_created_at']); $ticket_updated_at = nullable_htmlentities($row['ticket_updated_at']); if (empty($ticket_updated_at)) { - if ($ticket_status == "Closed") { + if ($ticket_status_name == "Closed") { $ticket_updated_at_display = "

Never

"; } else { $ticket_updated_at_display = "

Never

"; @@ -573,7 +583,7 @@ ob_start(); } $ticket_assigned_to = intval($row['ticket_assigned_to']); if (empty($ticket_assigned_to)) { - if ($ticket_status == 5) { + if ($ticket_status_id == 5) { $ticket_assigned_to_display = "

Not Assigned

"; } else { $ticket_assigned_to_display = "

Not Assigned

"; @@ -628,18 +638,18 @@ ob_start(); - - - - + + + + @@ -679,11 +689,6 @@ ob_start(); $seat_count = 0; - // Get Login - $login_id = intval($row['login_id']); - $login_username = nullable_htmlentities(decryptLoginEntry($row['login_username'])); - $login_password = nullable_htmlentities(decryptLoginEntry($row['login_password'])); - // Asset Licenses $asset_licenses_sql = mysqli_query($mysqli, "SELECT asset_id FROM software_assets WHERE software_id = $software_id"); $asset_licenses_array = array(); @@ -848,7 +853,7 @@ ob_start();