Skip to content

Release 26.04.02-01

Choose a tag to compare

@dotCMS-Machine-User dotCMS-Machine-User released this 02 Apr 19:57

Release: v26.03.27-01 → v26.04.02-01

Features & Enhancements

  • Configuration API: Introduces five new /api/v1/configuration REST endpoints (branding, locale, authentication, key regeneration) with semantic field names to replace legacy form-encoded APIs. (#34672)
  • Custom Fields: Adds a Settings tab to the Content Type field editor for custom fields, providing a native UI to configure hideLabel and render options (modal dimensions) without manual edits to the Field Variables tab. (#35027)
  • OSGi Plugins: Migrates the legacy Dojo/JSP OSGi Plugins portlet to a full Angular implementation with real-time WebSocket sync, drag-and-drop JAR upload, and context-menu actions per bundle. (#34957)
  • Relationship Field: Already-related items are now shown as disabled (with tooltip) in the "Select Existing Content" dialog for ONE_TO_ONE and ONE_TO_MANY relationship fields. (#35134)

Fixes and Known Issues

  • Multilingual Content: Fixes addContent() hanging indefinitely when DEFAULT_CONTENT_TO_DEFAULT_LANGUAGE=true causes mixed-language content re-submission, and corrects entity.containers incorrectly including wrong-language contentlets in the JSON response. (#35030)
  • Relationship Field: Fixes pagination showing the same items on every page by computing a paginatedData slice signal and correctly translating drag-reorder indices across pages. (#35126)
  • Relationship Hydration: Fixes GET /api/v1/content/{inodeOrIdentifier}?depth=N returning default-language relationships instead of the contentlet's actual language when fetching by inode. (#35168)
  • Velocity Templates: Escapes trailing bare $ in contentlet field values in FieldLoader.buildVelocity() to prevent a Velocity ParseException that caused ContentMap.get() to return null. (#35163)
  • Secrets: Fixes site-specific secrets not being resolved in background/Quartz workflow jobs — SecretTool now uses the contentlet's actual site hostname instead of falling back to System Host. (#35158)
  • REST API: Fixes non-admin users receiving an "Only Admin user can request a token for another user" error when issuing their own API token, caused by a reference equality (!=) bug. (#35166)
  • Rules Engine: Fixes the Rules dialog in Edit Content sending the site identifier instead of the page identifier to the rules engine by switching to an iframe pointing to the existing /dotAdmin/#/fromCore/rules?realmId={pageIdentifier} route. (#35159)
  • Inline Edit: Disables TinyMCE's convert_urls option to prevent root-relative asset paths (e.g. /dA/...) from being rewritten to relative paths on editor blur. (#35172)
  • Content Types: Fixes custom Page content types being rejected as valid detail pages by replacing a hardcoded "htmlpageasset" string check with a BaseContentType.HTMLPAGE base-type lookup. (#35175)
  • Content Palette: Restores the search bar visibility signal lost during modernization, and hides system content types (e.g. Dot Favorite Page) from the /api/v1/contenttype/page endpoint. (#35173, #35181)
  • Lara Theme: Fixes Firefox button styling in Containers/Templates Permissions tab, cross-browser file upload button hover, native <dialog> centering, login page "Remember Me" label wrapping, missing HEADING/INFO field rendering in Apps portlet, Tags bulk action toolbar, and Locales table UX. (#35157)

Infrastructure & Security

  • CI/CD: Registers OpenSearchUpgradeSuite in the CI test matrix with the OpenSearch 3.x upgrade container to validate upgrade compatibility automatically. (#35133)
  • CI/CD Diagnostics: Fixes the cicd-diagnostics skill misidentifying continue-on-error steps as root failures; adds diagnose.py as a single entry point with progressive subcommands. (#34866)
  • Content Types: Removes the deprecated Relationships tab from the Content Type editor along with all backing legacy JSP pages, Struts actions, and form beans. (#35167)
  • UVE: Improves logging and error handling in the UVE script injection flow, with graceful fallback when script building fails. (#35128)
  • Frontend: Replaces [ngClass] with idiomatic [class] and [class.class-name] bindings across several Angular components. (#35155)
  • Docker: Updates CUSTOM_STARTER_URL across all Docker Compose example configurations to starter version 20260331. (#35135, #35169)
  • Documentation: Updates plugin-seeds repository references to dotcms-community/plugin-examples. (#35171)