johnnyq
e29369926f
Client portal stage 4: accounts - Your account rebuilt with details and an ask-us link, phone numbers, ticket email choices, password change needing the current password and 8 characters with an email notice, two-step sign-in with an authenticator app set up from a QR code, remembered browsers with Forget them, phone PIN and recent sign-ins with the device; activity rebuilt with signing-in and changes tabs and paging; sign-in asks portal users with two-step sign-in for a code, remembers the browser on request and locks an account after five wrong codes in ten minutes, matching portal users by contact_user_id; Admin > Client Portal can require two-step sign-in, sending anyone without it to set it up first, and agents can turn it off for a contact from the contact page; password links stored as SHA-256 and running out after an hour for Forgot password and a week for invites, the nightly run clearing only run-out links, Forgot password limited to one email per account every five minutes and ten requests per address in ten minutes, the reset page rebuilt with the password typed twice and a confirmation email, fixing the empty-token check that let anyone trigger the reset email; contacts choose every ticket email or replies and fixes only, and primary and technical contacts can hear about new tickets at their company or every update, honoured by agent, portal, email parser and recurring ticket emails; announcements for every client or one with tone and start and end dates on the portal home page, managed in Admin > Client Portal; View as contact opens the portal read only as a contact from the agent contact page, audited, with billing shown only when the agent's role reads sales and financial, nothing written or paid while viewing; agent contact page shows two-step status, last sign-in and ticket email choices; database 3.1.0 adds portal_announcements, contact ticket email columns and config_client_portal_require_mfa and hashes outstanding links; new functions/portal.php; changelog updated
2026-10-17 12:05:55 -04:00
johnnyq
ac175e7dc0
Add SLA response target to ticket created emails, with a call-in note on High and Urgent
2026-08-27 15:03:31 -04:00
johnnyq
bf04d6a757
Ticket default to Medium Priority unless specified, as this is just good practice
2026-08-27 13:04:19 -04:00
wrongecho
baf1164f08
Notify when mail parser skips an autogenerated ticket
2026-08-20 09:30:43 +01:00
johnnyq
d484629ebc
do not update ticket status in history if it is the same
2026-08-08 12:41:34 -04:00
johnnyq
b3744e9ed5
More sweeps to replace select * with actual returned column names dramatically reduces php memory usage and speeds up processing dramatically especially in the crons since they run all the time
2026-08-06 13:10:23 -04:00
johnnyq
a27019511e
Remove unused overdue invoice setting move master cron switch out of notificaiton and into cron
2026-08-02 17:22:28 -04:00
johnnyq
75028ba09a
Fix some Ticket History gaps
2026-08-01 14:33:37 -04:00
johnnyq
16000efcf7
Drop SVG extension in the ticket mail parser
2026-07-31 12:39:10 -04:00
johnnyq
0631c45040
Fix Cron Schedule and new directory includes created inside cron for the cron lock
2026-07-30 17:06:07 -04:00
johnnyq
38e8edea19
Cron runs all jobs from a single dispatcher cron.php which should now be run every minute and all other cron jobs eliminated from cron
2026-07-30 13:48:39 -04:00
johnnyq
162a597da9
Add SLA pausing, SLA reports, SLA filtering and kanban SLA state (phase 3)
...
Statuses can be flagged to pause the resolution clock; sla_history records the intervals a ticket's clock actually ran and the deadline is re-based on remaining budget when it resumes. Adds SLA Summary and SLA by Client reports, an SLA state filter on the ticket list, SLA colouring on kanban cards, and an Urgent column on the Tickets by Client report. DB update 2.5.1. Also fixes resolution SLA verdicts being skipped when resolving via kanban or the client portal.
2026-07-29 13:02:27 -04:00
johnnyq
d08ef6184a
Add optional ticket SLAs
...
Response/resolution targets stamped at creation from per-client/priority assignments, business-hours due date math, warn/breach alert stages via cron/ticket_sla.php, ticket list coloring, per-ticket SLA override, admin page for plans/assignments/business hours. DB update 2.5.0. No behavior change unless SLAs are assigned. Bulk reply now only counts Public replies as first response.
2026-07-29 00:00:42 -04:00
johnnyq
a844d7b428
Adds a shared flock guard used by all five cron entry points, keyed per
...
script and per install. Replaces the mail queue's own lock file, which
was not atomic and could be deleted out from under a long run. Bounds
the SMTP conversation so an unresponsive server cannot hold the lock.
Recovers rows left at Sending by a run that died, which nothing
previously picked up.
2026-07-27 17:35:39 -04:00
johnnyq
9d540f4bfe
Replace Function customAction() with triggerCustomAction()
2026-07-14 17:43:55 -04:00
johnnyq
f1836c70cd
Replace Function logAction() with logAudit()
2026-07-14 17:35:23 -04:00
johnnyq
b57ddc0e5c
Replace Function sanitizeInput() with just escapeSql() and update all instances throughout
2026-07-14 17:17:50 -04:00
johnnyq
8da3a107fb
Rename plugins to libs and update all file references
2026-07-10 13:24:20 -04:00
johnnyq
ae5c9fe8ec
Mail Parser: Add logic when creating ITFlow folder to determine if the namespace is INBOX. or can be created in root directory. Fixes issue with CPanel Dovecot Maildir++ configuration where their namespace is just INBOX
2026-07-08 15:58:00 -04:00
johnnyq
2204bd52f4
Rewrite email parser using ImapEngine, harden processing loop
...
Replace webklex/php-imap with directorytree/imapengine in the ticket
email parser. ImapEngine is pure PHP over sockets.
Parser improvements:
- Wrap per-message processing in try/catch so one malformed email
can't abort the run; failures are flagged and logged with UID
- Query unseen + unflagged so previously-failed (flagged) messages
are no longer re-processed on every cron run
- Skip vacation/auto-responder emails (RFC 3834) to prevent mail
loops with the ticket auto-reply
- Cap messages per run (50) and attachment size (15MB); inline
images over 2MB are stored as attachments instead of base64-embedded
in ticket details
- Atomic lock file creation
- preg_quote() the ticket prefix in subject matching
- Dedupe CC watchers and exclude the sender
- Map webklex 'tls' encryption setting to STARTTLS for compatibility
NDR/DSN parsing now walks MIME parts via the underlying
zbateson parser instead of relying on attachment extraction.
2026-06-12 16:56:39 -04:00
wrongecho
1ba19cc249
New Ticket Parsing - Anyone CC'ed onto the original email that created the ticket is added as a ticket watcher
2026-02-26 12:49:32 +00:00
johnnyq
2ca8112daf
Revert Git change test to ticket_email_parser.php
2026-02-06 15:14:37 -05:00
johnnyq
546f10bc82
Testing Git changes on ticket_email_parser.php
2026-02-06 15:13:54 -05:00
cs2000
10d1a902d9
Changes for M365 oAuth now using latest dev code
...
My bad, my changes were made previously using my installed version and not the latest changes in the dev branch, i have pulled the dev branch and merged my changes with the latest codebase.
2026-02-05 09:37:22 +00:00
cs2000
2cca4f2f0e
Changes for M365 oAuth
...
- Added null-safe guard around folder path logging during message move failure to prevent property_exists() fatal when folder object is null.
2026-02-04 13:26:52 +00:00
wrongecho
07df657848
Bugfix: newline char showing in parsed emails
2026-01-27 17:25:53 +00:00
johnnyq
bd8bf026f0
Allow svg email attachemment for mail parser
2026-01-23 11:24:26 -05:00
johnnyq
e0f7460e08
If not client_id then do not include &client_id= in ticket uris as this would cause ticket viewing to break if client_id is 0.
2026-01-19 17:01:38 -05:00
johnnyq
ae1d71dcd7
append client_id to the uri for agent ticket links so that the when clicked will take them to the client section and show client header along with the bread crumbs link of client tickets
2026-01-19 16:24:31 -05:00
wrongecho
e7f6f8a4c7
Mail Parser - NDR Parsing
2026-01-15 17:35:13 +00:00
wrongecho
a398ac7a8d
Mail Parser - Support flowed text
2026-01-15 11:54:37 +00:00
wrongecho
7e7909cec1
Mail Parser - Do not automatically send new ticket notifications to noreply/donotreply addresses
2026-01-15 10:38:25 +00:00
johnnyq
0a30300bde
replace all instances of mysqli_fetch_array with mysqli_fetch_assoc for better performance and memory usage
2026-01-14 17:30:23 -05:00
johnnyq
a79ce23ae5
Fix randomString() to generate cryptographically secure URL-safe tokens, reduced url keys to 32 Characters for performance and easy copy and paste and compatibility while still mainitaining ubreakable cryptographic keys
2025-12-18 14:24:53 -05:00
johnnyq
99e2487d2b
Fix dupe race condition with ticket, invoice, quote, project, recurring ticket numbering when being created in parallel Atomically update and get the next ticket number in one SQL query everywhere.
2025-11-28 14:14:46 -05:00
johnnyq
185ea7d6ac
Fix 'Email from at' On tickets that come from emails, was cuasing dup html head body tags causing htmlPurifier to strip it in ticket viewing, so we removed html body and head tags also remove orginal reply on reply ticket emails this removed ##- Please type your reply above this line -## and anything after it. Also removed the custom CSS that was embedded for all email sent out from ITFlow
2025-11-22 17:40:44 -05:00
wrongecho
b991f787a2
Introduce subject-based automatic ticket merging/reply detection where e-mail is sent from a known contact or domain and the subject is a 95% match for a ticket opened in the last 7 days for that client
2025-11-18 13:08:02 +00:00
wrongecho
5dd4f5ea62
New mail parser:
...
- bugfix .eml not being generated
- include the message when notifying the tech of a reply
2025-10-16 16:32:37 +01:00
johnnyq
5de2e7a3bd
If imap Encryption is blank then use notls in the ticket mail parser
2025-10-03 11:36:27 -04:00
johnnyq
00f5198bed
Update appNotidfy links to use Absolute paths, updated gitignore
2025-09-25 13:31:16 -04:00
johnnyq
edabc5c33f
rename /user/ to /agent/ and update links to use agent/ instead
2025-09-23 18:04:23 -04:00
johnnyq
04b29d43df
Update Agent ticket access path in emails to new /user/ path
2025-09-15 17:28:58 -04:00
johnnyq
3a5b18f3dd
Added Beta support for Microsoft IMAP OAUTH2 must use new mail parser for it to work cron/ticket_email_parser.php
2025-09-12 15:56:44 -04:00
johnnyq
ce7d84aa2f
Reintroduce Webklex IMAP for ticket processing as PHP-IMAP is no longer being developed. This is optional for now and considered beta can be found in cron/ticket_email_parser.php
2025-09-10 14:27:46 -04:00