Skip to main content
Version: 2.1.14

2.1.22

Added​

  • A calendar, in the webmail and on your phone: events, repeats and reminders, synced over CalDAV.
  • PHP 8.5 and 8.6 have default php.ini files an operator can edit.
  • Telegram notifications, and a button that sends a real test alert.
  • An administrator can choose which features a reseller may pass on to their own customers.

Fixed​

  • The logo has never appeared on the webmail sign-in page. It does now.
  • Every "Restore default" button in HiTechAdmin had never worked.
  • The Available Options list could not be cleared.
  • A reseller losing an account went on counting it, and eventually could not create another.

Notes​

The calendar is the same store on both sides: an event created in the browser is on the phone at the next sync, and one created on the phone is in the browser, because there is one row rather than two copies that drift. What a client sends is stored byte-for-byte and handed back unchanged, so the properties this server has no opinion about — a phone's categories, a colour, an organiser's conferencing block — survive a round trip instead of quietly disappearing.

Reminders arrive without the calendar being open. Each is claimed and marked in the same statement it is read by, so a restart mid-send cannot deliver one twice, and one that is already past is not delivered at all — a server switched on after a weekend should not fire Friday's alerts.

The webmail logo took two separate bugs to find. The component subscribed to the branding answer at module load, but branding is fetched much earlier, and a listener registered after the event never fires. Then the sign-in page overwrote the logo with an empty string, because two endpoints served the same value and the empty one wrote last. There is one answer now.

Every "Restore default" button fetched a raw githubusercontent.com URL from the operator's browser. The repository is private, so it answered 404 for everyone — the buttons had never worked in any deployment — and the URL named the source repository to anyone with the developer tools open. The files are on the server; they are served from there.

A reseller could already set permissions on the accounts they own, and could switch on any feature the panel has, including ones an administrator had deliberately kept back. An administrator now chooses what a reseller may hand out; anything outside that stays exactly as the administrator set it. Choosing nothing means no restriction, which is what every reseller already is — reading an absent list as an empty allowance would have taken every feature away from their customers on the next save.

Was this helpful?