Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
141 commits
Select commit Hold shift + click to select a range
c44ae74
Update readme
Aug 12, 2026
eda32f7
Update security
Aug 12, 2026
691059a
Debug - bump php memory flag to 512M
Aug 13, 2026
a084e37
Initial migration from AdminLTE 3 to 4, bootstrap 4 to 5
johnnyq Aug 14, 2026
e6da3fd
Remove script
johnnyq Aug 14, 2026
0fe6d51
Theme Fixes for adminlte 4
johnnyq Aug 14, 2026
dc6b191
Update Font, Migrated away from JQUERY dependent libs: toastr to boot…
johnnyq Aug 14, 2026
2354dd1
Migrate fully away from Jquery Stage 1
johnnyq Aug 14, 2026
bbbfff7
All Jquery removed replaced with stand JS and non jqery dependent libs
johnnyq Aug 14, 2026
6fc94d9
Migrated confirm modal to sweetalert2 lib
johnnyq Aug 14, 2026
1c5803d
Removed dead libs pdfmake dropzone and popper, fixed missing label fo…
johnnyq Aug 14, 2026
e2512b0
Fixed Side nav titles, Fixed ajax on bootstrap modals, fixed paginati…
johnnyq Aug 14, 2026
35239b5
Resize top nav and compoents
johnnyq Aug 14, 2026
8c0e524
Fix Card Margin bottoms client header and ticket cards on the right
johnnyq Aug 14, 2026
c44fa30
Fix Mail settings tabs regression and user menu coloring
johnnyq Aug 15, 2026
73e10e7
Update filter bar, increase height on top navbar, primary buttons now…
johnnyq Aug 15, 2026
2375e69
Update badge classes to bg
johnnyq Aug 15, 2026
72c037c
Fix Date Range FlatPickr defaulting to 1970 for All time now default …
johnnyq Aug 15, 2026
56d9e04
Update Theme select to use new bootstrap 5 radio button
johnnyq Aug 15, 2026
bdab434
Fix Margins in various areas
johnnyq Aug 15, 2026
77319f8
update_cli.php now updates both the app and all database updates in o…
johnnyq Aug 15, 2026
d5ee0bf
update_cli.php now does both db and forces app updates all in one go …
johnnyq Aug 15, 2026
4c4c172
Feature: queued Updates which now eliminates the need for shell_exec …
johnnyq Aug 15, 2026
6ef84c4
Feature: Add Ticket Canned Responses
johnnyq Aug 15, 2026
bcc7373
Apply custom css across the board including client portal and guest
johnnyq Aug 15, 2026
6af0634
Ticket SLA: Fix on hold to pause only after first reply, show resolve…
johnnyq Aug 15, 2026
1514934
Update DB Structure
johnnyq Aug 15, 2026
35ddd1a
Feature: Designate a client record as your organization currently onl…
johnnyq Aug 16, 2026
0f69ef8
Fix Dark mode bg-light and btn-light and multi select box table check…
johnnyq Aug 16, 2026
92377b9
Dark Mode Patches across the board for Calendar TinyMCE additonal dar…
johnnyq Aug 16, 2026
6df101c
Css fixes
johnnyq Aug 17, 2026
5c7f641
Fix Ticket Notification in Portal was calling a function that was rem…
johnnyq Aug 17, 2026
c84bb56
Fix Generate readable passwords
johnnyq Aug 17, 2026
ba319a8
Fix d-print-none adminlte 3 override of bootstrap css class so sienav…
johnnyq Aug 18, 2026
858acbc
Bump AdminLTE which brings back AdminLTE colors
johnnyq Aug 18, 2026
fc5dc82
Bump AdminLTE to 4.7.0 to fix print issues
johnnyq Aug 18, 2026
f2b2082
css
johnnyq Aug 19, 2026
3a64d53
Bug: Fix not being able to open ticket for clients marked as a lead
Aug 20, 2026
f94181c
Merge branch 'develop' of https://github.com/itflow-org/itflow into d…
Aug 20, 2026
baf1164
Notify when mail parser skips an autogenerated ticket
Aug 20, 2026
ffda605
Add Fake Demo Data Seed stretching over 2 year span
johnnyq Aug 24, 2026
1381add
Feature: Added network IPs section to document network IP and their h…
johnnyq Aug 25, 2026
59cb772
Revised the network info sidebar, added ip count, prefixed subnet IP …
johnnyq Aug 25, 2026
bd868d8
Keep networks side nav active in network IP view
johnnyq Aug 25, 2026
3a19921
Add Darkmode support for Sweetalert2 Modals
johnnyq Aug 25, 2026
0843dc9
Update AdminLTE from 4.7.0 to 4.8.5 and switched adminlte colors to u…
johnnyq Aug 25, 2026
4da0862
Prune un-nessary overides in itflow custom css as adminlte 4.8.5 fixe…
johnnyq Aug 25, 2026
5cf14ee
Fix Extra Blank Page when printing, adminlte bug created overide, Do …
johnnyq Aug 25, 2026
4b9c536
Use AdminLTE4 new nav bar Search class looks great
johnnyq Aug 25, 2026
fdc2a8c
Switch some bg-primary to bg-blue so they are consistent across theme…
johnnyq Aug 25, 2026
d20e3f7
Add Margin and remove un needed card surrounding calendar
johnnyq Aug 25, 2026
c6d642f
Use new lte skin preview class for themes instead of colored circles
johnnyq Aug 25, 2026
0440aa8
Fix copy to clipboard to be a ntn-link instead of a button fixes admi…
johnnyq Aug 25, 2026
6d04394
Updated Adminlte from 4.8.5 to 4.9.1 to fix print issues
johnnyq Aug 26, 2026
71cfdf5
Pruned printer custom css patches as upstream vendor adminlte fixed t…
johnnyq Aug 26, 2026
3d9a41b
Bump imapengine from 1.25.4 to 1.25.6 and dependencies
johnnyq Aug 26, 2026
cfafc38
Bump intl-tel-input
johnnyq Aug 26, 2026
96f2c69
use intl js lib across all phone number fields
johnnyq Aug 26, 2026
422f88c
Retain PHone Country code on edit
johnnyq Aug 26, 2026
806732c
Display Phone number Country Codes
johnnyq Aug 26, 2026
e637da6
Added More Meaningful nothing matches filters or no records exist
johnnyq Aug 26, 2026
2409c98
Added Border End to clients checkbox column
johnnyq Aug 26, 2026
1bebd2d
Fix Light mode Initialization flash when in dark mode
johnnyq Aug 27, 2026
93fc6cd
Offset background color fix datepciker empty right column
johnnyq Aug 27, 2026
51c9255
Remove thr web updater this is now either queued from the web or ran …
johnnyq Aug 27, 2026
14c38b9
Remove DB Update from WebUI as this is handled by the update_cli backend
johnnyq Aug 27, 2026
069f587
Implemented Check for updates which removs the last shell exec from w…
johnnyq Aug 27, 2026
bf04d6a
Ticket default to Medium Priority unless specified, as this is just g…
johnnyq Aug 27, 2026
855a608
Default to Public reply by default in Ticket Reply
johnnyq Aug 27, 2026
ac175e7
Add SLA response target to ticket created emails, with a call-in note…
johnnyq Aug 27, 2026
4e1d72e
Roll SLA email targets up to business days, escape priority, validate…
johnnyq Aug 27, 2026
32811fd
Security: gate and client-scope the client overview record pages
johnnyq Aug 27, 2026
12ed623
Add Holiday / Closure Days to SLA to pause SLA timer on defined days,…
johnnyq Aug 27, 2026
131b10e
Fix Active Side nav Highlight
johnnyq Aug 27, 2026
6d5152d
Fix Tom Select JS Jankiness on page load
johnnyq Aug 27, 2026
f980893
Make each page refresh feel less Jenky with Smooth Fade Page Transitions
johnnyq Aug 28, 2026
877474b
Speed up client context pages - badge counts are now one query per ta…
johnnyq Aug 28, 2026
0838ed0
Add indexes on the client-scoped columns (db 2.7.5)
johnnyq Aug 28, 2026
1eabf1e
Cleanup CSS Drop dead view transitions
johnnyq Aug 28, 2026
f182eec
Fix content area flashing blank on every client page - defer the clie…
johnnyq Aug 28, 2026
988788b
Add height placeholder to calendar to reduce jankiness on load
johnnyq Aug 28, 2026
1119e13
restore nice toast alerts
johnnyq Aug 28, 2026
8f884f7
Cleanup - fix two broken script paths and drop 29 dead/duplicate file…
johnnyq Aug 28, 2026
27c5502
Index the per-parent child fetches and the mail queue loop (db 2.7.6)
johnnyq Aug 28, 2026
6d13237
DB Structure Update
johnnyq Aug 28, 2026
097891e
Add Primary Location / Contact if missing link modals
johnnyq Aug 28, 2026
20b8fb5
Make Add Primary links small
johnnyq Aug 28, 2026
72e6f23
Send Email and Mark Sent modals for invoices and quotes (db 2.7.7)
johnnyq Aug 28, 2026
68b15ca
Email Invoice Only shows Billing and Primary, Quote shows Important B…
johnnyq Aug 28, 2026
86ba041
Add Quick Send Quote / Invoice to replicate the old single click to S…
johnnyq Aug 28, 2026
3425020
Feature: Added Send Account Statment in Client Invoices Drop Down wit…
johnnyq Aug 28, 2026
6586a55
Fix Send Client Account Statement Bug
johnnyq Aug 28, 2026
c53b240
Spruced up the Account Statement on Guest View Invoice
johnnyq Aug 28, 2026
c10d4eb
Add Account Statment in Client Portal with option to download as a PDF
johnnyq Aug 28, 2026
194841e
Add Empty state messages in client portal instead of just showing an …
johnnyq Aug 28, 2026
10fb40f
Feature: Major spruce up of the client portal profile page, added Dep…
johnnyq Aug 28, 2026
be20810
Use Datatables for User Activity on the client portal
johnnyq Aug 28, 2026
8201034
Add Top Bottom Margin for Guest Quote and Invoice Quote
johnnyq Aug 28, 2026
156c512
Fix client portal review findings: PIN wipe, log indexing, statement …
johnnyq Aug 28, 2026
d66e26d
DB Update
johnnyq Aug 28, 2026
bd7f67a
Enhancement: Files: Document and Files are easily distinguashable now…
johnnyq Aug 28, 2026
bfa53df
Rewrite of the demo data seed includes more alternative products incl…
johnnyq Aug 28, 2026
8d25337
Added More Client to Demo Seed, even better relations, filled out mor…
johnnyq Aug 28, 2026
3277567
Demo Data Take 6
johnnyq Aug 28, 2026
950d02d
Fix: Six ajax modals had dead JS - DOMContentLoaded had already fired…
johnnyq Aug 28, 2026
087c75f
Dont show the reply card in ticket until a reply button is clicked
johnnyq Aug 29, 2026
f6e03b2
Add Chevron to show top client collapse
johnnyq Aug 29, 2026
f395d22
Collapsable Client Top Head collapsable is remembered upon navigation
johnnyq Aug 29, 2026
06d6d4b
Bump ITFlow App Version to from 26.08.2 to 26.09, updated changelog
johnnyq Aug 29, 2026
20b406c
Add margin bottom to the ticket filter
johnnyq Aug 29, 2026
d98b8bc
Add ps-3 to table columns that don't have a checkbox and made sure al…
johnnyq Aug 29, 2026
231651b
Make saved payment wording clearer
wrongecho Aug 30, 2026
9bc0bf0
Stripe ID creation/linking for guest flows (wip)
wrongecho Aug 30, 2026
f83dc8a
Fix idiot copy/paste
wrongecho Aug 30, 2026
401f0df
Stripe ID creation/linking for guest flows
wrongecho Aug 30, 2026
318eb7c
Stripe - Warn the user if the secret key is not valid during provider…
wrongecho Aug 30, 2026
5a925f8
Move payment provider post vars to a model to reduce repetition
wrongecho Aug 30, 2026
16b46c1
Stripe Invoice Payments
wrongecho Aug 30, 2026
d9cb025
Small payment bugfixes
wrongecho Aug 30, 2026
c07c10c
Fix Guest Approve Modal Offscreen issue, added guest header and spruc…
johnnyq Aug 31, 2026
271d780
Added some Margin bottom to guest stripe pay invoice fixes mobile view
johnnyq Aug 31, 2026
dd1936c
Added some Margin bottom to guest task approval card
johnnyq Aug 31, 2026
accc194
Fix Color Class
johnnyq Aug 31, 2026
364c9e2
Use built in sticky footer css class for The ITFlow footer in admin
johnnyq Aug 31, 2026
c89e3a9
Add Proper footers to Guest Area and client portal
johnnyq Aug 31, 2026
68f1806
Fix Syntax error in name, update contributing
johnnyq Aug 31, 2026
7442e0c
Move interface deletion inside delete check otherwise the count is of…
wrongecho Aug 31, 2026
bcdfab9
Fix approval Syntax
johnnyq Aug 31, 2026
b0c12ac
More Syntax Fixes
johnnyq Aug 31, 2026
36ea4a9
API: allow reads to filter by client_id on top of RBAC client scoping
johnnyq Aug 31, 2026
fd81c17
rm mention of GH Issues
Sep 1, 2026
f947da6
Bump security version
Sep 1, 2026
d21d4c7
Hide option to delete ticket when it is closed as we treat closed tic…
Sep 1, 2026
7fe0f86
Tickets API - add close endpoint
Sep 1, 2026
e95b3c1
API - Add app logging when auth is fine but queries fail
Sep 1, 2026
450f249
Tickets API - add close endpoint (simplify)
Sep 1, 2026
7b986ed
Bugfix: Client update API would error out if client_lead/client_is_le…
Sep 1, 2026
491d459
Make client delete modal even clearer
Sep 1, 2026
d16ae9b
Client API - Add delete endpoint (thank you @BoredManCodes)
Sep 1, 2026
3004578
Update Changelog
johnnyq Sep 1, 2026
e528ef8
Changelog update
johnnyq Sep 1, 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
  •  
  •  
  •  
