You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ImageHelper - Resolve source paths without a leading slash (images/photo.jpg) instead of returning them unprocessed
ImageHelper - Files in the webroot root no longer get a // or /./ segment in the cache path
ImageHelper - Return the original path for unsupported formats (e.g. svg, tiff) instead of saving JPEG data under the wrong extension
ImageHelper - Write thumbnails to a temporary file and rename them, so concurrent requests never serve a partial image
SeoHelper - schemaBreadcrumbList() numbers positions by item order; string or non-zero-based keys no longer throw TypeError or produce wrong positions
SeoHelper - schemaBreadcrumbList(), schemaFAQPage(), and schemaProduct()aggregateRating throw InvalidArgumentException for missing required keys instead of PHP warnings
HTML editor - Rendering the element twice no longer wraps a textarea in a second editor
HTML editor - new HtmlEditor(textarea) without options no longer throws
lightgallery, masonry elements - Wait for DOMContentLoaded and skip a missing container instead of throwing a JavaScript error
sticksy element - Docblock no longer references the host App\View\AppView class
Changed
ImageHelper - Unknown driver names (matched case-insensitively) no longer fall back to GD silently; processing returns the original path. getDriverInfo()['driver'] reports the configured driver instead of always the detected one
ImageHelper - Log processing errors at debug level when debug is enabled
SeoHelper - canonical() and the openGraph()og:url default to the current URL without the query string. Pass the URL explicitly to keep query parameters
SeoHelper - New currentUrl() method; jsonLd() accepts @graph documents without a top-level @type; the openGraph() missing-title message now reads Missing required `title` option for openGraph()
HTML editor - destroy() copies content back, removes the editor UI, and restores the textarea
Code style checks now cover templates/; CI runs PHP 8.4 and an imagick-only job; composer.json no longer hard-codes version