- Fix HTML formatting for the cover div, other div styling is still broken
- Adjust layout of cover info and add MSP logo
- Add software purchase and expiry dates
General quality of life updates:
- Ticket contact edit: 'No one' should be logged when ticket isn't associated with any contact, rather than a blank space; also fix email content
- Ticket portal/guest: Only show 'Assigned to' if someone is actually assigned
- Ticket tasks: Don't allow adding/modifying tasks for tickets in a resolved state
- Portal contacts: Properly align word 'Contacts' in a similar way all other page headings are aligned
- Client PDF export/handover: Now opens in a new self-closing window
- Move more things to new permissions system
- Deduplicate assets post logic into model
- Swap out some "SELECT *" queries when only a couple of rows are actually needed
- Split into admin and user handlers, each admin page gets its own file now
- Enforce role access once for admin POST requests
- Automatically load POST logic for admin-based requests based on the referring page, otherwise automatically load all user request logic
- Add support for using custom POST handlers