139 changes: 138 additions & 1 deletion CHANGELOG.md

Large diffs are not rendered by default.

6 changes: 4 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ ITFlow does not use prepared statements or an ORM; queries are built as strings.
- **Integers** (IDs, flags, counts): `intval($_POST['ticket_id'])`. Interpolate unquoted.
- **Strings**: `escapeSql($_POST['subject'])`. This normalizes encoding to UTF-8, then runs `strip_tags()`, `trim()`, and `mysqli_real_escape_string()`. Because it relies on SQL escaping, the value **must be placed inside quotes in the query** (`'$subject'`). An escaped string interpolated without quotes is still injectable.
- **Values read back from the database** get the same treatment before reuse in another query (you will see `escapeSql($row['ticket_prefix'])` throughout — this is why).
- **`logAudit()`, `appNotify()`, `logHistory()` and `logTicketHistory()` are queries too.** They interpolate their `$description` / `$details` / `$status` arguments straight into an `INSERT` — the SQL is just hidden inside the helper. A DB-read value passed into one of them (`logAudit("Asset", "Delete", "$asset_name ...", ...)`) must be `escapeSql`'d first, exactly as if you had written the `INSERT` by hand. This is easy to miss precisely because the call doesn't *look* like a query. Note that `escapeHtml()` is **not** a substitute here: it encodes `'` and `"` so it happens to block a quote-breakout, but it leaves backslashes untouched, so a value ending in `\` still escapes the closing quote. All four sinks now trim an odd trailing backslash as a backstop, but the value still owes `escapeSql` — the guard is defence-in-depth, not the fix.
If you write a query and even one variable in it skipped these, that is a SQL injection. This is the single most common review rejection.

**Fetch helpers return raw values — you escape them.** `getFieldById()` and `getTicketStatusName()` hand back exactly what is in the column. Escaping is the call site's job, the same as any other row you read:
Expand Down Expand Up @@ -291,6 +292,7 @@ Line endings and indentation are enforced by `.gitattributes` and `.editorconfig
- CI runs PHP lint and db.sql lint; SonarCloud scans for security issues. Green checks are required but not sufficient — the conventions above are checked by human review.
- Test your change against a real install: fresh setup from `db.sql` **and** an upgrade via `database_updates.php` if you touched schema.
- For anything larger than a bug fix, **open an issue first** and discuss the approach. ITFlow's roadmap favors incremental modernization of the existing PHP codebase; large rewrites, framework introductions, and new runtime dependencies are out of scope.

