Commit Graph

625 Commits

Author SHA1 Message Date
johnnyq
bab3d73c86 Rebuild notifications: bell panel and full page
- Bell opens a dropdown panel instead of a modal: Unread/All tabs, grouped
  by day, type icons, relative times, click-through marks read, per-row
  read/unread, mark all as read
- Unread badge refreshes every minute while the tab is visible
- Notifications page rebuilt on the same backend: search, type filter,
  date range, read/unread toggles, proper empty states
- Hide notifications for clients/modules the user cannot access
- Normalise relative notification links so they work from /admin pages
- Remove the old notifications modal and dismiss handlers
2026-10-09 15:52:40 -04:00
johnnyq
f7e5655e05 Rebuild global search as a live search palette
- Press / or Ctrl+K (or click the top bar box) for results as you type,
  grouped by type, with keyboard navigation and recent clients when empty
- Ticket/invoice/quote numbers jump to the top; Enter opens immediately
- Phone, IP (any interface) and MAC matching; app pages offered by name
- Full results page rebuilt on the same search: totals, links into each
  list page, ticket conversation and document text matches
- Passwords no longer rendered into the results page; reveal/copy go
  through the audited endpoint
- Fix stray }); breaking inline scripts on asset and contact pages
2026-10-08 17:40:46 -04:00
johnnyq
9bfd26d57b Add titles to icon-only buttons
- title on 294 icon-only buttons, named for what each one does
- aria-label on the 7 show-password buttons (title becomes the popover
  header) and the portal mobile nav toggle
- Fix dead add-category button on products filter, credential bulk tag
  button now preselects Credential, drop duplicate inner-icon titles
2026-10-08 17:12:21 -04:00
johnnyq
49106e2a80 UI fixes: confirm irreversible actions, keep reply drafts guarded, re-enable CSP on portal recurring invoices
- Add confirm-link to 14 one-click delete/disable links (asset, contact,
  files, templates, logo, MFA, calendar event, disable user, cancel schedule)
- confirm_modal.js treats btn-danger / btn-outline-danger as destructive
- Replace per-editor window.onbeforeunload with one guard over all editors
- New js/autosubmit.js replaces inline onchange in the portal; CSP back on
  recurring_invoices.php
- Fix blank user name in disable_user audit log
2026-10-08 16:47:12 -04:00
johnnyq
cd7ebc0a5f Security: enforce per-user client restrictions on client, financial and bulk handlers and per-client reports
Agents restricted from a client could still edit, archive, restore or delete it, run bulk actions on it (edits, tags, archive, email, tickets) and add credits. Every selected client is now checked before anything is written.

Expense, trip and recurring expense edits now check the client the record already belongs to, not just the submitted one. Recurring expense delete, revenue edit/delete and task approval handlers gained the same check.

