v4.3.0 (2026-04-03)
Bug Fixes
-
Allow special characters in passwords for user creation (
a903be1) -
Correct check-in status display in resource details popup (
ed3dcbc) -
Improve tooltip rendering and fix Smarty issues (
3eb0179) -
Show the Custom Attribute label name when deleting (
b1b06e5) -
Update the reservation email templates for various languages (
667ddc3) -
Update the reservation email templates for various languages (
e94ad11) -
admin: Prevent permission loss when DataTables paginates resources (
cec8823) -
auth: Use per-user database language when no language cookie is set (
b2437db) -
blackouts: Require repeat-until in recurrence UI (
8840ec0) -
blackouts: Require termination date for recurring blackouts (
4cda32d) -
calendar: Generate correct reservation detail URLs server-side for guest views (
25e2391) -
calendar: Pass correct groupSeriesByResource boolean instead of privacyFilter object (
5a7d9ee) -
config: Avoid empty buckets when rewriting legacy keys (
e091b3f) -
config: Make config key lookup case-insensitive (
822ccfe) -
config: Preserve existing config values when merging new keys from config.dist.php (
e2006d1) -
config: Reject case-insensitive key collisions (
eeea6f9) -
config: Restore legacy config key mappings (
74db95a) -
config: Rewrite legacy section keys into canonical sections (
64964cb) -
config: Treat empty-string section as unsectioned in GetKey (
7241c59) -
database: Make 2.9+ upgrades idempotent and raise DB minimums (
3f632d4) -
dataTable: Add default page size configuration and update DataTable length menu (
a959247) -
email: Correctly render reservation attributes in created emails (
0d2bce9) -
email: Honor secondary category in reservation email attributes (
42c98d5) -
email: Populate resource custom attribute values when loading reservation from DB (
5a9756e) -
email: Restore submitter language after sending approval notification emails (
e33a6ab) -
en_gb: Show only time in popup (
5999309) -
i18n: Add English fallback for 3 languages missing parent translation calls (
e202d44) -
i18n: Add English fallback for 8 languages missing parent translation calls (
4ee1ab8) -
i18n: Add missing embedded_datetime date format to en_gb locale (
a4e45d6) -
i18n: Replace HTML entities with UTF-8 characters in Italian locale (
a0c0f46) -
js: Add no-unused-vars rule, remove dead code, and fix bugs (
f009211) -
lang/es.php: Spanish translations (
1b91ad3) -
ldap: Install the 'pear/net_ldap2' library by default (
f3d225e) -
ldap: Require 'ext-ldap' (
e55e63a) -
registration: Resolve a server error when more than one attributes in the register page (
71a3f73) -
reports: Prevent chart modal from hanging on render errors (
e81f465) -
reservation: Correct guest reservation URI validation from calendar and schedule view (
9aca6a1) -
reservation: Correct guest reservation URI validation from calendar and schedule view (
1f9a739) -
reservation: Resolve a crash when the email field is not an array (
618a2f4) -
resource-display: Update date input handling in resource display (
fbee303) -
schedule: Avoid recursive buffer item ids (
b139461) -
schedule: Correct tall view rendering for reservations with hidden blocked periods (
7e80933) -
schedule: Use correct StartDate field in reservation sort (
a83246c) -
spanish-translations: Update Spanish terms for consistency and clarity (
698cbec) -
time: Make Time parsing/formatting DST-safe for time-only values (
6bef7db) -
translation: Fix date formats for italian (
44ceb2b) -
UI: Standardized the size of remaining form inputs and buttons to sm across the interface. (
cab32b6) -
validators: Allow empty schedule filter params (
9aca6a1) -
validators: Remove redundant EXISTS from combined route validators (
9aca6a1) -
validators: Remove redundant EXISTS from combined route validators (
47860f1) -
view-reservation: Correctly display the duration of the reservation (
af1e2ce) -
webservice: Respect configured inactivity timeout per session (
3da795d)
Build System
- assets: Vendor Hind font for local frontend usage (
22b283a)
Chores
-
Correct the location of jquery-migrate (
6e828e8) -
Remove bootstrapValidator CSS includes (
7079d8e) -
Remove unused wysihtml5 assets (
ccaf27b) -
Upgrade jQuery UI assets to 1.14.2 (
4a0818e) -
Upgrade jquery-migrate from 3.0.1 to 3.6.0 (
74802ea) -
api: Remove trailing slash in Authentication POSTs (
e69e636) -
dependabot: Add a 7 day cooldown for updates (
7154bac) -
phpcsfixer: Add 'node_modules/' to the ignore list (
4b9600d) -
vendor: Remove unused jquery-dynamiccontextmenu asset (
670f143) -
vendor: Upgrade select2 library to 4.1.0-rc.0 (
8700159)
Code Style
-
Have AI agents flag "magic number" usage in code reviews (
8cfd27b) -
blackouts: Stylize the presentation of Blackouts and reservations when there are conflicts (
cedce2f) -
changelog: Add 'v' prefix to version headings for consistency (
d4447d3) -
jqtree: Add Bootstrap form-check-input to missing checkboxes (
45e88df)
Continuous Integration
-
For some CI failures provide info on how to fix (
4bd036f) -
frontend: Have the prettier check run first (
cb9a937) -
integration: Switch from MySQL to MariaDB and use Docker mirror (
f499fbd) -
lint: Add Node.js setup hint to frontend lint failure messages (
ee32d8f) -
phpcsfixer: When it fails, tell how to fix it (
b534c4e) -
release: Change monthly release schedule to 17:00 UTC (
4e3cc08)
Documentation
-
Update description of schedule.fast.reservation.load (
f323b16) -
api: Add some curl examples to the API docs (
1465819) -
api: Change the Authentication docs to use sample values (
05dce48) -
api: Correct the responses for account actions (
89f6ec2) -
API: Document retryParameters and skipconflicts for reservation endpoints (
6f10d2f) -
api: Emphasize to not use a / for authentication endpoint (
5294edc) -
api: Put the 'request' before the 'response' (
7cdb4da) -
api: Use the term "Endpoints" instead of "Services" (
d306a41) -
config: Document admin exemption from start.time.constraint (
e1b10da) -
css: Improve the documentation for
css.extension.fileconfig (a6d00b6) -
faq: Add an initial FAQ document (
2b54b66) -
ldap: Add note about using the LDAP schema for the host (
8015721) -
oauth2: Document the
oauth2.strip.trailing.slashconfig (2c361b7) -
oauth2: Update config examples for new config format (
5110088)
Features
-
Add large sample database and setup script (
9b202d2) -
Add option CAS_VERSION_3_0 for config key CAS_VERSION in CAS Authentication plugin (
7d6c3d4) -
Enable use of local JavaScript libraries by default (
c2d663e) -
Enhance reservation emails with resource metadata and details table (
57497bc) -
OAuth trailing slash variable (
662fa90) -
api: Add scheduleId filter to GET Resources endpoint (
6ef6011) -
ci: Add initial minimal frontend linting with ESLint and Stylelint (
4fe45d5) -
ci: Add Prettier for standardized frontend formatting (
5346f52) -
ci: Promote all ESLint rules to error and block warnings (
d3f9c4b) -
config: Add config migration script and documentation (
2371fea) -
config: Support custom footer version override (
157a4cb) -
github: Convert issue templates to YAML forms with required fields (
996d654) -
i18n: Add enabled.languages config to restrict language selector (
7063f26) -
i18n: Add language selector to navbar (
138fecc) -
install: Add option to load large sample data in web installer (
3cafcdb) -
schedule: Add tooltips to schedule action buttons (
27dcd39) -
UI: Add noscript warning for users with JavaScript disabled (
334eeb7)
Refactoring
-
Move 3rd party Javascript and CSS code (
0bdff5a) -
Remove legacy qTip references (
f73a717) -
Remove qTip assets and related files (
12e187a) -
Reservation email template context for multi-resource emails (
0ae98b6) -
config: Clarify config key schema dispatch (
88b1350) -
config: Extract shared config key base class (
27e7e31) -
dashboard-tooltip: Show reservation tooltip only on .reservationTitle (
d6afdec) -
domain: Rename User::GetAllowedResourceIds() to GetFullAccessResourceIds() (
0acb94e) -
domain: Rename User::GetAllowedViewResourceIds() to GetViewAccessResourceIds() (
2081bc6) -
js: Add prefer-const ESLint rule and fix violations (
84cd017) -
manage-blackouts: Tooltips to appear only on .reservationTitle (
9ad945e) -
manage-reservations: Tooltips to appear only on .reservationTitle (
e6ed697) -
participation: Tooltips to appear only on .reservationTitle (
b408344) -
recurrence: Replace native date time input with flatpickr (
0f1071e) -
reports: Add charts.js assets (
3c27c04) -
reports: Remove dead code and standardize jQuery event handling (
0b65c4e) -
reports: Remove jqPlot assets (
fa0f2bd) -
reports: Switch Reports from jqPlot to Chart.js (
afec9c0) -
schedules: Replace qTip with Bootstrap tooltips for reservation tooltip (
9283493) -
tooltip: Tooltips to appear only on .reservationTitle (search-reservations) (
9a5875e) -
tooltips: Standardize popup template names and update references (
3fcedd6) -
validators: Replace regex param extraction with parse_url/parse_str (
c74bdf6) -
validators: Simplify XSS guard with early return and add PHPDoc comments (
691e91e)
Testing
-
Resolve issues with tests and crossing a DST boundary (
539acc3) -
config: Cover parsing of historical legacy config files (
07dc573) -
reservation: Fix issue with DST causing test failure (
6850403)
Detailed Changes: v4.2.0...v4.3.0