Administration
- Added the “View user” GraphQL schema option for Craft Solo. (#17863)
- The
clear-cachecommand now accepts a space-delimited list of cache IDs that should be cleared. - Compiled templates are now deleted by the
upcommand rather than frommigratecommands. - Added the
enableTwigSandboxconfig setting. (#18208, #18216) - The
disableGraphqlTransformDirectiveconfig setting is now deprecated.
Development
- Added support for referencing environment variables anywhere within settings that support them (e.g.
foo/$ENV_NAME/barorfoo-${ENV_NAME}-bar). (#17949) - It’s no longer possible to instantiate objects that don’t extend
yii\base\BaseObjectvia thecreate()Twig function. (GHSA-94rc-cqvm-m4pw) - Added the
uuid()Twig function. - The
@parseRefsand@transformGraphQL directives are now optional for each GraphQL schema. (GHSA-7x43-mpfg-r9wj)
Extensibility
- Added
craft\base\ElementInterface::setAttributesFromRequest(). - Added
craft\services\Search::deleteOrphanedIndexJobs(). - Added
craft\web\GqlResponseFormatter. - Added
craft\web\Response::FORMAT_GQL. - Added
craft\web\View::renderSandboxedObjectTemplate(). - Added
craft\web\View::renderSandboxedString(). - Added
craft\web\View::renderSandboxedTemplate(). - Added
craft\web\twig\AllowedInSandbox. (#18219) - Added
craft\web\twig\SecurityPolicy. - Added
craft\web\twig\nodes\BaseNode. craft\helpers\FileHelper::writeToFile()now throws an exception if the file path isn’t writable, or there isn’t sufficient free space on the disk. (#17762)craft\helpers\UrlHelpernow encodes square brackets in generated URLs. (#17840)craft\web\Request::accepts()now accepts wildcard characters (*) in the$contentTypeargument, to check for a range of MIME types (e.g.application/*+json).craft\web\Request::getAcceptsJson()now returnstruefor requests withContent-Typeheaders that matchapplication/*+json, in addition toapplication/json.- The
_includes/forms/radio.twigtemplate now escapes thelabelvariable. A raw HTML label can be passed by wrapping the label value inraw()orcraft\helpers\Template::raw(). Craft.ui.createCheckbox()now escapes theconfig.labelproperty. A raw HTML label can be passed via theconfig.labelHtmlproperty.Craft.ui.createSelect()now escapes options’labelproperties. Raw HTML labels can be passed vialabelHtmlproperties.
System
- GraphQL API responses now set their
Content-Typeheader toapplication/graphql-response+json. - GraphQL API responses now set cache headers based on whether a mutation was performed, regardless of the request type.
- Global set queries no longer register cache tags.
- A rate limit is now enforced for
users/send-password-reset-emailrequests. (#17337) - Updated Yii to 2.0.54.
- Updated Twig to 3.19. (#17603)
- Fixed a bug where Table fields with the “Static Rows” setting enabled would lose track of which values belonged to which row headings, if the “Default Values” table was reordered. (#17090)
- Fixed a bug where deadlocks could occur when updating elements’ search indexes. (#18139)
- Fixed low-severity XSS vulnerabilities. (GHSA-4mgv-366x-qxvx)
- Fixed a moderate-severity RCE vulnerability. (GHSA-v47q-jxvr-p68x)
- Fixed moderate-severity permission escalation vulnerabilities. (GHSA-2xfc-g69j-x2mp, GHSA-jxm3-pmm2-9gf6)