johnnyq
9e55d52432
Vendors overhaul for daily MSP work: new vendor page built around calling them, with Call support (dials the extension), Email, Support site, a star, and a New menu (case/ticket with them, license from them, asset bought from them, portal login, document, upload, or expense and recurring expense for our own vendors), Support card (phone, hours, SLA, email, site), Account card (account number, PIN shown as dots with show and copy, account manager name, direct line and email), blur-to-save notes, an Also used by list of the agent's other clients with the same vendor by name or template, and tabs for Cases (open first, with their ticket number), Licenses (soonest renewal first), Assets (serial, order ref, warranty status), Domains (registrar, web host, DNS, mail), Services, Logins, Documents, Files and History; our own vendors show spend this year, last year and in all, recent expenses and recurring expenses; new vendor quick look; rebuilt vendors list with starred first, initials tiles coloured by vendor name, support line, hours and SLA, account number and PIN, chips for open cases, licenses, assets, domains, services and logins, an Ours / Clients' switch with an all-clients view in All Client Docs, wider search (account manager, emails, tags), tag filter and bulk Tags/Archive/Restore/Delete; shared tabbed vendor form (Details, Support, Account, Notes) with star, tags and start from template that fills every field; Add a Template to Clients to roll one vendor out to many clients, skipping those that have it; Admin Vendor Templates shows how many clients use each template and has Add to clients; vendor tags (tag type 6) with vendor tags in the Tags starter pack; ticket vendor block shows their ticket number, support line, hours, SLA, account number and PIN with copy buttons; vendor tiles in every vendor picker and quick look links across tickets, licenses, assets, domains, services and expense lists; search opens the vendor page; CSV export adds tags, open cases, account manager and PIN; logins, documents and files can be linked to a vendor and ones made from a vendor's page are linked to it; demo vendors get tags, a star and an account manager; database update 2.8.2 adds vendor_tags and vendor_contact_phone_country_code, vendor_contact_phone, vendor_contact_email (db.sql updated) and clears references to vendors that no longer exist; ticket vendor now validated against the ticket's client and removing a vendor from a ticket is logged as such; deleting a vendor from a template no longer unlinks every other vendor from that template; deleting a vendor clears it from assets, licenses, tickets and domains, and vendors with expenses, recurring expenses or payment provider fees are archived rather than deleted; vendor websites without a scheme open correctly; domain form vendor names escaped; new vendor templates keep the phone country code and pushing a template update with nothing ticked no longer errors; vendors API accepts the account manager fields; new functions/vendor.php (VENDOR_USES, vendorCan/vendorEnforce with client vendors on module_client and ours on module_financial, tile, link, website, PIN, form, tags, counts, delete check, reference clearing, also used by, spend, history), credential|vendor and file|vendor link relations, tag module_ours for our own vendors, handlers add_vendor_template_to_clients, favorite_vendor, unfavorite_vendor and ajax vendor_set_notes, vendor_model.php removed
2026-10-14 22:49:05 -04:00
johnnyq
57b8ced839
Locations overhaul for daily MSP work: new location page with header actions (Directions, Call, New ticket/contact/asset/network/rack/document/upload/trip prefilled to the location, Move here, Edit, Make primary, Archive/Restore/Delete), Getting there / Ask for / blur-to-save Access notes panels, and People, Assets, Networks, Racks, Tickets (open first), Documents, Files and History tabs with per-record unassign and remembered tab; new location quick look modal (glance, directions, access notes, People/Assets/Networks/Open tickets tabs); new Move here modal to bulk-move contacts, assets, networks and racks to a location showing where each currently is; rebuilt locations list with primary-first sort, photo/pin tile, maps link and Directions button, phone and hours, on-site contact, On site count chips linking to the location page tabs, wider search (phone, notes, contact, tags) and bulk Tags/Archive/Restore/Delete; shared tabbed location form (Details, Address, Contact, Access) with Primary switch, auto-primary for a client's first location, tags and photo removal; ticket detail Site card with address, phone, hours, access notes and directions; ticket location now validated against the ticket's client; documents and files can be linked to locations via new location_documents and location_files tables (database update 2.8.1, db.sql updated) and the generic link modal; location results in global search; client header primary location, network and rack pages link to the location; CSV export adds Primary, On-site Contact, people/asset counts and Access Notes, CSV import checks the file extension and makes the first location primary; primary locations cannot be archived or deleted and bulk archive skips them; deleting a location (including via API) clears its references on assets, contacts, networks, racks, tickets and calendar events; new functions/location.php helpers (LOCATION_KINDS, address/map/directions URLs, tile, counts, form set, tags, primary, photo, assign/unassign, history), new handlers make_location_primary, set_location_records, unset_location_record and ajax location_set_notes, location_model.php removed, demo data gets an on-site contact and linked runbook for the primary location
2026-10-14 22:06:41 -04:00
johnnyq
2d6e40bcf6
Racks makeover: rack page with to-scale front/rear elevation (click an empty U to add), front/rear mounting and full/half depth, non-asset items (patch panel, cable management, shelf, PDU, UPS, KVM, blanking panel), item edit/move, U and power capacity with largest free gap, front/rear photos, U1 top/bottom numbering, print view, Not racked yet list, rack cards with mini elevation and usage, Racks under All Client Docs, rack position on asset views. Fixes model wiped on every rack save, archive denied for non-admins, item edits taking the rack from the form instead of the item, no bounds check on positions, orphaned rack items on asset delete/transfer and orphaned racks on client delete. DB 2.8.0
2026-10-14 15:14:11 -04:00
johnnyq
40ca4a6e6c
Add optional agent user limit set in config.php ($config_agent_user_limit, unset or 0 = unlimited): blocks adding, activating or restoring agent users once the limit is reached, and shows X of Y agent users on the Users page with New User disabled at the limit
2026-10-13 15:34:10 -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
bcdfab996c
Fix approval Syntax
2026-08-31 17:52:44 -04:00
Wrongecho
5a925f8784
Move payment provider post vars to a model to reduce repetition
2026-08-30 15:12:14 +01:00
Wrongecho
318eb7cf77
Stripe - Warn the user if the secret key is not valid during provider add/edit
2026-08-30 15:06:32 +01:00
johnnyq
3277567b87
Demo Data Take 6
2026-08-28 19:23:36 -04:00
johnnyq
8d25337774
Added More Client to Demo Seed, even better relations, filled out more missing data spots etc
2026-08-28 19:09:42 -04:00
johnnyq
bfa53dfd66
Rewrite of the demo data seed includes more alternative products including FOSS more accurate historical relations, break fix mix with managed clients and services
2026-08-28 18:17:36 -04:00
johnnyq
12ed62326a
Add Holiday / Closure Days to SLA to pause SLA timer on defined days, also has a US Holiday Importer
2026-08-27 17:58:02 -04:00
johnnyq
069f587c1d
Implemented Check for updates which removs the last shell exec from web ui, and reimplemented db_update switch to update_cli.php
2026-08-26 23:38:23 -04:00
johnnyq
14c38b9814
Remove DB Update from WebUI as this is handled by the update_cli backend
2026-08-26 22:59:17 -04:00
johnnyq
51c925522c
Remove thr web updater this is now either queued from the web or ran from the shell to update
2026-08-26 22:53:29 -04:00
johnnyq
ffda605195
Add Fake Demo Data Seed stretching over 2 year span
2026-08-24 16:44:09 -04:00
johnnyq
35ddd1a64d
Feature: Designate a client record as your organization currently only provdes a direct link when you click company name in top of the side nav
2026-08-15 20:36:56 -04:00
johnnyq
6af0634f47
Ticket SLA: Fix on hold to pause only after first reply, show resolved closed and onhold as fixed on paused sla in the list
2026-08-15 19:55:40 -04:00
johnnyq
6ef84c4547
Feature: Add Ticket Canned Responses
2026-08-15 17:29:17 -04:00
johnnyq
4c4c172f59
Feature: queued Updates which now eliminates the need for shell_exec from the webui, but if enabled you can still update from the webui the old way too
2026-08-15 16:41:42 -04:00
johnnyq
c44fa30792
Fix Mail settings tabs regression and user menu coloring
2026-08-15 12:29:39 -04:00
johnnyq
dc6b191eed
Update Font, Migrated away from JQUERY dependent libs: toastr to bootstrap5 toasts, daterangepicker to flatpickr, select2 to Tom Select, InputMask to IMask
2026-08-14 17:08:40 -04:00
johnnyq
076f45abb0
Remove Stale SMTP IMAP host if switching Standard SMTP.IMAP to OAUTH
2026-08-09 23:59:54 -04:00
johnnyq
f7548af234
Fix Export Missing coluns due to the select star sweep
2026-08-09 14:33:06 -04:00
johnnyq
605c7811e4
Fix AI
2026-08-06 19:18:34 -04:00
johnnyq
64423cbefa
Fix Client PDF Export
2026-08-06 18:51:09 -04:00
johnnyq
f8899e592f
More Select * Queries convert
2026-08-06 13:57:46 -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
c30c12674a
Sync DB Seed data between setup and setup cli
2026-08-03 22:41:31 -04:00
johnnyq
0311a3d056
Fix remaing undefine vars for audits and flash messages
2026-08-03 15:40:44 -04:00
johnnyq
6b5be0f881
Rework Update UI and fix banch
2026-08-02 18:07:24 -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
c8dab1a7e5
Revert PAyment cleanInput too
2026-08-01 18:48:07 -04:00
johnnyq
23a09f54fc
Reworked getFieldById to remove escaping and and reworked everything that uses the function to also escape, was causing double escaping in many places this standardizes the function
2026-08-01 15:33:48 -04:00
johnnyq
75028ba09a
Fix some Ticket History gaps
2026-08-01 14:33:37 -04:00
johnnyq
53f45fa008
Fix queued backups never building, per-type retention, and cron connection handling
2026-07-31 16:35:39 -04:00
johnnyq
ae468d6cee
Encrypted backups with types, scheduling and CLI restore
...
Backups are now AES-256 encrypted zips in three types (full, database
only, master key), catalogued in a new backups table, built by cron rather
than the web request, and kept under uploads/backups with retention in the
nightly job. The encryption key is one value per install held in config.php,
never in the database and never in the file name.
Restore is shared by the setup wizard and the new scripts/restore_cli.php,
which is the only path without an upload size limit. It verifies the key and
unpacks the archive before dropping anything, and dumps the current database
first so a failed import is rolled back.
A backup dumps, zips and encrypts for minutes without issuing a query, so on
a server with a short wait_timeout the connection is closed underneath it and
the UPDATE marking the backup complete is what fails - long after the archive
was written correctly. The connection is now held open for the job and
re-established before any write that follows long file work, including the
database phase of a restore. Retention recovers rows a dropped connection
left behind: still Running after six hours becomes Complete if the archive is
on disk, Failed if it is not.
cron.php's own failure path is hardened to match. It recorded job failures
through the same connection the failing job had just killed, so an uncaught
exception ended the dispatch and no trace of the original error survived.
Failures now also echo to stdout, so cron mails something useful when the
database is unreachable.
Security: the setup wizard's restore step is now closed on any install that
has users, whatever config.php says. $config_enable_setup defaulted to
enabled when the flag was absent, and the flag is only written at the end of
a successful install, so an install abandoned partway left an unauthenticated
endpoint that would drop every table, import an attacker-supplied archive,
and overwrite uploads/ including the .htaccess that stops PHP running there.
Affects 26.07 and earlier. Restoring over a live install is now CLI only.
2026-07-31 16:18:20 -04:00
johnnyq
8436cd6296
Nightly tasks: apply late fees, overdue reminder emails, and autopay retries at most once per invoice per day, and lock nightly to the daily schedule
2026-07-30 17:50:11 -04:00
johnnyq
119334ab71
Cron Fix
2026-07-30 16:44:56 -04:00
johnnyq
3c8f812a16
Feature: On all export modals added Filter Tab and Selectable Columns tab with default selected, also you can now export to a PDF
2026-07-30 00:46:15 -04:00
johnnyq
3296e48ac6
Unlink template from recurring ticket if template is deleted
2026-07-29 16:36:47 -04:00
johnnyq
75d8b4d37c
Fix get FieldByID spots
2026-07-29 16:16:32 -04:00
johnnyq
566d74c15d
Fix SLA resolve-time reporting, stale settings cache on save, and report N+1
2026-07-29 13:34:34 -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
07c73a6a04
Add Urgent Priority, move Per Client SLA Settings to notes tab in client add / edit modal remove unnessesary sla admin setting for client overide
2026-07-29 00:49:31 -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
c5ff3e2a3f
Normalize line endings to LF; add .gitattributes and .editorconfig
2026-07-28 17:45:52 -04:00
johnnyq
4c65b8c561
Clear mail bodies after successful delivery
2026-07-28 00:18:07 -04:00
johnnyq
53842a50d2
Add URI Tabs to mail settings keeps the tab active upon saving
2026-07-26 01:52:25 -04:00
johnnyq
c509b7f693
Add user-based RBAC for API keys
...
API keys now run as a user and inherit that user's module, operation, and client permissions. Drops per-key client scoping and removes existing keys (must be recreated). Adds an edit modal to change a key's user.
2026-07-25 16:50:58 -04:00