Per-client reports and the dashboard payment/ticket lists now hide clients the agent is denied. Company-wide totals are unchanged.
2026-10-08 16:17:46 -04:00
johnnyq
5acb1802bb Security: scope set_recurring_payment to the client's own invoice and payment method 2026-10-08 16:02:21 -04:00
johnnyq
2c8fb8753c Fix Copy Paste Buttons in certain areas 2026-10-06 22:21:22 -04:00
johnnyq
c3018b7584 Restore the ability to manually typc a value in select boxes with data-tags=true including add ticket watcher 2026-10-01 15:11:58 -04:00
johnnyq
1666305a1c UI: User Avatar pills for Assigned tickets, updated Icons for Ticket Mine and Unusassigned tickets 2026-09-29 18:02:05 -04:00
johnnyq
b15ef69bf4 Fix pretty content js helper in modals, fixes the issue with images going out of the boundry of the modal window 2026-09-29 17:22:53 -04:00
Wrongecho
c4843095b2 Potential fix for Stripe charges being off by a cent 2026-09-22 16:01:46 +00:00
Wrongecho
8d51f1a64a Bug: Fix not being able to unarchive software 2026-09-22 09:18:51 +00:00
wrongecho
1ac44f02bd Bugfix: Assets not storing credentials when username not given 2026-09-16 14:13:30 +01:00
Wrongecho
c3429ecc8a Add ability for recurring invoices to be generated as draft to allow review and amendment prior to sending 2026-09-14 13:28:41 +00:00
Wrongecho
a41e738a9b Add ability for recurring invoices to be generated as draft to allow review and amendment prior to sending 2026-09-14 13:22:59 +00:00
Wrongecho
0cc3ac513d Show when network we're looking at is archived 2026-09-14 10:18:16 +00:00
Wrongecho
cb262139ae Invoicing - bug: fix not being able to add tickets to invoice; feature: add ability to remove tickets from invoice 2026-09-11 11:56:40 +00:00
wrongecho
38cb850f60 Flag as do not modify 2026-09-08 00:05:53 +01:00
wrongecho
d0dfc6aba8 Flag as do not modify 2026-09-08 00:04:48 +01:00
Wrongecho
d416406746 Scale sidebar business name to fit (@BoredManCodes) 2026-09-07 15:41:22 +00:00
wrongecho
4f3d9f88b0 Fix typo in placeholder for abbreviation input
(@BoredManCodes)
2026-09-06 20:33:39 +01:00
wrongecho
97fe67341a Fix typo in placeholder for abbreviation input 2026-09-06 20:33:10 +01:00
johnnyq
e7015d1595 Fix undefined item name when selecting from product list in quote or recurring invoice 2026-09-03 18:35:46 -04:00
johnnyq
3acb1ad754 Fix ticket creation emails always saying Open, API tickets staying New when assigned, and the bulk assignee list filter 2026-09-03 17:18:32 -04:00
johnnyq
98f8de68ae When opening a ticket on the Agent Area automatically assign ticket to self but the option to Unusassigned remains 2026-09-03 17:10:15 -04:00
johnnyq
22921f5999 Add a Sub-line on the amount column in invoices for Balance of Partially paid invoices 2026-09-03 16:44:54 -04:00
johnnyq
e9f9dac656 Fix dashboard Income by Category excluding partial payments and revenues 2026-09-03 13:20:37 -04:00
johnnyq
a0fe18fff1 Fix Tax Summary double counting tax on partially paid invoices 2026-09-03 13:12:31 -04:00
johnnyq
feae4719da Fix Unpaid widget miscalculating partially paid invoices 2026-09-03 12:38:52 -04:00
johnnyq
9e8c4d002a Shorten Description, Text dark IP and make table smaller in IPs 2026-09-01 18:54:44 -04:00
Wrongecho
491d459619 Make client delete modal even clearer 2026-09-01 15:03:31 +00:00
Wrongecho
d21d4c7fc0 Hide option to delete ticket when it is closed as we treat closed tickets as immutable 2026-09-01 12:23:00 +00:00
johnnyq
b0c12ac89d More Syntax Fixes 2026-08-31 17:58:02 -04:00
johnnyq
bcdfab996c Fix approval Syntax 2026-08-31 17:52:44 -04:00
johnnyq
accc1948be Fix Color Class 2026-08-31 12:46:00 -04:00
johnnyq
c07c10c610 Fix Guest Approve Modal Offscreen issue, added guest header and spruced up the UI a bit 2026-08-31 12:22:55 -04:00
Wrongecho
d9cb0251b0 Small payment bugfixes 2026-08-30 23:15:16 +01:00
Wrongecho
16b46c1f1a Stripe Invoice Payments
- Add ability to refund Stripe payments rather than just deleting & manually refunding
- Limit refunding / deleting payments to Full/3 Sales&Financial permissions, as this is a delete rather than modify action
2026-08-30 22:54:01 +01:00
johnnyq
d98b8bc427 Add ps-3 to table columns that don't have a checkbox and made sure all table listings conform 2026-08-29 19:45:28 -04:00
johnnyq
20b406c5b0 Add margin bottom to the ticket filter 2026-08-29 17:27:41 -04:00
johnnyq
f395d224fa Collapsable Client Top Head collapsable is remembered upon navigation 2026-08-29 00:59:49 -04:00
johnnyq
f6e03b2196 Add Chevron to show top client collapse 2026-08-29 00:46:30 -04:00
johnnyq
087c75f3d7 Dont show the reply card in ticket until a reply button is clicked 2026-08-29 00:21:40 -04:00
johnnyq
950d02d6ab Fix: Six ajax modals had dead JS - DOMContentLoaded had already fired before their scripts were injected. New itflowReady() helper restores jQuery .ready() semantics. Fixes notification pagination, asset OS autocomplete, contact auth toggle, AI ticket summary, AI document template generation 2026-08-28 19:41:00 -04:00
johnnyq
bd7f67aa5b Enhancement: Files: Document and Files are easily distinguashable now with the option to choose all docs or just files. Thumbnails view now shows all files, Previews now available for documents, pdfs, txts etc, List view and Thumbnail view now retain in search param when navigating folders 2026-08-28 17:33:04 -04:00
johnnyq
156c51224d Fix client portal review findings: PIN wipe, log indexing, statement currency (db 2.7.8)
Setting a PIN containing < or > silently cleared it: the length check ran before escapeSql(), whose strip_tags() then emptied the value, and the UPDATE stored the blank while flashing success. Length is now checked after sanitising.

Password and PIN changes require the current password. SSO contacts are exempt - no local password to check, and the IdP already did it.

New index on logs(log_user_id, log_client_id) for the portal profile and activity pages, which were scanning the whole table twice per profile view. admin/audit_logs.php's date filter rewritten as a half-open range so KEY log_created_at is usable - DATE(log_created_at) BETWEEN made it non-sargable.

Portal statement page and PDF now render in the client's currency, matching the guest view and the emailed statement.

Quick Send asks for confirmation; confirm-link extended to submit buttons.

Portal audit entries logged an empty name - client/post.php used , which only exists agent-side.
2026-08-28 16:38:42 -04:00
johnnyq
6586a557ed Fix Send Client Account Statement Bug 2026-08-28 15:04:43 -04:00
johnnyq
342502073e Feature: Added Send Account Statment in Client Invoices Drop Down with Date Options and options to only include paid invoices 2026-08-28 14:50:15 -04:00
johnnyq
86ba041cdc Add Quick Send Quote / Invoice to replicate the old single click to Send Email 2026-08-28 14:40:25 -04:00
johnnyq
68b15ca49b Email Invoice Only shows Billing and Primary, Quote shows Important Billing, Primary and Technical contacts that can be selected 2026-08-28 13:43:51 -04:00