Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
128 commits
Select commit Hold shift + click to select a range
a79ce23
Fix randomString() to generate cryptographically secure URL-safe toke…
johnnyq Dec 18, 2025
3e3531a
Set API Key to 32 Chars
johnnyq Dec 18, 2025
ad5710b
Fix Invoice CSV Exporting
johnnyq Dec 19, 2025
a277380
Set API key back to 32 Chars
johnnyq Dec 19, 2025
a82e2c7
Billable and non billable status use icons check and minus
johnnyq Dec 19, 2025
cab81ca
Fix Billable sort
johnnyq Dec 19, 2025
e60a7a5
Fix Login flow where user agent and client exists and agent has MFA b…
johnnyq Dec 20, 2025
f784b65
Remove extra agent client wording
johnnyq Dec 20, 2025
f2d4eb0
Fix Ticket Template auto filling
johnnyq Dec 29, 2025
9082770
Fix Ticket Template auto filling for v1 ticket creation
johnnyq Dec 29, 2025
ccd5605
Remove unused code
johnnyq Dec 29, 2025
7970304
Update client table responsiveness viewpoint to fix issue when window…
johnnyq Dec 30, 2025
3049912
Bugfix: Portal not showing contact user id in session
Jan 9, 2026
6452575
Fix readme demo creds
Jan 9, 2026
88a29b7
Bugfix: Mail queue loop not sending invoices to all billing contacts
Jan 9, 2026
77e4d2b
Add task approval system
Jan 9, 2026
8b221bc
switched from mysqli_fetch_array to mysqli_fetch_assoc in clients lis…
johnnyq Jan 10, 2026
2193cd8
switched from mysqli_fetch_array to mysqli_fetch_assoc in client modals
johnnyq Jan 10, 2026
365b65e
fix Bulk Delete Documents and Files
johnnyq Jan 10, 2026
56c4b7f
Add show archived logic to files
johnnyq Jan 11, 2026
e5dab8b
Update files to use mysqli_fetch_assoc for better performance and mem…
johnnyq Jan 11, 2026
5815ef2
Added bulk delete, archive and restore and invidual file/document res…
johnnyq Jan 11, 2026
1de023f
Fix Role Archiving, Roles can only be archived if no users are assign…
johnnyq Jan 11, 2026
58bcb38
Add task approval system (tidy)
Jan 12, 2026
908ebb4
Merge pull request #1258 from itflow-org/ticket-task-approvals
wrongecho Jan 12, 2026
b48168f
Rewrite kanban in more procedural code to match existing codebase (as…
Jan 12, 2026
661f8db
Tickets Kanban
Jan 12, 2026
208f7ac
Tickets Kanban
Jan 12, 2026
981f9ac
TinyMCE - add all options to mobile (we may regret this)
Jan 12, 2026
7804057
Fix Remove Powered by ITFlow on Login Screen when WhiteLabel is enabled
johnnyq Jan 12, 2026
e02a6fc
Use mysqli_fetch_assoc in login
johnnyq Jan 12, 2026
c154113
Do not add Signature on ticket comment if Public only when reply is e…
johnnyq Jan 12, 2026
1d3f29d
added edit Payment
johnnyq Jan 12, 2026
cb8b99d
up the permissions to added edit Payment
johnnyq Jan 12, 2026
0a30300
replace all instances of mysqli_fetch_array with mysqli_fetch_assoc f…
johnnyq Jan 14, 2026
df280cd
Fix missing isset in view in tickets.php
johnnyq Jan 14, 2026
7ab406b
Convert mysqli_fetch_assoc to mysqli_fetch_row in setup for table import
johnnyq Jan 14, 2026
72fc001
Add digiBandit as sponsor
Jan 15, 2026
374111c
Add digiBandit as sponsor
Jan 15, 2026
39affa5
Show trips on main nav for everyone if accounting enabled
Jan 15, 2026
7322bd6
Invoices - Show agent names in history
Jan 15, 2026
7e7909c
Mail Parser - Do not automatically send new ticket notifications to n…
Jan 15, 2026
41df4c4
API Keys - Revoke then Delete
Jan 15, 2026
a398ac7
Mail Parser - Support flowed text
Jan 15, 2026
5a27406
Invoice - add a basic picking/packaging slip
Jan 15, 2026
512d65c
Keep asset PO/ref when copying
Jan 15, 2026
11d6654
Basic asset history tracking - See https://tasks.dev.itflow.org/task_…
Jan 15, 2026
1a93149
Basic asset history tracking (transfers) - See https://tasks.dev.itfl…
Jan 15, 2026
6879207
Fix user_id not being set in audit logs for agent and client logins, …
johnnyq Jan 15, 2026
4ffe756
Merge branch 'develop' of github.com:itflow-org/itflow into develop
johnnyq Jan 15, 2026
e7f6f8a
Mail Parser - NDR Parsing
Jan 15, 2026
e94d2f9
Merge branch 'develop' of https://github.com/itflow-org/itflow into d…
Jan 15, 2026
c1ff222
Remove xcustom from .gitignore as its been superceded by custom
johnnyq Jan 15, 2026
2ea6877
Merge branch 'develop' of github.com:itflow-org/itflow into develop
johnnyq Jan 15, 2026
3ed2582
Remove TaxID from packing slip
johnnyq Jan 15, 2026
0a658d7
Fix Document Update API
johnnyq Jan 17, 2026
c1f0b63
Fix login not passing master key if agent is client and agent and if …
johnnyq Jan 17, 2026
3cfe38c
updated UI for contact details so menu is on the left instead of top.…
johnnyq Jan 17, 2026
ae1d71d
append client_id to the uri for agent ticket links so that the when c…
johnnyq Jan 19, 2026
e0f7460
If not client_id then do not include &client_id= in ticket uris as th…
johnnyq Jan 19, 2026
f0f1134
Fix phone number formatting is both asset details page and modal
johnnyq Jan 19, 2026
1712d34
Kanban - move to v2 (rewritten style)
Jan 21, 2026
f4935ef
Remove deprecated quick adds to the client overview
johnnyq Jan 21, 2026
644dc95
Merge branch 'develop' of github.com:itflow-org/itflow into develop
johnnyq Jan 21, 2026
bd8bf02
Allow svg email attachemment for mail parser
johnnyq Jan 23, 2026
ff02ab0
Show Document Updated at instead of created at. This fixes where it s…
johnnyq Jan 23, 2026
85c37d7
Do not update document_updated_at field if document is moved, toggle …
johnnyq Jan 24, 2026
9318f42
Remove Folder option in edit document modal as this is reserved for m…
johnnyq Jan 24, 2026
ef9436a
Bugfix: Ticket edit modal not setting assigned agent
Jan 27, 2026
07df657
Bugfix: newline char showing in parsed emails
Jan 27, 2026
4693aa3
Render root in display_folders function in files instead of it being …
johnnyq Jan 27, 2026
ebfcc15
Feature: File Folders are collapsed by default with a global option t…
johnnyq Jan 27, 2026
d42d2d9
Remember folders expanded by Passing folders_expanded var in breadcru…
johnnyq Jan 27, 2026
704d770
Fix Icon to Chevron down if Expand all folders is clicked
johnnyq Jan 27, 2026
c0b7a26
API bugfixes before release:
Jan 28, 2026
e1a9303
Undo client scoping uses = instead of LIKE in tickets resolve.php ---…
Jan 28, 2026
0470159
Added function formatDuration to format times like worked etc, update…
johnnyq Jan 28, 2026
a60d3bb
More Ticket Details UI/UX Sprucing better label naming etc
johnnyq Jan 28, 2026
01288c8
Merge branch 'develop' of https://github.com/itflow-org/itflow into d…
Jan 28, 2026
c8a6513
Fix new times on new date time displays in ticket details
johnnyq Jan 28, 2026
19fa210
Merge branch 'develop' of github.com:itflow-org/itflow into develop
johnnyq Jan 28, 2026
874b07f
More UI/UX updated to ticket details shrink padding on right cards, u…
johnnyq Jan 29, 2026
bf1d065
Update Ticket list ui smaller badge for ticket and smaller task progr…
johnnyq Jan 29, 2026
018642c
Fix Ticket View / filtering
johnnyq Jan 29, 2026
ff0bb49
Tidy up Ticket to Invoice Description
johnnyq Jan 29, 2026
1ce4dd9
Updated PL report - changed Gross Profit to Gross Revenue as is more …
johnnyq Jan 29, 2026
bf1ccc6
Fix Collected Tax Report, was not adding totals OCT-Dec was misaligne…
johnnyq Jan 29, 2026
ae3386f
Fix Vendor phone formatting in Ticket details
johnnyq Jan 29, 2026
118cc10
During load user session check if user is archived and active, preve…
johnnyq Jan 30, 2026
34308a5
check if archived and active for client login as well along with load…
johnnyq Jan 30, 2026
38b4ed4
Tidy check_login for client portal
johnnyq Jan 30, 2026
3d11611
Attempt to Fix duplicate data entries by fast clicking submit in moda…
johnnyq Jan 31, 2026
61c5595
Fix Get type on add asset
johnnyq Feb 2, 2026
6aefe99
Update ticket Merge with a dropdown select box to select a ticket ins…
johnnyq Feb 3, 2026
af0f3ac
Update ticket Merge bulk with a dropdown select box to select a ticke…
johnnyq Feb 3, 2026
747b62d
Remove extra double quote
johnnyq Feb 3, 2026
f39e6cc
Remove old ticket merge code, rename kanban_v2 to to just kanban
johnnyq Feb 3, 2026
65d1f59
Feature: Favorites added to assets, Bulk Fav/unfav, adds favs to clie…
johnnyq Feb 4, 2026
6b6d847
Changes for M365 oAuth
cs2000 Feb 4, 2026
a50a4f2
Changes for M365 oAuth
cs2000 Feb 4, 2026
f6845a0
Changes for M365 oAuth
cs2000 Feb 4, 2026
f3f9d0d
Changes for M365 oAuth
cs2000 Feb 4, 2026
d2e8dc1
Changes for M365 oAuth
cs2000 Feb 4, 2026
2cca4f2
Changes for M365 oAuth
cs2000 Feb 4, 2026
91aba13
Fix Empty col in client overview if no fabvorite assets, fix creds pa…
johnnyq Feb 4, 2026
4079257
Update UI/UX for Adding and editing roles, Permissions can be set upo…
johnnyq Feb 4, 2026
10d1a90
Changes for M365 oAuth now using latest dev code
cs2000 Feb 5, 2026
563c0ea
Changes for M365 oAuth using dev code
cs2000 Feb 5, 2026
fc33312
SonarCube Suggestion
cs2000 Feb 5, 2026
7cbe9bf
SonarCube Suggestion
cs2000 Feb 5, 2026
629f4e0
SonarCube Suggestion
cs2000 Feb 5, 2026
6a6eb4a
SonarCube Suggestion
cs2000 Feb 5, 2026
9afb165
SonarCube Suggestion
cs2000 Feb 5, 2026
dca0cc3
Revert to original file from dev branch
cs2000 Feb 5, 2026
004b3b2
Draft of ticket_by_client report v2 not yet in the side menu of reports
johnnyq Feb 5, 2026
decea60
Bump TinyMCE 8.2.2 to 8.3.2
johnnyq Feb 5, 2026
065630b
Bump PHPMailer from 7.0.1 to 7.0.2
johnnyq Feb 5, 2026
d224d71
Bump Datatables from 2.3.4 to 2.3.7
johnnyq Feb 5, 2026
be172b5
Add star-toggle class to add asset
johnnyq Feb 5, 2026
bdd56c9
Update Credential Important to Favorite
johnnyq Feb 5, 2026
4d895a5
Merge pull request #1261 from cs2000/develop
johnnyq Feb 5, 2026
1c6795d
Bump app version
johnnyq Feb 6, 2026
1d8f77f
Update Changelog for 26.2 Release
johnnyq Feb 6, 2026
8d54bc3
Another change
johnnyq Feb 6, 2026
ec7f1d5
Fix Version
johnnyq Feb 6, 2026
546f10b
Testing Git changes on ticket_email_parser.php
johnnyq Feb 6, 2026
2ca8112
Revert Git change test to ticket_email_parser.php
johnnyq Feb 6, 2026
d1eeba6
Add bulk Fav / unfav creds and added fav creds to the client overview…
johnnyq Feb 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 0 additions & 6 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,6 @@ plugins/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer/URI/*
plugins/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer/CSS/*
!plugins/htmlpurifier/standalone/HTMLPurifier/DefinitionCache/Serializer/CSS/.gitkeep
.vscode/settings.json
xcustom/*
!xcustom/readme.php
post/xcustom
!post/xcustom/readme.php
admin/custom/*
!admin/custom/readme.php
agent/custom/*
Expand All @@ -53,5 +49,3 @@ setup/custom/*
api/v1/custom/*
!api/v1/custom/readme.php
.zed


49 changes: 49 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,55 @@

This file documents all notable changes made to ITFlow.

## [26.02] Stable Release
### Bug Fixes
- Mail Parser - Do not automatically send new ticket notifications to noreply/donotreply addresses.
- Ticket: removed newline \n on Parsed emails.
- Show Trips for everyone if accounting module is enabled.
- Fix Invoice Exporting.
- Fix Billable Column not sorting correctly in tickets.
- Fix Login flow where user agent and client user exists and agent has MFA but will not let them continue.
- Fix passing missing user_id var in client portal.
- Fix Ticket Templates not auto filling when selected.
- Fix Invoices not being sent to all billings contacts when manaully sent.
- Fix Documents and Files not able to be bulk deleted.
- Fix Role Archiving, can be archived as long as no users are assigned to the role.
- Fix showing Powered By ITFlow visibility on the login screen when Whitelabel is enabled.
- Missing username in audit log on successful login due to missing passed user_id to logging.
- API: Fix updating all documents instead of the intended document.
- Documents: Fix Document created at not showing the correct creation date of the master document.
- Ticket: Fixed Using edit ticket modal agent was not able to be set.
- Always check if a user is archived and or disabled instead of just during login.
- Report: Fix Collected tax report not totalling all tax categories.

### New Features & Updates
- Task Approval System for ticket tasks: Once an approval is requested, the task cannot be marked as complete until approved. Internal Approvals Any other technician, or Specific technician, Client Approvals Anyone (usually the requestor) Tech contacts Billing contacts.
- Printable Invoice Packing Slips now available.
- Drastic Performance Bump: Up to 50% faster queries accross the board and reduced server memory usage by 40% by switching Database Query method from mysqli_fetch_array to mysqli_fetch_assoc.
- Added Connect to Microsoft 365 Button to mail settings.
- OAUTH2 support for Microsoft 365 and Google Workspaces is now considered stable and working.
- Favorites: Assets and Credentials now can be favorited singly or by Bulk action. Favorited items appear in the client overview now.
- Files/Documents: Collapsable folders feature, collapsed by default with a button to expand all.
- URL Keys and such are now set to a more manageable 32 Characters by default.
- Various UI/UX Updates throughout the app, with focus oin ticket details, contact details modal etc.
- Added Show Archived files and documents to the files section.
- Added Bulk Archive and restore options to files and documents.
- Rewrite of the Kanban Ticket view to match our procedural style of coding.
- All options are available in TinyMCE now in Mobile mode.
- Agent names appear now in Invoice History section.
- Mail Parser: Support flowed text.
- Assets: Keep Purchase reference when copying.
- Assets: Add basic tracking history: Archiving, restoring, name changes, transferimg to new clients.
- Mail Parser: NDR Parsing.
- Allow SVG files in mail attachments.
- Tickets: Use a more friendly time worked instead of 02:41:00 translates to 2h 41m.
- Update wording on ticket to invoice item details.
- Merge Tickets: Now wth a ticket merge dropdown list of tickets instead of a text field.
- Role Permissions can now be set during role creation, update Permission UI to use radio buttons instead of select boxes.
- Bump TinyMCE 8.2.2 to 8.3.2.
- Bump PHPMailer from 7.0.1 to 7.0.2.
- Bump Datatables from 2.3.4 to 2.3.7.

## [25.12.1] Maint Release

### Major Changes
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<br />
<a href="https://demo.itflow.org"><strong>View demo</strong></a>
<br />
Username: <b>demo@demo</b> | Password: <b>demo</b>
Username: <b>demo@demo.com</b> | Password: <b>demo</b>
<br />
<br />
<a href="https://itflow.org/#about">About</a>
Expand Down Expand Up @@ -93,6 +93,7 @@ If you want to improve ITFlow, feel free to fork the repo and create a pull requ
We’re incredibly grateful to the organizations and individuals who support the project - a big thank you to:
- CompuMatter
- F1 for HELP
- digiBandit
- JetBrains (PhpStorm)

## License
Expand Down
2 changes: 1 addition & 1 deletion admin/ai_model.php
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
<tbody>
<?php

while ($row = mysqli_fetch_array($sql)) {
while ($row = mysqli_fetch_assoc($sql)) {
$provider_id = intval($row['ai_provider_id']);
$provider_name = nullable_htmlentities($row['ai_provider_name']);
$model_id = intval($row['ai_model_id']);
Expand Down
2 changes: 1 addition & 1 deletion admin/ai_provider.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
<tbody>
<?php

while ($row = mysqli_fetch_array($sql)) {
while ($row = mysqli_fetch_assoc($sql)) {
$provider_id = intval($row['ai_provider_id']);
$provider_name = nullable_htmlentities($row['ai_provider_name']);
$url = nullable_htmlentities($row['ai_provider_api_url']);
Expand Down
18 changes: 12 additions & 6 deletions admin/api_keys.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
<div class="dropdown-menu">
<button class="dropdown-item text-danger text-bold"
type="submit" form="bulkActions" name="bulk_delete_api_keys">
<i class="fas fa-fw fa-trash mr-2"></i>Revoke
<i class="fas fa-fw fa-trash mr-2"></i>Delete
</button>
</div>
</div>
Expand Down Expand Up @@ -105,7 +105,7 @@
<tbody>
<?php

while ($row = mysqli_fetch_array($sql)) {
while ($row = mysqli_fetch_assoc($sql)) {
$api_key_id = intval($row['api_key_id']);
$api_key_name = nullable_htmlentities($row['api_key_name']);
$api_key_secret = nullable_htmlentities("************" . substr($row['api_key_secret'], -4));
Expand Down Expand Up @@ -139,9 +139,16 @@
<i class="fas fa-ellipsis-h"></i>
</button>
<div class="dropdown-menu">
<a class="dropdown-item text-danger text-bold confirm-link" href="post.php?delete_api_key=<?php echo $api_key_id; ?>&csrf_token=<?php echo $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-times mr-2"></i>Revoke
</a>
<?php if ($api_key_expire > date("Y-m-d H:i:s")) { ?>
<a class="dropdown-item text-danger text-bold confirm-link" href="post.php?revoke_api_key=<?php echo $api_key_id; ?>&csrf_token=<?php echo $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-times mr-2"></i>Revoke
</a>
<?php } ?>
<?php if ($api_key_expire < date("Y-m-d H:i:s")) { ?>
<a class="dropdown-item text-danger text-bold confirm-link" href="post.php?delete_api_key=<?php echo $api_key_id; ?>&csrf_token=<?php echo $_SESSION['csrf_token'] ?>">
<i class="fas fa-fw fa-times mr-2"></i>Delete
</a>
<?php } ?>
</div>
</div>
</td>
Expand All @@ -164,4 +171,3 @@

<?php
require_once "../includes/footer.php";

6 changes: 3 additions & 3 deletions admin/app_log.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@

<?php
$sql_types_filter = mysqli_query($mysqli, "SELECT DISTINCT app_log_type FROM app_logs ORDER BY app_log_type ASC");
while ($row = mysqli_fetch_array($sql_types_filter)) {
while ($row = mysqli_fetch_assoc($sql_types_filter)) {
$log_type = nullable_htmlentities($row['app_log_type']);
?>
<option <?php if ($type_filter == $log_type) { echo "selected"; } ?>><?php echo $log_type; ?></option>
Expand All @@ -85,7 +85,7 @@

<?php
$sql_categories_filter = mysqli_query($mysqli, "SELECT DISTINCT app_log_category FROM app_logs ORDER BY app_log_category ASC");
while ($row = mysqli_fetch_array($sql_categories_filter)) {
while ($row = mysqli_fetch_assoc($sql_categories_filter)) {
$log_category = nullable_htmlentities($row['app_log_category']);
?>
<option <?php if ($category_filter == $log_category) { echo "selected"; } ?>><?php echo $log_category; ?></option>
Expand Down Expand Up @@ -141,7 +141,7 @@
<tbody>
<?php

while ($row = mysqli_fetch_array($sql)) {
while ($row = mysqli_fetch_assoc($sql)) {
$log_id = intval($row['app_log_id']);
$log_type = nullable_htmlentities($row['app_log_type']);
$log_category = nullable_htmlentities($row['app_log_category']);
Expand Down
13 changes: 6 additions & 7 deletions admin/audit_log.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,15 +80,15 @@
</div>
</div>
</div>

<div class="col-sm-2">
<div class="input-group mb-3 mb-md-0">
<select class="form-control select2" name="client" onchange="this.form.submit()">
<option value="">- All Clients -</option>

<?php
$sql_clients_filter = mysqli_query($mysqli, "SELECT * FROM clients ORDER BY client_name ASC");
while ($row = mysqli_fetch_array($sql_clients_filter)) {
while ($row = mysqli_fetch_assoc($sql_clients_filter)) {
$client_id = intval($row['client_id']);
$client_name = nullable_htmlentities($row['client_name']);
?>
Expand All @@ -108,7 +108,7 @@

<?php
$sql_users_filter = mysqli_query($mysqli, "SELECT * FROM users ORDER BY user_name ASC");
while ($row = mysqli_fetch_array($sql_users_filter)) {
while ($row = mysqli_fetch_assoc($sql_users_filter)) {
$user_id = intval($row['user_id']);
$user_name = nullable_htmlentities($row['user_name']);
?>
Expand All @@ -128,7 +128,7 @@

<?php
$sql_types_filter = mysqli_query($mysqli, "SELECT DISTINCT log_type FROM logs ORDER BY log_type ASC");
while ($row = mysqli_fetch_array($sql_types_filter)) {
while ($row = mysqli_fetch_assoc($sql_types_filter)) {
$log_type = nullable_htmlentities($row['log_type']);
?>
<option <?php if ($type_filter == $log_type) { echo "selected"; } ?>><?php echo $log_type; ?></option>
Expand All @@ -147,7 +147,7 @@

<?php
$sql_actions_filter = mysqli_query($mysqli, "SELECT DISTINCT log_action FROM logs ORDER BY log_action ASC");
while ($row = mysqli_fetch_array($sql_actions_filter)) {
while ($row = mysqli_fetch_assoc($sql_actions_filter)) {
$log_action = nullable_htmlentities($row['log_action']);
?>
<option <?php if ($action_filter == $log_action) { echo "selected"; } ?>><?php echo $log_action; ?></option>
Expand Down Expand Up @@ -225,7 +225,7 @@
<tbody>
<?php

while ($row = mysqli_fetch_array($sql)) {
while ($row = mysqli_fetch_assoc($sql)) {
$log_id = intval($row['log_id']);
$log_type = nullable_htmlentities($row['log_type']);
$log_action = nullable_htmlentities($row['log_action']);
Expand Down Expand Up @@ -280,4 +280,3 @@

<?php
require_once "../includes/footer.php";

2 changes: 1 addition & 1 deletion admin/category.php
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ class="fas fa-fw fa-archive mr-2"></i>Archived</a>
<tbody>
<?php

while ($row = mysqli_fetch_array($sql)) {
while ($row = mysqli_fetch_assoc($sql)) {
$category_id = intval($row['category_id']);
$category_name = nullable_htmlentities($row['category_name']);
$category_color = nullable_htmlentities($row['category_color']);
Expand Down
2 changes: 1 addition & 1 deletion admin/contract_template.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_array($sql)) {
while ($row = mysqli_fetch_assoc($sql)) {
$id = intval($row['contract_template_id']);
$name = nullable_htmlentities($row['contract_template_name']);
$type = nullable_htmlentities($row['contract_template_type']);
Expand Down
2 changes: 1 addition & 1 deletion admin/custom_link.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
<tbody>
<?php

while ($row = mysqli_fetch_array($sql)) {
while ($row = mysqli_fetch_assoc($sql)) {
$custom_link_id = intval($row['custom_link_id']);
$custom_link_name = nullable_htmlentities($row['custom_link_name']);
$custom_link_uri = nullable_htmlentities($row['custom_link_uri']);
Expand Down
Loading