Version: 3.14.0
Highlights
Granular permission checks across the app
Projects, Timesheets, Users, API keys, to-dos, milestones, sprints, the dashboard, and menu items now check specific permissions rather than relying on role rank, giving administrators finer control over what each user can access (#3985, #3988, #3992).
New Features
- Calendar plugin extensibility - Calendar events and filters are now class-based, so calendar plugins can hook in reliably. Moving or resizing an event in the calendar now also notifies plugins (#4017)
- CalDAV Calendar Sync plugin - New on the marketplace and requires this release: two-way sync with Nextcloud, ownCloud, Baikal or Radicale, and Leantime as a calendar account in Apple Calendar, Thunderbird or DAVx⁵
- Domain-driven client events - Timesheets and Projects client events are now derived from domain events (#3995)
- Board column header component - Board column titles are now available via elements.board-column-header for customization (#4002)
- Toggle checkboxes - On/off checkboxes now render as toggles (#3999)
- Collapsible content-box sidebars - Content-box sidebars can now collapse, with Docs built on layout.content-box (#3991)
Bug Fixes
- Updates install to the correct folder - Plugin updates now install into the existing installed folder instead of one named after the download's casing (#4001)
- Subtask list stays in sync - A parent's subtask list is now notified when a child is edited or moved (#3990)
- Queued HTMX headers delivered - Queued headers are now sent on responses that actions build themselves (#3989)
- Fresh path caches after upgrades - View and composer path caches are rebuilt after a Leantime version change (#3998)
Improvements
- Component cleanup - Removed the old x-global::accordion and jQuery tagsInput, and marked CustomFields versions below 1.6.0 as incompatible (#3997)
Upgrade Notes
- No database changes in this release.
- Custom Fields: versions below 1.6.0 no longer load on 3.14. Update Custom Fields to 1.6.0 or newer from My Apps.
- For plugin developers: the calendar string hooks are gone.
afterCalendarSaveandafterCalendarDeleteare replaced by the event classesCalendarEventCreated,CalendarEventUpdatedandCalendarEventDeleted.- The
connectOptions.providers,calendarSettings.sectionsandexternalCalendarsfilters are replaced byCalendarProvidersFilter,CalendarSettingsSectionsFilterandExternalCalendarsFilter. - All of these live in
Leantime\Domain\Calendar\Events. Subscribe withEventDispatcher::add_event_listener(Class::class, ...).
- For plugin developers:
x-global::accordionand the jQuery tagsInput plugin were removed. Usex-global::elements.accordionandx-global::forms.tags.
What's Changed
Other Changes
- feat(roles): Projects, Timesheets, Users and API keys check permissions, not role rank by @marcelfolaron in #3985
- feat(roles): menu items follow the permission of the page they open by @marcelfolaron in #3988
- feat(components): collapsible content-box sidebars; Docs on layout.content-box by @marcelfolaron in #3991
- fix(plugins): rebuild the view/composer path caches after a Leantime version change by @marcelfolaron in #3998
- chore(components): remove the old x-global::accordion and jQuery tagsInput; mark CustomFields <1.6.0 incompatible by @marcelfolaron in #3997
- feat(components): on/off checkboxes become toggles by @marcelfolaron in #3999
- feat(roles): to-dos, milestones, sprints and the dashboard check permissions by @marcelfolaron in #3992
- fix(htmx): send queued headers on responses that actions build themselves by @marcelfolaron in #3989
- fix(tickets): tell the parent's subtask list when a child is edited or moved by @marcelfolaron in #3990
- feat(components): board column titles on elements.board-column-header by @marcelfolaron in #4002
- fix(plugins): an update installs into the installed folder, not the download name's casing by @marcelfolaron in #4001
- chore(plugins): bump app/Plugins to plugins main by @marcelfolaron in #4000
- feat(events): Timesheets and Projects client events come from domain events by @marcelfolaron in #3995
- feat(calendar): class-based calendar events and filters for calendar plugins by @marcelfolaron in #4017
- chore(plugins): bump app/Plugins for the CalDAV + Google Calendar event classes by @marcelfolaron in #4023
- fix(plugins): restore the app/Plugins submodule by @marcelfolaron in #4025
- Release v3.14.0 by @marcelfolaron in #4024
Full Changelog: v3.13.2...v3.14.0