## Getting help
Open a GitHub issue using the templates, or ask in the community forum linked from the README. When in doubt about a convention, find the closest existing example in the codebase and follow it — consistency beats novelty here.

Ask in the community forum linked from the README. When in doubt about a convention, find the closest existing example in the codebase and follow it — consistency beats novelty here.
31 changes: 15 additions & 16 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
·
<a href="https://forum.itflow.org/t/bug">Report Bug</a>
·
<a href="https://forum.itflow.org/t/features">Request Feature</a>
<a href="https://forum.itflow.org/t/features">Suggest Feature</a>
·
<a href="https://github.com/itflow-org/itflow/security/policy">Security</a>
</p>
Expand All @@ -44,42 +44,42 @@
### The Problem
- You're a small but busy managed service provider with 101 things to do. Information about your clients is unorganised, unstructured and outdated.
- For some work, you seem to spend longer looking for the relevant documentation than actually working on the issue/project.
- On top of the technical day to day, you also have to take care of the financial side of the business - consistent pricing, quotes/invoicing, and accounting.
- MSP tools can be expensive, with recurring licensing costs adding up quickly.
- On top of the technical day-to-day, you also have to take care of the financial side of the business - consistent pricing, quotes/invoicing, and accounting.

### The Solution: ITFlow
- ITFlow consolidates common MSP needs (documentation, ticketing and billing) into one unified system.
- ITFlow consolidates common MSP needs (documentation, ticketing and billing) into one unified, free platform that you control.

