# Changelog This file documents all notable changes made to ITFlow. ## [25.05] ### Added / Changed - Expanded file upload allow-list to include .bat and .stk file types. - Added full backup/restore functionality. Backup downloads a zip that includes the SQL dump and uploads folder, setup now has option to restore from zip backup. - Migrated Asset and Contact Links to modals to resolve variable overlap issue. - Added Pagination to Notification Modal. - Removed 500 Records Per Page option. - Removed unused old DB checks in the top nav. - Clients can now use the portal to setup Stripe automatic payments themselves for recurring invoices - Automatic payments are now disabled for all recurring invoices if the saved payment method is removed - Added Card Details and Payment added to Client Stripe. - UI / UX updates to guest pay Make use of cards. - Don't show Checkbox columns when ticket is closed, compact ticket list now matches round pills for status and priority. - Ticket UI/UX update allow the ticket toolbar to be a little more mobile-friendly - UI / UX Updates to Expenses - Combine Category and Description into 1 column. - Country information is now displayed in Invoices, Quotes, Recurring Invoices, Clients, Locations, and the client top header. - Added country-based search filters in Locations and Clients sections. - Changed the settings name from Integrations to Identity Providers to make room for future iDPs (e.g. Google). - Bump FullCalendar from 6.1.15 to 6.1.17. - Bump DataTables from 2.2.2 to 2.3.1. - Bump TCPDF from 6.8.2 to 6.9.4. - Bump tinyMCE from 7.7.1 to 7.9.0. - Bump phpMailer from 6.9.2 to 6.10.0. - Bump stripe-php from 16.4.0 to 17.2.1. ### Fixed - "None" option for SMTP encryption now functions correctly. - Debug table row counts now reflect actual counts instead of relying on SHOW TABLE STATUS. - Archived Categories now display properly. - Stripe saved payment methods are now limited to credit/debit cards only. ## [25.03.6] ### Fixed - Set default to date to 2035-12-31 as 9999-12-31 and 2999-12-31 broke certain browsers. - Update Client PDF Export, add header added company logo. - Present Larger clearer Warning about updates on update page. - Allow to search by project reference. ## [25.03.5] ### Fixed - Fixed the user listing issue when copying a trip. - Corrected the display of recurring invoice amounts on the dashboard. - Fixed the linking of entities with assets and contacts. - Resolved the issue with displaying the correct mobile country code in the contact listing. - Set the default date to `9999-12-31` to ensure future items (like invoices) are displayed by default. - Fixed the display issue where file folders were not showing properly during document creation. - Migrated from Dragula to SortableJS for a more modern, mobile-friendly solution. - Added Handlebars icons for drag-and-drop items. - Changed behavior to open Contact and Asset Details pages directly instead of using a modal. ## [25.03.4] ### Fixed - Ability to remove additional assets from the ticket details screen. - Fix the ability to remove assets from edit ticket not working when only 1 asset exists. - Fix Database Backup corruption. - Client Portal - show ticket number instead of ticket id in ticket listing. - Add Purchase Reference to copy asset. - Add Link to asset details from the global search. - Fix Bulk assign ticket only showing contacts instead of ITFlow users. ## [25.03.3] ### Fixed - Fix adding ITFlow user. - Do not alert on inactive recurring invoices. - Fix ticket user assignment including bulk assignment. - Fix adding a location phone extension. - Do not default to +1 Country code, instead default to null. - Do not format numbers unless a country code is entered. - Fix editing network location. - Fix ticket redaction on client replies. - Remove more from user activity as it requires admin privledges. - Fix MFA Enforcement page. ## [25.03.2] ### Fixed - Revert DB.sql change ## [25.03.1] ### Fixed - Phone number missing in various sections. - Match Database. - Client Export Only display licenses users and assets from the selected client only. ## [25.03] ### Fixed - Resolved missing attachments in ticket replies processed via the email parser. - Fixed issue where the top half of portrait image uploads appeared cut off at the bottom. - Ensured all tables and fields use `CHARACTER SET utf8mb4` and `COLLATE utf8mb4_general_ci` for updates and new installations. - Converted `service_domains` table to use InnoDB instead of MyISAM. - Fixed the initials function to properly handle UTF-8 characters, preventing contact-related issues. - Interfaces can now start with `0`. - Adjusted AI prompt handling to focus solely on content, avoiding unnecessary additions. ### Added / Changed - Introduced bulk delete functionality for assets. - Added the ability to redact ticket replies after a ticket is closed. - Added support for redacting specific text while a ticket is open. - Switched file upload hashing from SHA256 to MD5 to significantly improve performance. - Enabled assigning multiple assets to a single ticket. - Updated all many-to-many tables to support cascading deletes using foreign key associations, improving efficiency, performance, and data integrity. - Enabled caching for AJAX modals to reduce repeated reloads and enhance browser performance. - Upgraded DataTables from 2.2.1 to 2.2.2. - Upgraded TinyMCE from 7.6.1 to 7.7.1, providing a significant performance boost. - Added “Copy Credentials to Clipboard” button in AJAX asset and contact views. - Renamed and reorganized several tables. - Improved theme color organization by grouping primary colors and their related shades. - Displayed a user icon next to contacts who have user accounts. - New image uploads are now converted to optimized `.webp` format by default; original files are no longer saved. Existing images remain unchanged. - Added international phone number support throughout the system. - Introduced user signatures in preferences, which are now appended to all ticket replies. - Optimized search filters to only display defined tags. - Added “Projects” to the client-side navigation. - Enabled “Create New Ticket” from within project details. - Reintroduced batch payment functionality in client invoices. - Included client abbreviations in both client and global search options. - Added assigned software license details (User/Asset) to the client PDF export. - Replaced client-side `pdfMake` with the PHP-based `TCPDF` library for generating client export runbooks. - Introduced the ability to download documents as PDFs. - Added a “Reference” field to tickets and invoices generated from recurring templates (not yet in active use). ### Breaking Changes > **Important:** To update to this version, you **must** run the following commands from the command line from the scripts directory: > > ```bash > php update_cli.php > php update_cli.php --db_update > ``` > > Repeat `--db_update` until no further updates are found. > > **Back up your system before upgrading.** > This version includes numerous backend changes critical for future development. ## [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 - Fixed notifications being reversed as dismissed notifications. ## [25.02.2] ### Fixed - Corrected some edit modals not showing notes correctly. - Bugfix: When exporting to CSV, the first asset wasn't being shown. - Fix broken create / edit credentials. - Fixed missing Notificatons link. - Fixed a few dead links. - Fixed Overdue count also counting Non-Billable Invoices. - Fix Edit Client Notes. ### Added / Changed - Implemented SSL certificate history tracking. - Added Inactive / Active Filter to Recurring Invoices. - Merged Dismissed notifications and notification in one. - Added Link Button to addd / edit Document WYSIWYG. - Added Physical location to the asset export / import. ## [25.02.1] ### Fixed - Resolved broken links in the client overview, project and client listings, and rack details. - Corrected asset transfer functionality to clients. - Fixed the ticket scheduling redirect. - Corrected the ticket link in the Scheduled Ticket Agent Notification email. - Addressed issues with credentials and ticket actions in the Contact Detail Modal. - Fixed text wrapping in notifications. - Adjusted notifications so that they are sorted with the newest first. - Fixed drag-and-drop functionality for tickets in the Kanban view on mobile devices. - Resolved a weird issue with TinyMCE that prevented using links referencing your ITFlow instance url. - Corrected image orientation issues during upload and the preview optimization process. ### Added / Changed - Introduced entity link indicator icons and counts in the contacts and credentials section. - Implemented a fade animation for the new AJAX modal. - Removed the Client Overview Expire Day Select and replaced it with simplified 1, 7, or 45-day options. - Added the ability to link and unlink entities within asset details. - Introduced quick tag/category creation across the app. - Added a Vendor Quick Details Modal. - Enabled vendor linking and added a License Purchase Reference in the Software Licenses section. - Added download original, optimized and thumbnail option for images. - Added Paid status to the top corner of Invoice PDFs. ## [25.02] ### Fixed - Migrated several reports to the new permissions/roles system. - Resolved issue with empty task box showing for closed/resolved tickets. - Corrected ticket priority sorting. - Cloned asset interfaces when transferring assets between clients. ### Added / Changed - Restored max number of records per page option back to 500 since we dont have repeating modals. - Bulk Categorize Tickets feature. - Renamed "Interface port" to "Interface Description." "Interface Name" should now refer to port name and/or number. - Changed "Transfer Asset to Client" from a single action to a bulk action. - Updated Filter Footer UI to show "Showing x to x of x records" instead of just the total records. - Added Client Overview section to view client assets, contacts, licenses, credentials, etc. - Introduced Quick Peek for asset details, contact information, and document viewing throughout the ITFlow App, all made possible by AJAX. - Enabled Simple Drag-and-Drop Ordering for Invoices, Recurring Invoices, Quotes, Ticket Tasks, and Ticket Template Tasks. - Added new Ticket View options: Kanban and Simple View. - Migrated all repeating modals to the new AJAX modal function for faster loading times and quicker development. - Allowed clients to upload PDF documents to accepted quotes. - Client Portal now shows ticket category. - Custom links can now be added to the Client Portal navbar. - Lots of little tweaks to UI, performance, bugs, etc. ### Breaking Changes - Cron scripts have officially been moved to the /scripts folder and are no longer in the root directory; they must be updated to function properly. ## [25.01.3] ### Fixed - Fixed ticket assignment modal showing client contacts. ## [25.01.2] ### Fixed - Fixed app version. ## [25.01.1] ### Added / Changed - Redesigned the Multi-Factor Authentication (MFA) Setup and Enforcement Flow UI/UX for a more intuitive user experience. - Added a "Member" column in the user roles listing for improved visibility. - General UI/UX improvements, along with minor performance optimizations and cleanups. ### Fixed - Fixed an issue where Stripe was not appearing as a recurring payment option. - Corrected inaccurate Quarter 2 Expense results in the Profit & Loss Report. - Resolved TOTP code not displaying correctly on hover in the Contact or Asset Details sections. - Archived contacts no longer appear in the Bulk Mail section. - Fixed an issue where the Ticket Assign Modal was showing both ITFlow and client users. - Fixed issue with login key redirecting to legacy client portal page. ## [25.01] ### Added / Changed - Added support for saving cards in Stripe for automatic invoice payments. - Page titles now display detailed information (e.g., page name, client selection, company name, ticket and invoice info) for easier multi-tab navigation. - Reintroduced the new admin role-check for admin pages. - Admin roles can now be archived. - Debug mode now shows the current Git branch. - The auto-acknowledgment email for email-parsed tickets now includes a guest link. - Recurring tickets no longer require a contact. - Stripe online payment setup now prompts you to set the income/expense account. - New cron/CLI scripts have been moved to the `/scripts` subfolder — remember to update your cron configurations! - Moved modal includes to `/modals` to tidy up the root directory. - Moved most include files to `/includes` to improve directory structure. - Moved guest pages to `/guest` for better organization. - Renamed the include file `pagination.php` to `filter_footer.php`, as it is used in conjunction with `filter_header.php` for page filtering. - Guest ticket feedback now shows the ticket prefix and number, not just the ID. - Individual POST handler logic pages are no longer directly accessible. - Added the ability to delete payments on the Payments and Client Payments pages. - Implemented domain history tracking. - Added Asset Interface Linking/Connections to show what interface is connected to which interface port of another asset. - Added Force Recurring Ticket option in more locations, not just for recurring tickets. - Implemented row spanning and centered devices that occupy multiple units in a rack. - Added tooltips to main navigation badge counts to clarify what is being counted. - Reduced max records per page from 500 to 100 to prevent performance issues. - Updated several plugins: - `stripe-php` from 10.5.0 to 16.4.0 - `Inputmask` from 5.0.8 to 5.0.9 - `DataTables` from 2.1.8 to 2.2.1 - `pdfmake` from 0.2.8 to 0.2.18 - `php-mime-mail-parser` to 9.0.1 - `TinyMCE` from 7.5.1 to 7.6.1 - Removed unused libraries from the vendor folder and moved Stripe to the plugins folder, eliminating the vendor folder. - Merged the MFA TOTP functionality files `base32static.php` and `rfc6238.php` into a single file (`totp`) and moved it to the plugins folder. - No longer need to pass the DB connection (`$mysqli`) to the `addToMailQueue` function. - Disabled HTML Purifier caching. - Replaced the `nullable_htmlentities` function with `htmlspecialchars`. - Updated filter variable naming. - Implemented other minor UI updates, performance optimizations, and directory cleanups. ### Fixed - Fixed an issue where the ticket edit modal didn't show multi-client or no-client projects. - Fixed asset interface losing DHCP settings. - Fixed a 500 error when creating or editing recurring expenses due to an incorrect variable name. - Fixed tickets created via the portal/email not being marked as billable. - Fixed issues with editing recurring expenses. - Resolved a regression where the TinyMCE editor didn’t display when adding or editing ticket templates. - Fixed a TinyMCE license issue. ### Removed / Deprecated - Deprecated the cron scripts in the root directory. Cron jobs should now use the ones in the `/scripts` subfolder, which no longer require a cron key and must be run via CLI. ### BREAKING CHANGES - The client portal has been moved from `/portal` to `/client`: - Links in previous emails will be broken. - The Azure Entra ID SSO Redirect URI needs to be updated to `/client`. - You may need to update other links (e.g., website, support page). - Guest links have been moved from `/` to `/guest`. Previous links will be broken. ## [24.12] ### Added / Changed - Introduced versioned releases for the first time!