<!-- GETTING STARTED -->
## Getting Started

### Self Hosting
- The best installation method is to use the [install script](https://docs.itflow.org/installation_script) on Ubuntu/Debian. A video walk through is available [here](https://www.youtube.com/watch?v=kKz9NOU_1XE).
- The best installation method is to use the [install script](https://docs.itflow.org/installation_script) on Ubuntu/Debian. See the [video](https://www.youtube.com/watch?v=kKz9NOU_1XE) walk through.
```
wget -O itflow_install.sh https://github.com/itflow-org/itflow-install-script/raw/main/itflow_install.sh
bash itflow_install.sh
```
- Other manual installation methods are available in the [docs](https://docs.itflow.org/installation).

### Managed Hosting
- If you'd prefer, we can [host ITFlow for you](https://services.itflow.org/hosting.php).
- If you'd prefer, we can [host ITFlow for you](https://services.itflow.org/hosting.php) (coming soon).

<!-- FEATURES -->
## Key Features
* Client documentation - assets, contacts, domains, docs, files, passwords, and more
* Accounting / Billing - finance dashboard, quotes, invoices, accounting, expenses, etc
* Client Portal - self service quote/invoice/ticket management for clients
* Alerting - account balance, invoices, domain/SSL renewals
* Completely free & open-source alternative to ITGlue and Hudu
* Client documentation - assets, contacts, domains, docs/files, passwords, tickets, and more
* Billing - quotes, invoices and expenses, with Stripe integration for online payments
* Alerting - domain and SSL expiry/renewals
* Client Portal - self service quote, invoice, and ticket management for clients


<!-- ROADMAP -->
## Roadmap / Future to-do
We track the implementation of confirmed features and bugs via [TaskFlow](https://tasks.dev.itflow.org/tasks.php). Use the [forum](https://forum.itflow.org) to request features or raise bug reports.
We track the implementation of confirmed features and bugs via [TaskFlow](https://tasks.dev.itflow.org/tasks.php). Use the [forum](https://forum.itflow.org) to suggest new features or report bugs.

<!-- CONTRIBUTING -->
## Support & Contributions

### Forum
For help using ITFlow, bugs, feature requests, and general ideas / discussions please use the community [forum](https://forum.itflow.org).
For help using ITFlow, bugs, feature suggestions, and other general ideas or discussions, please use the community [forum](https://forum.itflow.org).

### Contributing
We have temporarily paused PRs from the community.
Expand All @@ -90,17 +90,16 @@ We have temporarily paused PRs from the community.
</a>

### Supporters
We’re incredibly grateful to the organizations and individuals who support the project - a big thank you to:
We’re incredibly grateful to the organizations and individuals who [sponsor](https://services.itflow.org) the project - a big thank you to:
- CompuMatter
- F1 for HELP
- digiBandit
- JetBrains (PhpStorm)

## License
ITFlow is distributed "as is" under the GPL License, WITHOUT WARRANTY OF ANY KIND. See [`LICENSE`](https://github.com/itflow-org/itflow/blob/master/LICENSE) for details.

## Security
* As of 2025, we now have a stable release of the project.
* We've had a stable release of the project since Jan 2025.
* Whilst we are confident in the safety of the code, no system is risk-free. Nearly all software has bugs. Use your best judgement before storing highly confidential information in ITFlow.
* If you have a security concern, privately report it [here](https://github.com/itflow-org/itflow/security/policy).

Expand Down
18 changes: 10 additions & 8 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,26 @@
# Security Policy

## **Please do NOT report security concerns/vulnerabilities publicly (Issues/forum)**
## **Please do NOT report security concerns/vulnerabilities publicly**

**We take security seriously**
**ITFlow stores important information, so we take security seriously**

- Whilst we are confident in the safety of the code, no system is risk-free. Nearly all software has bugs. Use your best judgement before storing highly confidential information in ITFlow.
- We attempt to follow security best practices where possible, including [automated code scanning](https://sonarcloud.io/component_measures?id=itflow-org_itflow&metric=security_rating&view=list).
- [![Security](https://sonarcloud.io/api/project_badges/measure?project=itflow-org_itflow&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=itflow-org_itflow)
- Whilst we are confident in the safety of the code, no system is risk-free. Nearly all software has bugs.
- Use your best judgement before storing highly confidential information in ITFlow.
- We attempt to follow security best practices where possible, including automated code scanning.

## Supported Versions
We operate a rolling release model. Any bug fixes will be released into latest version of ITFlow, so you must stay up-to-date.

| Version | Supported |
|---------| ------------------ |
| 26.08 | :white_check_mark: |
| 26.09 | :white_check_mark: |

## Reporting a Vulnerability via GitHub Security Advisories

**Security contact: [GitHub Security Advisories](https://github.com/itflow-org/itflow/security/advisories/new)**

If you have discovered a security issue, please **[report it](https://github.com/itflow-org/itflow/security/advisories/new)** to us in as much detail as possible, so we can fix it.
If you have discovered a security issue, please **[report it](https://github.com/itflow-org/itflow/security/advisories/new)** to us so we can fix it.

You should expect to receive an initial acknowledgement within 72 hours. If you don't receive any feedback, we may have missed the initial email from GitHub (we're human!). Please raise a forum discussion quoting ONLY the assigned GHSA ref.
You should expect to receive an initial acknowledgement within 7 days. If you don't receive any feedback, we may have missed the initial email from GitHub (we're human!). Please raise a forum discussion quoting ONLY the assigned GHSA ref.

Note: Please don't submit AI slop. AI can be useful for drafting and research, but you are responsible for reviewing and validating anything you submit. We reserve the right to restrict repository access if you repeatedly ignore this requirement.
Loading
Loading