craftcms/cms
Craft CMS is a flexible, user-friendly PHP CMS for building custom web experiences. Features a Twig templating system, auto-generated GraphQL API for headless builds, ecommerce via Craft Commerce, a plugin store, and a powerful extension framework.
storage/runtime/ directory was getting created even if runtimePath was being overridden in config/app.php. (#18936)craft\services\Path::getRuntimePath(). Craft::$app->getRuntimePath() should be called instead.config/app.php wasn’t possible. (#18936)min-width styles based on their configured widths, if set. (#18534)<br> tags. (#18058)--to-default option to resave commands. (#18522)--method option to the users/remove-2fa command. (#18732)heading()/h() and h1()…h6() Twig functions. (#18524)tag() Twig function now accepts a string for its second argument. (#18524)|attr, |parseAttr, and |removeClass Twig filters no longer log warnings when performed on a string without an HTML tag. (#17622)|default Twig filter and is empty Twig test now treat all yii\base\Model instances as not empty. (#18727)|number Twig filter now has a locale argument. (#18823)|time and |datetime Twig filters now have withTimeZone arguments. (#18639)|timestamp Twig filter now returns the current time, if applied to a null/empty string value. (#18642)dataUrl() is no longer allowed in sandboxed Twig environments by default.delete GraphQL queries now have a hardDelete argument. (#18511)postDate values are now null on creation, rather than set to the dateCreated value. (#18642)url GraphQL fields’ immediately arguments are no longer deprecated. (#18581)craft\filters\SecFetchSiteFilter for request origin verification. (#18641)craft\fields\data\LinkData::getUrl() now has an $anyStatus argument, which can be set to false to prevent a value from being returned if a disabled/pending/expired element is linked. (#18527)craft\base\DefaultableFieldInterface. (#18522)craft\base\Element::EVENT_DEFINE_DELETION_BLOCKERS. (#18728)craft\base\ElementActionInterface::getTriggerId().craft\base\ElementInterface::deletionBlockers(). (#18728)craft\base\ElementInterface::setDirtyFieldTracking().craft\elements\PopulateElementEvent::$content.craft\elements\db\ElementQuery::$activeQuery.craft\elements\db\ElementQueryInterface::collectIds().craft\elements\deletionblockers\BaseDeletionBlocker. (#18728)craft\elements\deletionblockers\DeletionBlockerInterface. (#18728)craft\elements\deletionblockers\EntryAuthorsBlocker. (#18728)craft\elements\deletionblockers\RelationDeletionBlocker. (#18728)craft\errors\FieldNotFoundException::$fieldId.craft\events\DefineElementDeletionBlockersEvent. (#18728)craft\fieldlayoutelements\CustomField::setFieldId().craft\helpers\ElementHelper::belongsToCanonicalOwner().craft\helpers\Html::jsWithVars().craft\helpers\Markdown. (#18671)craft\models\Section::$minAuthors. (#18662)craft\queue\jobs\ReplaceRelations. (#18728)craft\services\Elements::REF_TAG_PATTERN.craft\services\Entries::reassignEntries().craft\validators\TimeValidator::$outOfRange. (#18575)Craft.CpScreenSlideout::reload(). (#18625)Craft.ElementDeletionManager.craft\elements\PopulateElementEvent::$row no longer includes fieldValues or generatedFieldValues keys.craft\helpers\DateTimeHelper::timeZoneAbbreviation() is no longer deprecated, and now has a $date argument.craft\i18n\Formatter::asTime() and asDatetime() now have $withTimeZone arguments. (#18639)craft\controllers\AppController::actionResourceJs(). (#18559)Craft.CP now triggers a queueCompleted event when the last queue job is completed.craft\controllers\UsersController::EVENT_DEFINE_CONTENT_SUMMARY. (#18728)craft\elements\User::$inheritorOnDelete. (#18728)craft\elements\actions\DeleteUsers. (#18728)craft\events\DefineUserContentSummaryEvent. (#18728)Craft.DeleteUserModal. (#18728)optimizeImageFilesize is disabled. (#18635)entrify/global-set command on subsequent environments. (#18767)composer.json were getting updated when installing/updating plugins. (#18755)resourceBasePath and resourceBaseUrl config settings weren’t being respected for console requests. (#18685)*Interface type condition. (#18708)id param was overridden. (#15570)eagerly(). (#18693)create() Twig function. (#18376)craft\helpers\ProjectConfig::pathDepth().craft\services\Fields::deleteLayout() and deleteLayoutById() now have $hardDelete arguments.craft\services\ProjectConfig::getPendingChangeSummary().entrify/global-set command. (#18650)craft\fields\data\JsonData objects from Twig. (#18656)craft\controllers\ElementIndexesController::$fieldLayouts.craft\services\ElementSources::getTableAttributes() now has a $fieldLayouts argument.aria-activedescendant, aria-flowto, and aria-owns attributes weren’t getting namespaced by {% namespace %} tags. (#18577)enabled values were being treated as enabled. (#18572)on EntryInterface) rather than a specific type name. (#18588)loginPath, logoutPath, setPasswordPath, or verifyEmailPath config settings were set to a callable that called the sites service. (#18605)craft\helpers\DateTimeHelper::testTimeToSeconds().utils/fix-field-layout-uids command. (#18516)craft\filters\SiteFilterTrait.authorGroup params with and or not operators wasn’t working properly. (#18551)gc command, if a Matrix field had been converted to an Addresses or Content Block field. (#18549)craft\web\AssetManager::$cacheSourcePaths disabled. (#18536)craft\fields\data\LinkData::getUrl() was returning the URL suffix rather than an empty string, if the rendered base URL was an empty string.craft\filters\IpRateLimitIdentity. (#18510)craft\helpers\App::resourcePathByUri().users/suspend-user and users/unsuspend-user actions required that the logged-in user have control panel access. (#18485)width and height attributes weren’t getting them set as expected.target="_blank" added to them. (#18500)resave commands. (#18453)craft\helpers\UrlHelper::cpReferralUrl() was returning the referrer URL even if it had the same URI as the current page. (#18483)PDO::MYSQL_ATTR_MULTI_STATEMENTS attribute is no longer set by default for database connections. (#18474)craft\elements\Entry::canMove().PDO::MYSQL_ATTR_MULTI_STATEMENTS attribute is now set to false by default for database connections.searchindex and searchindexqueue rows weren’t being deleted when an element was deleted for a site. (#18394)craft\helpers\App::parseEnv() was returning null instad of an empty string, when an environment variable name was passed in, which was set to an empty string.craft\services\Tokens::getRemainingTokenUsages().craft\web\Request::getTokenRoute().nb locale is now treated as a fallback for no on environments where no isn’t supported. (#18431)on/off and yes/no. (#18441)craft\helpers\Typecast. (#18426)App::normalizeBooleanValue().craft\events\ExecuteGqlQueryEvent::$cacheDuration. (#18442)craft\events\ExecuteGqlQueryEvent::$cacheTags. (#18442)craft\web\Request::getWantsImage().craft\web\Request::getWantsJson().craft\web\Request::wants().brokenImagePath config setting for Chrome. (#18438)0.slug columns referenced in element queries’ select, where, or orderBy expressions now explicitly resolve to elements_sites.slug. (#18416)craft\helpers\App::parseBooleanEnv() wasn’t handling false values properly. (#18418)DECIMAL field values with 0 precision weren’t gettnig typecasted properly in element queries.[!WARNING]
Relational condition rules’ element ID templates are now rendered in a sandboxed Twig environment, whenenableTwigSandboxis enabled.
craft\helpers\ElementHelper::cleanseQueryCriteria().X-Craft-Gql-Cache: no-cache header, or if the request contained any mutations. (#18348)content/<page-name>.create() Twig function now allows craft\helpers\ classes to be created. (#18376)yii\base\Event is now allowed in its entirety within sandboxed Twig environments.craft\helpers\ElementHelper::elementRevisionsUrl().craft\web\View::renderSandboxedObjectTemplate() and renderSandboxedString() weren’t properly sandboxing templates rendered from the control panel.draftOf set to false were omitting canonical elements that were duplicated for an owner draft.craft\models\Volume::getSubpath() could return / instead of an empty string, if the subpath was set to an environment variable set to an empty string. (#18379)alt text via GraphQL mutations. (#18381)craft\db\mysql\Schema::getRowFormat().craft\db\mysql\Schema::setRowFormat().craft\fieldlayoutelements\BaseField::getThumbOptions().craft\helpers\Cp::cardThumbOptions().craft\models\FieldLayout::getThumbHtmlForElement().craft\models\FieldLayout::hasThumbField().craft\models\FieldLayout::getThumbField(). hasThumbField() or getThumbHtmlForElement() should be used instead.entrytypes table’s row format was set to COMPACT. (#18349)craft\models\FieldLayout::getEditableCustomFieldElements().{% case %} tags with three or more values within {% switch %} tags weren’t working properly. (#18334){% case %} tags within {% switch %} tags weren’t working properly. (#18334)position properties weren’t being handled properly. (#18310)min/max attributes set on their input. (#17973)composer.json are now set with caret operators (e.g. ^1.2.3). (#18297)entrify commands no longer require a category group/tag group/global set handle to be passed.entrify commands now automatically assign newly-created channel/structure sections to “Categories” or “Tags” pages. (#17779)clear-cache command now accepts a space-delimited list of cache IDs that should be cleared.up command now warns about any astray license issues before running migrations. (#18297)up command rather than from migrate commands.enableTwigSandbox config setting. (#18208, #18216)useIdnaNontransitionalToUnicode config setting. (#17946)maxCachedCloudImageSize config setting is now set to 0 by default. (#17997)disableGraphqlTransformDirective config setting is now deprecated.true/false/null/integer/float values to the appropriate types. (#18267)foo/$ENV_NAME/bar or foo-${ENV_NAME}-bar). (#17794)CRAFT_SITE (the current site’s handle) and CRAFT_SITE_UPPER (the current site’s handle in UPPER_SNAKE_CASE) environment variables, which are defined at runtime. (#17794)yii\base\BaseObject via the create() Twig function, which fixes a moderate-severity SSTI issue. (GHSA-94rc-cqvm-m4pw)randomString() Twig function. (#18020)uuid() Twig function.hash filter now supports passing a hashing algorithm, such as 'md5' or 'sha256'. (#17885)[@parseRefs](https://github.com/parseRefs) and [@transform](https://github.com/transform) GraphQL directives are now optional for each GraphQL schema, which fixes a high-severity IDOR issue. (GHSA-7x43-mpfg-r9wj)X-Craft-Preview-Token header, set to the x-craft-preview/x-craft-live-preview query param in the preview target URL.foo/$ENV_NAME/bar or foo-${ENV_NAME}-bar). (#17949)yii\base\BaseObject via the create() Twig function. (GHSA-94rc-cqvm-m4pw)uuid() Twig function.[@parseRefs](https://github.com/parseRefs) and [@transform](https://github.com/transform) GraphQL directives are now optional for each GraphQL schema. (GHSA-7x43-mpfg-r9wj)craft\web\View::EVENT_BEFORE_RENDER_TEMPLATE and EVENT_BEFORE_RENDER_PAGE_TEMPLATE. (#18125)getIcon() method.craft\base\ElementIndex::multiPageSources(). (#17779)craft\base\ElementTrait::$applyingDraft. (#18057)craft\base\ElementTrait::$hasProvisionalChanges. (#17915)craft\base\ElementTrait::$propagateRequired.craft\base\FieldInterface::propagateValue().craft\elements\Entry::EVENT_DEFINE_META_FIELDS. (#17996)craft\elements\User::isInGroups(). (#17989)craft\elements\actions\Duplicate::$asDrafts.craft\elements\conditions\HintableConditionRuleTrait. (#17909)craft\events\DefineFieldActionsEvent.craft\events\DefineGqlArgumentsEvent.craft\events\DefineMetaFields. (#17996)craft\events\RegisterElementCardAttributesEvent::$fieldLayout. (#17920)craft\fieldlayoutelements\BaseField::EVENT_DEFINE_ACTION_MENU_ITEMS. (#18037)craft\fieldlayoutelements\BaseField::copyAttributeAction(). (#18114)craft\fieldlayoutelements\BaseField::getPreviewOptions().craft\fieldlayoutelements\BaseField::key().craft\fieldlayoutelements\CustomField::getElementEditCondition().craft\fieldlayoutelements\CustomField::setElementEditCondition().craft\fields\BaseRelationField::VIEW_MODE_CARDS_GRID.craft\fields\BaseRelationField::VIEW_MODE_CARDS.craft\fields\BaseRelationField::VIEW_MODE_LIST_INLINE.craft\fields\BaseRelationField::VIEW_MODE_LIST.craft\fields\BaseRelationField::VIEW_MODE_THUMBS.craft\fields\Matrix::VIEW_MODE_CARDS_GRID.craft\fields\data\LinkData::getAttributes(). (#18184)craft\gql\base\ElementArguments::EVENT_DEFINE_ARGUMENTS. (#18062)craft\helpers\Assets::resolveSubpath(). (#18103)craft\helpers\Cp::cardPreviewOptions().craft\helpers\ElementHelper::loadProvisionalChanges(). (#17915)craft\helpers\StringHelper::convertLineBreaks().craft\helpers\UrlHelper::cpReferralUrl().craft\i18n\Locale::getDefaultCurrency().craft\models\EntryType::$uiLabelFormat.craft\models\FieldLayout::$thumbFieldKey.craft\models\FieldLayout::getCardBodyHtmlForElement().craft\models\FieldLayout::getElementByKey().craft\models\FieldLayoutForm::getStaticElements().craft\models\Section::getCpIndexUri().craft\models\Section::getPage().craft\services\ElementSources::getFirstPage(). (#17779)craft\services\ElementSources::getPageSettings(). (#17779)craft\services\ElementSources::getPages(). (#17779)craft\services\ElementSources::pageExists(). (#17779)craft\services\ElementSources::pageNameId(). (#17779)craft\services\ElementSources::savePageSettings().craft\services\ElementSources::saveSources().craft\services\Search::deleteOrphanedIndexJobs().craft\services\Structure::EVENT_AFTER_UPDATE_ELEMENT.craft\services\Structure::EVENT_BEFORE_UPDATE_ELEMENT.craft\web\BaseSpreadsheetResponseFormatter.craft\web\GqlResponseFormatter.craft\web\Request::getHasInvalidToken().craft\web\Response::FORMAT_GQL.craft\web\Response::FORMAT_XLSX.craft\web\Response::FORMAT_YAML.craft\web\View::renderSandboxedObjectTemplate().craft\web\View::renderSandboxedString().craft\web\View::renderSandboxedTemplate().craft\web\XlsxResponseFormatter.craft\web\YamlResponseFormatter.craft\web\twig\AllowedInSandbox. (#18219)craft\web\twig\SecurityPolicy.craft\web\twig\nodes\BaseNode.Craft.BaseElementIndex::asyncSelectDefaultSource().Craft.BaseElementIndex::asyncSelectSource().Craft.BaseElementIndex::asyncSelectSourceByKey().Craft.BaseElementIndex::ensureSourceAttributeInfo().craft\base\Element::EVENT_AFTER_MOVE_IN_STRUCTURE is no longer deprecated.craft\base\Element::EVENT_BEFORE_MOVE_IN_STRUCTURE is no longer deprecated.craft\base\ElementInterface::afterMoveInStructure() is no longer deprecated.craft\base\ElementInterface::beforeMoveInStructure() is no longer deprecated.craft\base\ElementInterface::cardAttributes() now has a $fieldLayout argument. (#17920)craft\events\ElementStructureEvent is no longer deprecated.craft\fieldlayoutelements\CustomField::editable() now has an $element argument.craft\helpers\ElementHelper::findSource() now has $withDisabled and $page arguments.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\UrlHelper now encodes square brackets in generated URLs. (#17840)craft\models\FieldLayout::getCardBodyElements() now always returns an array of arrays with html keys.craft\services\ElementSources::getSources() now has a $page argument. (#17779)craft\services\ElementSources::sourceExists() now has a $page argument. (#17779)craft\web\Request::accepts() now accepts wildcard characters (*) in the $contentType argument, to check for a range of MIME types (e.g. application/*+json).craft\web\Request::getAcceptsJson() now returns true for requests with Content-Type headers that match application/*+json, in addition to application/json.storageKey setting._includes/forms/checkbox.twig template now escapes the label variable. A raw HTML label can be passed by wrapping the label value in raw() or craft\helpers\Template::raw()._includes/forms/radio.twig template now escapes the label variable. A raw HTML label can be passed by wrapping the label value in raw() or craft\helpers\Template::raw().Craft.ui.createCheckbox() now escapes the config.label property. A raw HTML label can be passed via the config.labelHtml property.Craft.ui.createSelect() now escapes options’ label properties. Raw HTML labels can be passed via labelHtml properties.craft\fieldlayoutelements\BaseField::$includeInCards.craft\fieldlayoutelements\BaseField::$providesThumbs.craft\fields\BaseRelationField::$showCardsInGrid.craft\fields\Matrix::$showCardsInGrid.craft\helpers\StringHelper::capitalizePersonalName(). toPascalCase() should be used instead.craft\helpers\StringHelper::isWhitespace(). isBlank() should be used instead.craft\helpers\StringHelper::upperCamelize(). toPascalCase() should be used instead.craft\models\FieldLayout::getCardBodyAttributes().craft\models\FieldLayout::getCardBodyFields().craft\services\Structure::EVENT_AFTER_MOVE_ELEMENT. EVENT_AFTER_UPDATE_ELEMENT should be used instead.craft\services\Structure::EVENT_BEFORE_MOVE_ELEMENT. EVENT_BEFORE_UPDATE_ELEMENT should be used instead.craft\web\CsvResponseResponseFormatter::$escapeChar.Craft.BaseElementIndex::selectDefaultSource().Craft.BaseElementIndex::selectSource().Craft.BaseElementIndex::selectSourceByKey().$cardElements argument in craft\helpers\Cp::cardPreviewHtml().$cardElements argument in craft\models\FieldLayout::getCardBodyElements().Content-Type header to application/graphql-response+json.:) in their names. (#18158)users/send-password-reset-email requests. (#17337)search query param if present on the initial request.purgeStaleUserSessionDuration config setting was set to a duration interval string. (#18238)orderBy. (#18148)utils/fix-field-layout-uids command now checks for duplicate top-level field layout UUIDs. (#18193):empty:/:notempty: element query params properly for options with blank values. (#18156)-) within Link fields’ “Class Name” values were getting removed. (#18201)lazyGqlTypes config setting was enabled. (#18014)@. (#18123):empty:/:notempty: element query params properly if the field had multiple instances within a field layout. (#18092)plugin/install command. (#17871)folderPath param. (#18056).env if the environment variable didn’t exist yet. (#17942)_includes/field.twig template was included without passing an element variable. (#17926):empty:/:notempty: params properly. (#17763)fields/auto-merge command now writes updated project config YAML files after each merge. (#16198)new is now a reserved filesystem handle.craft\base\ApplicationTrait::ensureEdition().utils/fix-field-layout-uids command. (#17848)EVENT_DEFINE_EXTRA_FIELDS event wasn’t getting triggered for elements. (#17866)craft\services\Assets::EVENT_AFTER_REPLACE_ASSET events weren’t getting triggered when replacing an asset file via GraphQL. (#17005)craft\helpers\Typecast wasn’t typecasting DateTimeInterface property values.lazyGqlTypes config setting was enabled. (#17858)Craft::$app->getEdition() was called early in the request. (#16288)craft\base\NestedElementInterface::getOwners().craft\base\NestedElementTrait::getOwners().firstName, lastName, and fullName values properly. (#17807)sort query string parameter, so the selected sort option could revert back if the window was reloaded. (#17761)folderPath asset query param required a trailing slash. (craftcms/html-field#18)_includes/forms/button.twig template was HTML-encoding the iconHtml value.craft\services\UserPermissions::validatePermission().craft\services\UserPermissions::reset().craft\models\FieldLayout::EVENT_CREATE_FORM event handlers can now control whether the form will be rendered statically, by setting $event->static. (#17699)craft\elements\Asset::getFormattedSizeInBytes() wasn’t returning null when the asset’s size property was null. (#17695)returnUrl param to standalone Live Preview URLs. (#17684)newUser set to true. (#17659)craft\helpers\User::getLoginFailureInfo().craft\helpers\User::getLoginFailureMessage().preventUserEnumeration was enabled.title text to the buttons, revealing the icon name. (#17598)submitButtonLabel was set on the controller response. (#17567)autoLoginAfterAccountActivation config setting wasn’t being respected when email verification was disabled. (#17571)craft\elements\Asset::getMimeType() no longer fetches the MIME type from disk for local assets. (#17549)field or fieldId parameters if an owner parameter wasn’t specified. (#17565)craft\helpers\Cp::parseMarkdown().craft\helpers\Html::decodeDoubles().cpmd Twig filter for control panel templates.author fields via GraphQL. (#17555)allowAdminChanges was disabled. (#17535)[!NOTE] Elements with Link fields created before Craft 5.5.0 should be resaved to take advantage of the new “is of type” condition rule operator. (#17277)
[!NOTE] Elements with multi-instance relation fields created before Craft 5.3.0 should be resaved to ensure their condition rules continue to work properly. (#17295)
accessibilityDefaults config setting can now contain notificationPosition and slideoutPosition keys. (#17169)autoLoginAfterAccountActivation config setting no longer applies to the password reset flow. (#17522)<handle>Entry GraphQL queries for each Single section, which resolve to the single entry within them. (#17278)returnUrl query string param. (#17137)craft\base\Describable.craft\base\Element::EVENT_RENDER. (#17188)craft\base\Element::partialTemplatePathCandidates().craft\base\ElementInterface::getGeneratedFieldValues().craft\base\ElementInterface::render().craft\base\ElementInterface::setGeneratedFieldValues().craft\base\ElementTrait::$updateSearchIndexImmediately.craft\base\Field::RESERVED_HANDLES.craft\base\FieldInterface::showStatus().craft\elements\Asset::setMimeType().craft\elements\ContentBlock.craft\elements\db\ContentBlockQuery.craft\events\RenderElementEvent. (#17188)craft\fieldlayoutelements\BaseField::showStatus().craft\fields\BaseRelationField::$showSearchInput.craft\fields\BaseRelationField::canShowSiteMenu().craft\fields\BaseRelationField::hasSelectionCondition().craft\fields\BaseRelationField::showSearchInput().craft\fields\conditions\GeneratedFieldConditionRule.craft\fields\conditions\LinkFieldConditionRule.craft\fields\data\IconData.craft\fields\data\OptionData::$color.craft\fields\data\OptionData::$icon.craft\gql\arguments\elements\ContentBlock.craft\gql\interfaces\elements\ContentBlock.craft\gql\resolvers\elements\ContentBlock.craft\gql\types\IconData.craft\gql\types\elements\ContentBlock.craft\gql\types\generators\ContentBlock.craft\gql\types\generators\IconDataType.craft\gql\types\input\ContentBlock.craft\helpers\Cp::buttonGroupFieldHtml().craft\helpers\Cp::buttonGroupHtml().craft\helpers\Cp::editableTableHtml().craft\helpers\Cp::generatedFieldsTableHtml().craft\helpers\ElementHelper::isMultiSite().craft\helpers\ElementHelper::setProvisionalDraftUser().craft\models\EntryType::$description.craft\models\EntryType::$group.craft\models\FieldLayout::getCardThumbAlignment().craft\models\FieldLayout::getGeneratedFieldByUid().craft\models\FieldLayout::getGeneratedFields().craft\models\FieldLayout::isUiElementIncluded().craft\models\FieldLayout::resetUids().craft\models\FieldLayout::setCardThumbAlignment().craft\models\FieldLayout::setGeneratedFields().craft\records\ContentBlock.craft\services\Gql::defineContentArgumentsForGeneratedFields().craft\web\Request::getValidatedQueryParam().craft\elements\Asset::getMimeType() now returns the file’s actual MIME type (rather than the MIME type associated with the file’s extension), for locally-stored assets. (#17254)craft\fields\data\ColorData now extends craft\base\Model and includes blue, green, hex, luma, red, and rgb attributes in its array keys. (#17265)craft\services\Assets::replaceAssetFile() now has a $mimeType argument.craft\services\Users::saveUserPhoto() now has a $mimeType argument.craft\validators\HandleValidator now supports validateValue().buttonGroup and buttonGroupField macros to the _includes/forms.twig template._includes/forms/buttonGroup.twig template._layouts/cp.twig template now supports passing an actionButton variable. (#17423)Craft.CpScreenSlideout now supports overriding the closeOnEsc, closeOnShadeClick, containerElement, and containerAttributes settings. Slideouts with a non-<form> container element won’t get a “Save” button, and the close button will be labelled “Close” rather than “Cancel”. (#13593)Craft.EntryTypeSelectInput now triggers an applySettings event. (#17387)craft\web\assets\picturefill\PicturefillAsset. (#17344)craft\elements\db\ElementQuery::customFields().craft\elements\Asset::getMimeType(). (#17254)null. (#17452)craft\fields\linktypes\BaseLinkType::isValueEmpty().craft\services\Auth::getAuthErrorMessage().craft\services\ElementSources::sourceExists().aria-describedby and aria-labelledby values. (#17413)0 icons. (#17381)update-statuses action now ensures it is only being run once at a time.craft\elements\User::getHasSsoIdentity().craft\services\Fields::getLayoutById() now has a $withTrashed argument.--language option was required when running the install command non-interactively.craft up with pending project config YAML files which cause a Single section’s entry type to be soft-deleted.__blank” for custom fields with labels overridden to be hidden. (#17305)up command was updating project config YAML files when admin changes weren’t allowed. (#17345)where is now a reserved field handle. (#17269)assets/generate-transform requests. (#17228)^6.0. (#17229)craft\services\Entries::getEntryTypeById() now has a $withTrashed argument.craft\helpers\StringHepler::replaceMb4(). (#17202)_includes/forms/button.twig wasn’t rendering labels set to '0'. (#17225)0 icon selections.entry-types/merge command, if the outgoing entry type was used by a Single section. (#16628)resave/* commands could end prematurely if an unexpected error occurred.forms.checkboxField macro wasn’t respecting fieldset and checkboxLabel keys passed into its config.replace Twig filter to a null variable. (#17159)disableAutofocus and notificationDuration values per the accessibilityDefaults config setting weren’t being respected for users who hadn’t saved their preferences yet.omitScriptNameInUrls and usePathInfo config settings were both disabled. (#17147)not 1 to a Lightswitch field’s element query param wasn’t yielding expected results. (#17149)orderBy param contained unexpected syntax.0, preventing the “Author” field from being displayed on Edit Entry screens. (#16898)allowAdminChanges is disabled. (#16508)staticStatuses config setting, for opting into entry statuses being stored statically and only updated on save. (#17024)db/repair command. (#16812)fields/delete command. (#16828)update-statuses command. (#17024)--batch-size option for resave/* commands. (#16586)plugin/install command now accepts an edition argument, and prompts for the default edition if none is specified. (#17030)plugin/uninstall command now reports if no plugin is installed with the provided handle. (#17030)users/create command now prompts to send an activation email, or outputs an activation URL. (#16794)classHandle, content, rawContent, and value are no longer globally-reserved handles.searchKeywords is no longer a globally-reserved handle, except for custom fields.section and type are no longer globally-reserved handles, except for custom fields within entry type field layouts.postDate is no longer a reserved custom field handle, except within entry type field layouts.username is no longer a reserved custom field handle, except within the user field layout.canonicalsOnly element query param.value and strict keys. (#17083)null. (#17084)defaultLabel nested field to Link fields’ GraphQL data. (#16637)download and filename nested fields to Link fields’ GraphQL data. (#16844)element, asset, entry, etc., nested fields to Link fields’ GraphQL data. (#16698)searchTermOptions GraphQL query argument. (#16979)withProvisionalDrafts GraphQL query argument. (#16720)revisionNotes GraphQL entry mutation argument. (#16943)orderBy expressions. (#16729)aria-label attributes via an ariaLabel property.icon columns.craft\base\Element::couldHaveAnimatedThumb().craft\base\ElementInterface::baseBulkDuplicateAttributes().craft\base\ElementInterface::baseGqlType().craft\base\ElementInterface::canCopy().craft\base\ElementInterface::getCardTitle().craft\base\ElementInterface::getSerializedFieldValuesForDb().craft\base\Field::EVENT_DEFINE_ACTION_MENU_ITEMS. (#16779)craft\base\FieldInterface::serializeValueForDb().craft\base\FieldLayoutComponent::conditionalSettingsHtml().craft\base\FieldLayoutComponent::normalizeCondition().craft\base\FieldLayoutElement::alwaysRefresh().craft\base\FieldTrait::$static.craft\base\conditions\BaseMultiSelectConditionRule::$includeEmptyOperators.craft\db\Table::BULKOPEVENTS.craft\db\Table::SEARCHINDEXQUEUE_FIELDS.craft\db\Table::SEARCHINDEXQUEUE.craft\elements\Entry::$oldStatus. (#17024)craft\elements\Entry::$placeInStructure.craft\elements\actions\Copy.craft\elements\actions\MoveDown.craft\elements\actions\MoveUp.craft\events\BulkOpEvent::defer(). (#16655)craft\events\UpdateReleaseEvent.craft\fieldlayoutelements\CustomField::getEditCondition().craft\fieldlayoutelements\CustomField::setEditCondition().craft\fields\BaseOptionsField::$optionColors, which can be set to true by subclasses to enable the “Color” setting for field options. (#16645)craft\fields\BaseOptionsField::$optionIcons, which can be set to true by subclasses to enable the “Icon” setting for field options. (#16645)craft\fields\BaseRelationField::$defaultPlacement.craft\fields\BaseRelationField::DEFAULT_PLACEMENT_BEGINNING.craft\fields\BaseRelationField::DEFAULT_PLACEMENT_END.craft\fields\Matrix::$enableVersioning.craft\fields\data\ColorData::$label. (#16492)craft\fields\data\JsonData.craft\fields\data\LinkData::$download.craft\fields\data\LinkData::getFilename().craft\fields\data\LinkData::setFilename().craft\fields\linktypes\BaseElementLinkType::elementGqlType().craft\fields\linktypes\BaseLinkType::filename().craft\helpers\Cp::reset(). (#16848)craft\helpers\Json::reindent().craft\models\FieldLayout::getEditableCustomFields().craft\models\UpdateRelease::EVENT_IS_CRITICAL.craft\models\UpdateRelease::isCritical().craft\queue\ReleasableQueueInterface. (#16672)craft\records\User::haveIndexAttributesChanged().craft\services\Elements::EVENT_AUTHORIZE_COPY.craft\services\Elements::canCopy().craft\services\Elements::getBulkOpKeys().craft\services\Search::indexElementIfQueued().craft\services\Search::queueIndexElement().craft\web\CpScreenResponseBehavior::$toolbarHtml.craft\web\CpScreenResponseBehavior::toolbarHtml().craft\web\CpScreenResponseBehavior::toolbarTemplate().craft\web\View::registerIcon().craft\web\assets\codemirror\CodeMirrorAsset.craft\base\Element::fieldLayoutFields() now has an editableOnly argument.craft\base\ElementInterface::eagerLoadingMap() and craft\base\EagerLoadingFieldInterface::eagerLoadingMap() can now specify mappings for multiple target element types, or not specify the element types at all. (#16972)craft\cache\ElementQueryTagDependency now merges cache tags provided by the element query with any tags already set on its $tags property.craft\elements\NestedElementManager::getCardsHtml() and getIndexHtml() now accept canPaste config options, which can be set to true, false, or a JavaScript function.craft\helpers\Db::parseBooleanParam() now accepts null and array<string|bool|null> values.craft\services\Elements::duplicateElement() now has a checkAuthorization argument.craft\services\Fields::getLayoutByType() now has a create argument.craft\services\Users::ensureUserByEmail() now prioritizes credentialed users.Craft.animate() and Craft.animateAll(). (#16849)Craft.cp.clearCopiedElements().Craft.cp.getCopiedElements().Craft.cp.onCopyElements().Craft.ui.createIconPicker().Craft.ui.createIconPickerField().Craft.ui.createPasteButton().Craft.ui.icon().Craft.ui.createButton() now supports passing an icon config option._includes/forms/button.twig control panel template now supports passing an icon variable.elements/bulk-duplicate action.elements/duplicate action no longer creates an unpublished draft by default, or deletes the source element if it’s a provisional draft by default. asUnpublishDraft and deleteProvisionalDraft params can be passed to it to re-enable those behaviors where needed.craft\queue\Queue::release() and releaseAll() now call release() and releaseAll() on the proxied queue if it implements craft\queue\ReleasableQueueInterface. (#16672)changedattributes and changedfields tables are now cleaned up during garbage collection. (#16531)resourcepaths table is now truncated when clearing control panel resources, via the Caches utility or the clear-caches/cp-resources command. (#16514)dateAdded values each time the project config is rebuilt, for field layouts that haven’t been explicitly saved since updating to Craft 5.3.0+. (#16899)CRAFT_WEB_URL and CRAFT_WEB_ROOT environment variables could be overridden by [@web](https://github.com/web) and [@webroot](https://github.com/webroot) aliases define by the aliases config setting. (#16980)getOwner() and getPrimaryOwner() methods weren’t working properly if they had been queried alongside other elements that didn’t share the same owner type. (#16960)href-less <a> tags.craft\mail\Mailer::send() wasn’t always setting the template mode back to the original. (#17089)craft\services\Assets::EVENT_BEFORE_REPLACE_ASSET events weren’t getting triggered when replacing an asset file via GraphQL. (#17005)resourceBasePath setting was set to a nonexistent folder path. (#17021)includeSubfolders asset GraphQL query argument wasn’t working. (#17023)Craft::createObject() with its relation field data included in the passed-in config. (#16942)folderPath asset query param only accepted strings. (#16981)craft\elements\Asset::getSrcset() could return malformed results if any sizes didn’t have corresponding image URLs. (#16984)revisionNotes GraphQL fields were returning the entry’s current revision’s notes. (#16909)craft\base\NestedElementTrait::setPrimaryOwnerId() and setOwnerId() weren’t clearing out the memoized owner element.redirect params passed by login forms. (#16905)craft\base\conditions\BaseTextConditionRule::isEmpty().craft\htmlpurifier\RelAttrLinkTypeDef.rel attributes to be set to any value. (#16798)_includes/forms/button.twig was always adding class="btngroup-btn-first" to the resulting button HTML.{slug} in the subpath could create folders named after temporary slugs. (#16799)craft\base\ElementTrait::$isNewSite.craft\queue\jobs\PropagateElements::$isNewSite.string().ancestors and parent eager-loading wasn’t working on some environments. (#16381, #16382, #16341)afterSave().craft\base\Element::ancestors().craft\base\Element::descendants().preserveAspectRatio attributes. (#16709)<style> tags. (nystudio107/craft-retour#329)level. (#16661)up command, the app/migrate action, and the Project Config utility weren’t aware of pending project config changes if a database backup was restored but caches weren’t cleared. (#16668)users/remove-2fa command.fit transform mode. (#16622)<sectionHandle>Entries) weren’t available if a Matrix or CKEditor field existed with the same handle as the section.migrate/up and migrate/all commands were writing out changes to the project config YAML when there were already pending YAML changes. (#16086)token query string param. (#16630)edit/<elementId> route for a draft that no longer existed.utils/prune-orphaned-entries command. (#16598)craft\db\QueryBatcher::getSlice() wasn’t using the database connection passed to the class constructor. (#16579)allowAdminChanges is disabled, indicating that settings are read-only. (#16563)craft\web\User::getDefaultReturnUrl().cp.login.alternative-login-methods hook to the system login template.allowAdminChanges was false. (#16509)craft\services\Sso::findUser() wasn't accounting for soft-deleted users. (#16491)craft\elements\Asset::getSrcset() (and srcset method arguments) weren’t producing the correct transform URLs if the asset already had a named transform applied to it. (#16486)utils/delete-empty-volume-folders command was deleting folders that had no assets directly, but had subfolders. (#16388)allowAdminChanges is disabled. (#16265)elementChip() and elementCard(). (#16267)elements/delete-all-of-type command. (#16423)utils/delete-empty-volume-folders command. (#16388)resave commands.resave commands’ --drafts, --provisional-drafts, and --revisions options can now be set to null, causing elements to be resaved regardless of whether they’re drafts/provisional drafts/revisions.systemTemplateCss config setting. (#16344)loginPath, logoutPath, setPasswordPath, and verifyEmailPath config settings are now respected in headless mode. (#16344)_partials/entry.twig as opposed to _partials/entry/typeHandle.twig. (#16125)primarySite global Twig variable. (#16370)PHP_INT_MAX global Twig variable.duration Twig filter now has a language argument. (#16332)indexOf Twig filter now has a default argument, which can be any integer or null. (-1 by default for backwards compatibility.){% cache %} tags now cache any JavaScript import map entries registered via craft\web\View::registerJsImport() within them.{% requireAdmin %} tag now supports passing a boolean value, which determines whether administrative changes must be allowed (defaults to true).withProvisionalDrafts element query param, which causes the resulting elements to be replaced with any provisional drafts for the current user.orderBy and select params (e.g. myDateField.tz). (#16157)where params. (#16318)0, and a number formatted with the correct decimal points when using MySQL. (16369)affiliatedSite and affiliatedSiteId user query and GraphQL params. (#16174)affiliatedSiteHandle and affiliatedSiteId user GraphQL field. (#16174)X-Craft-Site header set to a site ID or handle. (#16367)value keys set to element instances or IDs. (#16255)disable2fa config setting. (#16426)config/redirects.php. (#16355)ucfirst Twig filter. capitalize should be used instead.craft\attributes\EnvName.craft\base\ConfigurableComponentInterface::getReadOnlySettingsHtml(). (#16265)craft\base\CrossSiteCopyableFieldInterface. (#14056)craft\base\Element::EVENT_DEFINE_ALT_ACTIONS. (#16294)craft\base\ElementInterface::getAltActions(). (#16294)craft\base\ElementInterface::getIsCrossSiteCopyable(). (#14056)craft\base\ElementTrait::$viewMode. (#16324)craft\base\Field::copyCrossSiteValue(). (#14056)craft\base\Field::dbTypeForValueSql().craft\base\Indicative.craft\base\NestedElementTrait::ownerType().craft\base\PluginTrait::$hasReadOnlyCpSettings. (#16265)craft\base\Plugininterface::getReadOnlySettingsResponse(). (#16265)craft\base\conditions\BaseElementSelectConditionRule::allowMultiple().craft\base\conditions\BaseElementSelectConditionRule::getElementIds().craft\base\conditions\BaseElementSelectConditionRule::setElementIds().craft\elements\User::$affiliatedSiteId.craft\elements\User::getAffiliatedSite().craft\elements\User::getHasPassword().craft\elements\conditions\entries\FieldConditionRule.craft\elements\db\ElementQueryInterface::getFieldLayouts().craft\elements\db\NestedElementQueryTrait::fieldLayouts().craft\events\DefineAltActionsEvent.craft\events\RedirectEvent. (#16355)craft\fieldlayoutelements\BaseField::actionMenuItems().craft\fieldlayoutelements\BaseField::isCrossSiteCopyable().craft\fields\BaseRelationField::gqlFieldArguments().craft\fields\Color::$allowCustomColors. (#16249)craft\fields\Color::$palette. (#16249)craft\fields\Color::getDefaultColor(). (#16249)craft\fields\Color::setDefaultValue(). (#16249)craft\fields\Link::$fullGraphqlData.craft\fields\data\LinkData::$ariaLabel.craft\fields\data\LinkData::$class.craft\fields\data\LinkData::$id.craft\fields\data\LinkData::$rel.craft\fields\data\LinkData::$title.craft\fields\data\LinkData::$urlSuffix.craft\fields\data\LinkData::getElementQuery(). (#16458)craft\fields\data\LinkData::getUrl().craft\fields\linktypes\BaseElementLinkType::elementQuery().craft\gql\types\LinkData.craft\gql\types\generators\LinkDataType.craft\helpers\Cp::colorHtml().craft\helpers\Cp::readOnlyNoticeHtml(). (#16265)craft\helpers\Image::EXIF_IFD0_ROTATE_0_MIRRORED.craft\helpers\Image::EXIF_IFD0_ROTATE_0.craft\helpers\Image::EXIF_IFD0_ROTATE_180_MIRRORED.craft\helpers\Image::EXIF_IFD0_ROTATE_270_MIRRORED.craft\helpers\Image::EXIF_IFD0_ROTATE_90_MIRRORED.craft\helpes\Html::disableInputs(). (#16265)craft\mail\Mailer::$siteId.craft\mail\Mailer::$siteOverrides.craft\models\AssetIndexingSession::$forceStop. (#16435)craft\models\EntryType::$original. (#16453)craft\models\EntryType::$validateHandleUniqueness. (#16453)craft\models\EntryType::getUsageConfig(). (#16453)craft\models\MailSettings::$siteOverrides.craft\services\Elements::canSaveCanonical().craft\services\Entries::getEntryType(). (#16453)craft\services\Gql::getFieldLayoutArguments().craft\web\ErrorHandler::EVENT_BEFORE_REDIRECT. (#16355)craft\web\RedirectRule. (#16355)craft\web\UrlRule::regexTokens().craft\web\User::getImpersonator().craft\web\User::getImpersonatorId().craft\web\User::setImpersonatorId().craft\web\View::clearJsImportBuffer(). (#16414)craft\web\View::registerJsImport(). (#16414)craft\web\View::registerScriptWithVars(). (#16414)craft\web\View::setTwig().craft\web\View::startJsImportBuffer(). (#16414)craft\web\twig\variables\Cp::EVENT_REGISTER_READ_ONLY_CP_SETTINGS. (#16265)GuzzleHttp\Client is now instantiated via Craft::createObject(). (#16366)craft\elements\Entry::getAvailableEntryTypes() now has a $triggerEvent argument.craft\elements\NestedElementManager::getIndexHtml() now supports passing defaultSort in the $config array. (#16236)craft\elements\conditions\entries\MatrixFieldConditionRule is now an alias of FieldConditionRule.craft\helpers\App::envConfig() now checks for a craft\attributes\EnvName attribute on public properties, which can be used to override the environment variable name (sans prefix) that is associated with the property.craft\helpers\Cp::elementIndexHtml() now supports passing defaultSort in the $config array, when sources is null. (#16236)craft\helpers\Cp::fieldHtml() now supports passing an actionMenuItems array in the config. (#16415)craft\helpers\DateTimeHelper::humanDuration() now has a $language argument. (#16332)craft\models\ImageTransform objects are now instantiated via Craft::createObject(). (#15646)craft\models\Site now implements craft\base\Chippable.craft\services\Revisions::createRevision() no longer creates the revision if an EVENT_BEFORE_CREATE_REVISION event handler sets $event->handled to true and at least one revision already exists for the element. (#16260)defineCardAttributes() methods can now return a placeholder value set to a callable.craft\controllers\RedirectController. (#16355)craft\elements\User::EVENT_REGISTER_USER_ACTIONS.craft\elements\User::IMPERSONATE_KEY. craft\web\User::getImpersonatorId() should be used instead.craft\fields\Color::$presets. (#16249)craft\fields\Link::$showTargetField._includes/forms/autosuggest.twig now supports a suggestTemplates variable._includes/forms/colorSelect.twig now supports options and withBlankOption variables._includes/forms/componentSelect.twig now supports a showIndicators variable._includes/forms/entryTypeSelect.twig now supports an allowOverrides variable._includes/forms/selectize.twig now supports a color property in option data, which can be set to a hex value or a color name.Craft.EntryTypeSelectInput.Craft.IntervalManager. (#16398)/login (per the loginPath config setting) if a site template doesn’t exist in the same location. (#16344)/login (per the loginPath config setting) to complete the verification process. (#16344)systemTemplateCss config setting. (#16344)preview/<elementId> control panel route, which renders Live Preview in a standalone mode for the element. (#16441)actions/app/health-check) now send no-cache headers by default. (#16364)craft\config\GeneralConfig::safeMode() set Safe Mode to false by default.relatedTo* GraphQL arguments to null. (#16433)craft\events\DefineAssetUrlEvent::$transform wasn’t always defined for assets’ EVENT_BEFORE_DEFINE_URL and EVENT_DEFINE_URL events. (#16464)* weren’t respecting caseInsensitive: true. (#16409)relatedTo* GraphQL arguments to null. (#16431)entry-types/merge command. (#16394)utils/prune-revisions command was deleting nested entry revisions.users/create command.children and descendants eager-loading wasn’t working on some environments. (#16381, #16382)search param was used in conjunction with offset or limit. (#16183)getInputHtml() method returned an empty string.[@transform](https://github.com/transform) GraphQL directives weren’t always working on Assets fields with overridden handles. (#15718)craft\base\NestedElementTrait::getOwner() or getPrimaryOwner() were called on a nested element whose owner didn’t exist in the same site. (#16359)getPrev() and getNext() methods could cause duplicate queries. (#16329)ancestors, children, descendants, and parent eager-loading wasn’t working for previewed elements. (#16327)owner or primaryOwner on nested elements. (#16339)+ characters rather than -. (#16300)EVENT_REGISTER_SOURCES event didn’t have any custom fields available to them, unless the EVENT_REGISTER_FIELD_LAYOUTS event was also used to define the available field layouts for the event-defined source. (#16256)string types in CustomFieldBehavior rather than craft\fields\data\LinkData.phpinfo() function is disabled. (#16229)isSelectable() methods weren’t being respected.EVENT_INIT or EVENT_DEFINE_BEHAVIORS entry event handlers were calling getType() on the entry. (#16254)craft\events\ApplyFieldSaveEvent::$field wasn’t being set consistently by craft\services\Fields::EVENT_BEFORE_APPLY_FIELD_SAVE. (#16156)project-config/rebuild. (#16189)craft\services\Assets::deleteFoldersByIds(). (#16147)resave/all command, if any of the options passed weren’t supported by other resave/* commands. (#16148)entry-types/merge command can now be run non-interactively. (#16135)craft\services\Structures::fillGapsInElements() wasn’t working properly if the elements weren’t passed in hierarchical order. (#16085)craft\helpers\Console::table() wasn’t handling multi-byte characters and ANSI-formatted strings properly.entry-types/merge command. (#16102)entry-types/merge command. (#16087, #16102)icon is now a reserved field handle. (#16077)pc/* commands as an alias of project-config/*.resave/all command.users/remove-2fa command. (#16053)--except, --minor-only, and --patch-only options to the update command. (#15829)--with-fields option to all native resave/* commands.fields/merge and fields/auto-merge commands now prompt to resave elements that include relational fields before merging them, and provide a CLI command that should be run on other environments before the changes are deployed to them. (#15869)encodeUrl() Twig function. (#15838){% cache %} tags now support setting the duration number to an expression. (#15970)select()/addSelect() methods. (#15827)$PRIMARY_SITE_URL/uploads).craft\base\Element::EVENT_REGISTER_CARD_ATTRIBUTES.craft\base\Element::EVENT_REGISTER_DEFAULT_CARD_ATTRIBUTES.craft\base\Element::defineCardAttributes().craft\base\Element::defineDefaultCardAttributes().craft\base\ElementInterface::attributePreviewHtml().craft\base\ElementInterface::cardAttributes().craft\base\ElementInterface::defaultCardAttributes().craft\base\ElementInterface::indexViewModes().craft\base\NestedElementTrait::saveOwnership(). (#15894)craft\base\PreviewableFieldInterface::previewPlaceholderHtml().craft\base\RequestTrait::getIsWebRequest(). (#15690)craft\base\conditions\BaseElementSelectConditionRule::elementSelectConfig().craft\console\Controller::output().craft\console\controllers\ResaveController::hasTheFields().craft\elements\db\NestedElementQueryTrait. (#15894)craft\events\ApplyFieldSaveEvent. (#15872)craft\events\DefineAddressCountriesEvent. (#15711)craft\events\RegisterElementCardAttributesEvent.craft\events\RegisterElementDefaultCardAttributesEvent.craft\fieldlayoutelements\Template::$templateMode. (#15932)craft\fields\data\LinkData::$target.craft\fields\data\LinkData::setLabel().craft\filters\BasicHttpAuthLogin. (#15720)craft\filters\BasicHttpAuthStatic. (#15720)craft\filters\ConditionalFilterTrait. (#15948)craft\filters\UtilityAccess.craft\helpers\Console::$outputCount.craft\helpers\Console::$prependNewline.craft\helpers\Console::indent().craft\helpers\Console::indentStr().craft\helpers\Console::outdent().craft\helpers\Cp::cardPreviewHtml().craft\helpers\Cp::cardViewDesignerHtml().craft\helpers\Cp::rangeFieldHtml(). (#15972)craft\helpers\Cp::rangeHtml(). (#15972)craft\helpers\ElementHelper::linkAttributeHtml().craft\helpers\ElementHelper::uriAttributeHtml().craft\helpers\Session::addFlash().craft\helpers\Session::getAllFlashes().craft\helpers\Session::getFlash().craft\helpers\Session::hasFlash().craft\helpers\Session::removeAllFlashes().craft\helpers\Session::removeFlash().craft\helpers\StringHelper::firstLine().craft\helpers\UrlHelper::encodeUrl(). (#15838)craft\log\MonologTarget::getAllowLineBreaks().craft\log\MonologTarget::getFormatter().craft\log\MonologTarget::getLevel().craft\log\MonologTarget::getMaxFiles().craft\log\MonologTarget::getName().craft\log\MonologTarget::getProcessor().craft\log\MonologTarget::getUseMicrosecondTimestamps().craft\models\FieldLayout::getCardBodyAttributes().craft\models\FieldLayout::getCardBodyElements().craft\models\FieldLayout::getCardView().craft\models\FieldLayout::prependElements().craft\models\FieldLayout::setCardView().craft\services\Addresses::EVENT_DEFINE_ADDRESS_COUNTRIES. (#15711)craft\services\Addresses::getCountryList(). (#15711)craft\services\Fields::EVENT_BEFORE_APPLY_FIELD_SAVE. (#15872)craft\services\Gc::deleteOrphanedFieldLayouts().craft\services\Users::getMaxUsers().craft\web\View::registerCpTwigExtension().craft\web\View::registerSiteTwigExtension().craft\fields\data\LinkData::getLabel() now has a $custom argument.craft\helpers\Console::output() now prepends an indent to each line of the passed-in string, if indent() had been called prior.elements/save-nested-element-for-derivative action. (#16002)enableBasicHttpAuth config setting. craft\filters\BasicHttpAuthLogin should be used instead. (#15720)serializeForm event to Craft.ElementEditor. (#15794)range() and rangeField() macros to _includes/forms.twig. (#15972)fieldLayoutDesigner() and cardViewDesigner() global Twig functions for control panel templates.withCardViewDesigner param. (#15283sortable option. (#15963)craft.cp.fieldLayoutDesigner() function. The global fieldLayoutDesigner() function should be used instead.Location headers added via craft\web\Response::redirect() are now set to encoded URLs. (#15838)utils/fix-field-layout-uids command was misidentifying missing/duplicate UUID issues.craft\services\Categories::saveGroup() and craft\services\Tags::saveTagGroup() weren’t respecting predefined UUID values on new models.autosaveDrafts was disabled. (#15985)install command now runs through database connection setup, if Craft can’t yet connect to the database. (#15943)authorId, authorIds, authors, and sectionId are now reserved field handles for entry types. (#15923)craft\elements\db\NestedElementQueryInterface.craft\services\Gc::$silent.'<operator> <values>' weren’t being parsed correctly.craft\services\Entries::saveSection() and craft\services\Volumes::saveVolume() weren’t respecting predefined UUID values on new models.entrify/tags and entrify/global-set commands would prompt for the target section after one had just been created.entrify commands weren’t copying the original field instance UUIDs into newly-created entry types, causing content to appear missing. (#15935)craft\helpers\App::isTty().InvalidConfigException is now thrown if the defaultCountryCode config setting is set to an empty string. (#15812)sql_generate_invisible_primary_key was enabled. (#15853)deletedWithEntryType values in the entries table weren’t getting set back to null after being restored.required properties were always false. (#15752)craft\helpers\StringHelper::toHandle() was allowing non-alphanumeric/underscore characters through. (#15772)maxBackups config setting wasn’t working. (#15780)entries/save-entry controller action. (#15737)entrify/global-set command. (#15746)username values weren’t getting updated based on email address changes when useEmailAsUsername was enabled. (#15758)hasAlt asset query param wasn’t working properly. (#15762)[!IMPORTANT]
This update fixes a critical data deletion bug for PostgreSQL installs.
craft\services\Security::isSystemDir().craft\helpers\StringHelper::lines() was returning an array of Stringy\Stringy objects, rather than strings.notRelatedTo and andNotRelatedTo element query params. (#15496)notRelatedTo GraphQL element query argument. (#15496)relatedToAssets, relatedToCategories, relatedToEntries, relatedToTags, and relatedToUsers GraphQL arguments now support passing relatedViaField and relatedViaSite keys to their criteria objects. (#15508)craft\elements\Address::getCountry() now return the country in the current application locale.craft\base\ApplicationTrait::getEnvId(). (#15313)craft\base\ElementInterface::getRootOwner(). (#15534)craft\base\ElementInterface::showStatusIndicator().craft\elements\conditions\NotRelatedToConditionRule.craft\elements\conditions\SiteGroupConditionRule.craft\gql\arguments\RelationCriteria.craft\gql\types\input\criteria\AssetRelation.craft\gql\types\input\criteria\CategoryRelation.craft\gql\types\input\criteria\EntryRelation.craft\gql\types\input\criteria\TagRelation.craft\gql\types\input\criteria\UserRelation.craft\helpers\Cp::componentPreviewHtml().craft\helpers\Inflector.craft\helpers\Session::close().craft\services\Sites::getEditableSitesByGroupId().craft\helpers\Cp::chipHtml() now supports a hyperlink option.craft\helpers\Session methods are now safe to call on console requests.craft\services\Elements::saveElement() now saves dirty fields’ content even if $saveContent is false. (#15393)craft\db\mysql\Schema::quoteDatabaseName().craft\db\pgqsl\Schema::quoteDatabaseName().craft\helpers\ElementHelper::rootElement(). craft\base\ElementInterface::getRootOwner() should be used instead.Craft.cp.announce(), simplifying live region announcements for screen readers. (#15569)craft\base\Element::safeActionMenuItems() and destructiveActionMenuItems() can now include a showInChips key to explicitly opt into/out of being shown within element chips and cards.allowAdd and allowRemove settings. (#15639)X-Robots-Tag: none headers for preview requests. (#15612, #15586)x-craft-preview and x-craft-live-preview params are now hashed, and craft\web\Request::getIsPreview() will only return true if the param validates. (#15605)x-craft-preview or x-craft-live-preview query string params based on the requested URL, if either were set to an unverified string. (#15605)db/convert-charset command if there were any custom database views or sequences. (#15598)craft\helpers\Db::supportsTimeZones() could return false on databases that supported time zone conversion. (#15592)null values within associative arrays were ignored when applying project config data. (#10512)id param was overridden. (#15570)users/delete-user-photo or users/upload-user-photo from the front end. (#15487){% cache %} tags were caching content for Live Preview requests. (#15586)craft\helpers\App::env() and normalizeValue() could return incorrect results for values that looked like floats. (#15533)users/set-password action wasn’t respecting redirect params. (#15538)composer.json. (#15559)config/general.php returned an array with unsupported config settings. (#15514)craft\db\afterDown().craft\db\afterUp().searchScore values were null when ordering an element query by score. (#15513)mailto and tel URIs, and entry/asset/category relations. (#15251, #15400)lang attribute, in case it differs from the user’s preferred language.role="radio" to listed elements’ checkboxes.[@web](https://github.com/web) alias for URL settings, regardless of whether it was explicitly defined. (#15347)entry-types/merge command. (#15444)fields/auto-merge command. (#15472)`fields/merge command. (#15454)general and db configs (e.g. config/general.web.php). (#15346)general and db config files can now return a callable that modifies an existing config object. (#15346)lazyGqlTypes config setting. (#15429)env, env/set, and env/remove commands. (#15431)value and caseInsensitive keys. (#15404)Field after the Matrix/CKEditor field handle. (#15269)allowedGraphqlOrigins config setting is now deprecated. craft\filters\Cors should be used instead. (#15397)permissionsPolicyHeader config settings is now deprecated. craft\filters\Headers should be used instead. (#15397){% cache %} tags now cache any asset bundles registered within them.CommerceGuys\Addressing\Country\Country objects. (#15455, #15463).twig.x-craft-preview/x-craft-live-preview URL query string params are now added to generated URLs for Live Preview requests, so craft\web\Request::getIsPreview() continues to return true on subsequent pages loaded within the iframe. (#15447)craft\base\ApplicationTrait::getDb2(). (#15384)craft\base\ElementInterface::addInvalidNestedElementIds().craft\base\ElementInterface::getInvalidNestedElementIds().craft\base\Field::EVENT_AFTER_MERGE_FROM.craft\base\Field::EVENT_AFTER_MERGE_INTO.craft\base\Field::afterMergeFrom(). (#15454)craft\base\Field::afterMergeInto(). (#15454)craft\base\Field::canMergeFrom(). (#15454)craft\base\Field::canMergeInto(). (#15454)craft\base\FieldLayoutComponent::EVENT_DEFINE_SHOW_IN_FORM. (#15260)craft\base\FieldLayoutElement::$dateAdded.craft\base\FieldTrait::$dateDeleted.craft\base\Grippable.craft\base\MergeableFieldInterface. (#15454)craft\base\RelationFieldInterface. (#15400)craft\base\RelationFieldTrait. (#15400)craft\config\GeneralConfig::addAlias(). (#15346)craft\elements\Address::getCountry(). (#15463)craft\elements\Asset::$sanitizeOnUpload. (#15430)craft\elements\Entry::isEntryTypeCompatible().craft\elements\actions\MoveToSection.craft\enums\CmsEdition::Enterprise.craft\events\DefineShowFieldLayoutComponentInFormEvent. (#15260)craft\events\MoveEntryEvent.craft\fields\Link.craft\fields\data\LinkData.craft\fields\linktypes\Asset.craft\fields\linktypes\BaseElementLinkType.craft\fields\linktypes\BaseLinkType.craft\fields\linktypes\BaseTextLinkType.craft\fields\linktypes\Category.craft\fields\linktypes\Email.craft\fields\linktypes\Phone.craft\fields\linktypes\Url.craft\filters\Cors. (#15397)craft\filters\Headers. (#15397)craft\helpers\App::configure().craft\models\FieldLayout::getAllElements().craft\models\ImageTransform::$indexId.craft\services\Elements::ensureBulkOp().craft\services\Entries::EVENT_AFTER_MOVE_TO_SECTION.craft\services\Entries::EVENT_BEFORE_MOVE_TO_SECTION.craft\services\Entries::moveEntryToSection().craft\services\Fields::areFieldTypesCompatible().craft\web\View::clearAssetBundleBuffer().craft\web\View::startAssetBundleBuffer().craft\helpers\DateTimeHelper::toIso8601() now has a $setToUtc argument.craft\helpers\UrlHelper::cpUrl() now returns URLs based on the primary site’s base URL (if it has one), for console requests if the baseCpUrl config setting isn’t set, and the [@web](https://github.com/web) alias wasn’t explicitly defined. (#15374)craft\services\Config::setDotEnvVar() now accepts false for its value argument, which removes the environment variable from the .env file.craft\fields\BaseRelationField::$localizeRelations.craft\fields\Url, which is now an alias for craft\fields\Link.craft\services\Relations.craft\web\assets\elementresizedetector\ElementResizeDetectorAsset.Craft.EnvVarGenerator.Craft.endsWith().Craft.removeLeft().Craft.removeRight().Craft.ui.addAttributes().Craft.ElementEditor now triggers a checkActivity event each time author activity is fetched. (#15237)Craft.NestedElementManager now triggers an afterInit event after initialization. (#15470)Craft.ensureEndsWith() now has a caseInsensitive argument.Craft.ensureStartsWith() now has a caseInsensitive argument.Craft.startsWith() is no longer deprecated, and now has a caseInsensitive argument.Garnish.once(), for handling a class-level event only once.targetPrefix setting.showHandle setting.showHandles setting.Permissions-Policy header on control panel responses. (#15348)resize events now use ResizeObserver.cpresources folder is writable.</body> tag, rather than at the end of the response HTML.graphql/api requests no longer update the schema’s lastUsed timestamp if it was already updated within the last minute. (#15464)users/send-password-reset-email action weren’t accounting for the useEmailAsUsername config setting. (#15425)$element->isNewForSite was always false from fields’ normalizeValue() methods when propagating an element to a new site.assets/generate-transforms requests could generate the wrong transform, if another transform index with the same parameters existed. (#15402, #15477)autosaveDrafts was disabled. (#15418)deleteAsset, deleteCategory, deleteEntry, and deleteTag GraphQL mutations were returning null rather than true or false. (#15465)exists() element queries weren’t working if distinct, groupBy, having, or union params were set on them during query preparation. (#15001, #15223)username properties weren’t getting set if useEmailAsUsername was enabled. (#15475)EVENT_BEFORE_PREPARE were getting overridden for all core element types except entries. (#15446)utils/prune-orphaned-entries command was deleting top-level entries. (#15458)craft\helpers\Money::normalizeString().craft\base\Element::EVENT_AFTER_SAVE weren’t getting saved, when an element was getting fully saved from an unsaved draft state. (#15369)useEmailAsUsername was enabled. (#15401)craft\helpers\UrlHelper::actionUrl() now returns URLs based on the primary site’s base URL (if it has one), for console requests if the [@web](https://github.com/web) alias wasn’t explicitly defined.sectionId or fieldId + ownerId values. (#15345)CustomFieldBehavior. (#15336)transaction: true. (#7615)autosaveDrafts config setting was set to false. (#15353)[!NOTE] Craft now sends no-cache headers for requests that generate/retrieve a CSRF token. If your Craft install is behind a static caching service like Cloudflare, enable the asyncCsrfInputs config setting to avoid a significant cache hit reduction. (#15293, #15281)
craft\web\Request::getCsrfToken(). (#15293, #15281)craft\helpers\ElementHelper::isDraft(), isRevision(), and isDraftOrRevision() weren’t returning true if a nested draft/revision element was passed in, but the root element was canonical. (#15303)ownerId param, when refreshing elements’ table rows.asyncCsrfInputs config setting was enabled.title values on nested Matrix entries, when saving section entries via GraphQL. (#15270)DECIMAL() expression was passed into a query’s select() or groupBy() methods. (#15271)Garnish.once() and Garnish.Base::once(), for registering event handlers that should only be triggered one time.name value.single set to true would set existing elements’ input names ending in [].craft\helpers\Db::prepareForJsonColumn().craft\base\conditions\BaseNumberConditionRule::$step.craft\helpers\Db::parseColumnPrecisionAndScale().Garnish.muteResizeEvents().distinct, groupBy, having, or union params were set on them during query preparation. (#15001)craft\web\View::getModifiedDeltaNames().craft\web\View::registerDeltaName() now has a $forceModified argument.graphql/create-token command was prompting for the schema name, when it meant the token name. (#15205)--format option to the db/backup and db/restore commands for PostgreSQL installs. (#14931)db/restore command now autodetects the backup format for PostgreSQL installs, if --format isn’t passed. (#14931)install command and web-based installer now validate the existing project config files at the outset, and abort installation if there are any issues.resave/entries command now has an --all-sections flag.CRAFT_EDITION environment variable. (#15094)CRAFT_REBRAND_PATH environment variable. (#15110){% expires %} tag, which simplifies setting cache headers on the response. (#14969)withCustomFields element query param. (#15003)* to the section param, to filter the results to all section entries. (#14978)draftOf param.craft\elements\ElementCollection::find(), which can return an element or elements in the collection based on a given element or ID. (#15023)craft\elements\ElementCollection::fresh(), which reloads each of the collection elements from the database. (#15023)collect() Twig function now returns a craft\elements\ElementCollection instance if all of the items are elements.craft\elements\ElementCollection::contains() now returns true if an element is passed in and the collection contains an element with the same ID and site ID; or if an integer is passed in and the collection contains an element with the same ID. (#15023)craft\elements\ElementCollection::countBy(), collapse(), flatten(), keys(), pad(), pluck(), and zip() now return an Illuminate\Support\Collection object. (#15023)craft\elements\ElementCollection::diff() and intersect() now compare the passed-in elements to the collection elements by their IDs and site IDs. (#15023)craft\elements\ElementCollection::flip() now throws an exception, as element objects can’t be used as array keys. (#15023)craft\elements\ElementCollection::map() and mapWithKeys() now return an Illuminate\Support\Collection object, if any of the mapped values aren’t elements. (#15023)craft\elements\ElementCollection::merge() now replaces any elements in the collection with passed-in elements, if their ID and site ID matches. (#15023)craft\elements\ElementCollection::only() and except() now compare the passed-in values to the collection elements by their IDs, if an integer or array of integers is passed in. (#15023)craft\elements\ElementCollection::unique() now returns all elements with unique IDs, if no key is passed in. (#15023)craft\db\Query, element queries, and craft\elements\ElementCollection.craft\base\NestedElementTrait::$updateSearchIndexForOwner.craft\db\getBackupFormat().craft\db\getRestoreFormat().craft\db\setBackupFormat().craft\db\setRestoreFormat().craft\enums\Color::tryFromStatus().craft\events\InvalidateElementcachesEvent::$element.craft\fields\BaseRelationField::existsQueryCondition().craft\helpers\Cp::componentStatusIndicatorHtml().craft\helpers\Cp::componentStatusLabelHtml().craft\helpers\Cp::statusLabelHtml().craft\helpers\DateTimeHelper::relativeTimeStatement().craft\helpers\DateTimeHelper::relativeTimeToSeconds().craft\helpers\ElementHelper::postEditUrl().craft\helpers\ElementHelper::swapInProvisionalDrafts().craft\helpers\StringHelper::indent().craft\models\Volume::getTransformSubpath().craft\models\Volume::setTransformSubpath().craft\queue\Queue::getJobId().craft\web\twig\SafeHtml, which can be implemented by classes whose __toString() method should be considered HTML-safe by Twig.craft\base\Element::defineTableAttributes() now returns common attribute definitions used by most element types.craft\elements\ElementCollection::with() now supports collections made up of multiple element types.craft\models\Volume::getSubpath() now has a $parse argument.craft\services\Drafts::applyDraft() now has a $newAttributes argument.reloadOnBroadcastSave setting to Craft.ElementEditor. (#14814)waitForDoubleClicks setting to Garnish.Select, Craft.BaseElementIndex, and Craft.BaseElementIndexView.exists() element queries.craft\base\Element::toArray().users/login action wasn’t checking if someone was already logged in. (#15168)db/backup command could fail on Windows. (#15090)craft\helpers\Gql::isIntrospectionQuery().craft\helpers\Html::id() now allows IDs to begin with numbers. (#15066)craft\base\FieldLayoutComponent::getAttributes() if the $elementType property wasn’t set yet. (#15074)craft\elements\Address::toArray() would include a saveOwnership key in its response array.users/create command would fail without explaining why, when the maximum number of users had already been reached.uid values. (#15103)serve command could hang. (#14977)$select property to the scalar expression, fixing an error that could occur when executing scalar queries for relation fields. (#15071)primaryOwnerId values. (#15063)$select to the scalar expression, and $orderBy, $limit, and $offset to null, on the element query. (#15001)craft\fieldlayoutelements\TextareaField::inputTemplateVariables().craft\helpers\Assets::prepareAssetName() wasn’t sanitizing filenames if $preventPluginModifications was true.count() methods were factoring in the limit param when searching with orderBy set to score. (#15001)up command could remove component name comments from the project config YAML files, for newly-added components. (#15012)craft\helpers\UrlHelper::isAbsoluteUrl() was returning true for Windows file paths. (#15043)craft\elements\db\ElementQuery::exists() would return true if setCachedResult() had been called, even if an empty array was passed.craft\web\Response::redirect() was called. (#15014)eagerly() wasn’t working when a custom alias was passed in.serve command wasn’t serving paths with non-ASCII characters. (#14977)craft\helpers\Html::explodeStyle() and normalizeTagAttributes() weren’t handling styles with encoded images via url() properly. (#14964)db/backup command would fail if the destination path contained a space.db/backup command would prompt for password input on PostgreSQL. (#14945)scroll and resize event listeners on hide. (#14911, #14510)app/resource-js requests weren’t working for guest requests. (#14908)asyncCsrfInputs config setting. (#14625)backupCommandFormat config setting. (#14897)backupCommand config setting can now be set to a closure, which will be passed a mikehaertl\shellcommand\Command object. (#14897)safeMode config setting. (#14734)resave commands now support an --if-invalid option. (#14731)craft\conditions\ConditionInterface::getBuilderConfig().craft\controllers\EditUserTrait. (#14789)craft\controllers\UsersController::EVENT_DEFINE_EDIT_SCREENS. (#14789)craft\elements\conditions\ElementConditionInterface::setFieldLayouts().craft\events\DefineEditUserScreensEvent. (#14789)craft\helpers\Cp::parseTimestampParam().craft\models\FieldLayoutTab::labelHtml().craft\services\ProjectConfig::getAppliedChanges(). (#14851)craft\web\Request::getBearerToken(). (#14784)craft\db\CoalesceColumnsExpression.craft\db\ExpressionBuilder.craft\db\ExpressionInterface.craft\base\NameTrait::prepareNamesForSave() no longer updates the name properties if fullName, firstName, and lastName are already set. (#14665)craft\helpers\Typecast::properties() now typecasts numeric strings to integers, for int|string properties. (#14618)Craft.MatrixInput.Entry. (#14730)backupCommand config setting was set to false.db/convert-charset command, if any tables contained char or varchar foreign key columns. (#14815)craft\helpers\UrlHelper::isAbsoluteUrl() was returning false for URLs with schemes other than http or https, such as mailto and tel. (#14830)...) wasn’t working with attribute accessors. (#14827)relatedTo param set to a list of element IDs were overly complex....) wasn’t working when the preloadSingles config setting was enabled. (#14783)utils/fix-field-layout-uids command wasn’t looking at field layouts defined with a fieldLayout key in the project config.craft\helpers\ElementHelper::siteStatusesForElement() wasn’t working for soft-deleted elements. (#14753)craft\cache\DbCache was attempting to store values beyond the cache.data column’s storage capacity.collation database connection setting was set to utf8_* on MySQL. (#14332)_includes/nav.twig template wasn’t marking nested nav items as selected. (#14735)elevatedSessionDuration config setting.localeAliases config setting. (#12705)partialTemplatesPath config setting. (#14284)tempAssetUploadFs config setting. (#13957)utils/prune-orphaned-entries command. (#14154)entrify/* commands now ask if an entry type already exists for the section.resave/entries command now accepts a --field option.up, migrate/up, and migrate/all commands no longer overwrite pending project config YAML changes, if new project config changes were made by migrations.--force option from the up command. --isolated=0 should be used instead. (#14270)resave/matrix-blocks command.myEntryType:myField).eagerly param, which can be used to lazily eager-load the resulting elements for all peer elements, when all(), collect(), one(), nth(), or count() is called.inBulkOp param, which limits the results to elements which were involved in a bulk operation. (#14032)addressLine1, addressLine2, addressLine3, administrativeArea, countryCode, dependentLocality, firstName, fullName, lastName, locality, organizationTaxId, organization, postalCode, and sortingCode params.field, fieldId, primaryOwner, primaryOwnerId, owner, ownerId, allowOwnerDrafts, and allowOwnerRevisions params.authorId params now support passing multiple IDs prefixed with and, to fetch entries with multiple listed authors.authorOf param.field and fieldId params.field and fieldId params.fieldId, fieldHandle, ownerId, and sortOrder entry GraphQL fields. (#14366)<entryTypeHandle>_Entry, and are no longer prefixed with their section’s handle. (That goes for Matrix-nested entries as well.)author and authorIds GraphQL field.entries field rather than blocks.entryType() and fieldValueSql() Twig functions. (#14557)|firstWhere and |flatten Twig filters.craft.matrixBlocks() Twig function. craft.entries() should be used instead.POST request will now respond with a 405 error code if another request method is used. (#13397)elements_sites.content column as JSON, rather than across multiple columns in a content table. (#2009, #4308, #7221, #7750, #12954)fieldLayouts() and defineFieldLayouts() methods’ $source arguments must now accept null values.myEntryType:myField), by implementing craft\base\FieldLayoutProviderInterface on the field layout provider class, and ensuring that defineFieldLayouts() is returning field layouts via their providers.static instead of self. (#11868)new. The _includes/forms/selectize.twig control panel template should be used instead (or craft\helpers\Cp::selectizeHtml()/selectizeFieldHtml()), which will append an styled “Add” option when addOptionFn and addOptionLabel settings are passed. (#11946)chip(), customSelect(), disclosureMenu(), elementCard(), elementChip(), elementIndex(), iconSvg(), and siteMenuItems() global functions for control panel templates.colorSelect, colorSelectField, customSelect, customSelectField, languageMenu, and languageMenuField form macros.assets/move-asset and assets/move-folder actions no longer include success keys in responses. (#12159)assets/upload controller action now includes errors object in failure responses. (#12159)validateSelection() and activate() methods are now passed an elementIndex argument, with a reference to the trigger’s corresponding element index.craft\events\SearchEvent::$scores by craft\services\Search::EVENT_AFTER_SEARCH or EVENT_BEFORE_SCORE_RESULTS now must be indexed by element ID and site ID (e.g. '100-1').craft\auth\methods\AuthMethodInterface.craft\auth\methods\BaseAuthMethod.craft\auth\methods\RecoveryCodes.craft\auth\methods\TOTP.craft\auth\passkeys\CredentialRepository.craft\base\Actionable. (#14169)craft\base\ApplicationTrait::$edition.craft\base\ApplicationTrait::getAuth().craft\base\Chippable. (#14169)craft\base\Colorable. (#14187)craft\base\CpEditable.craft\base\Element::EVENT_DEFINE_ACTION_MENU_ITEMS.craft\base\Element::EVENT_DEFINE_INLINE_ATTRIBUTE_INPUT_HTML.craft\base\Element::crumbs().craft\base\Element::destructiveActionMenuItems().craft\base\Element::inlineAttributeInputHtml().craft\base\Element::render(). (#14284)craft\base\Element::safeActionMenuItems().craft\base\Element::shouldValidateTitle().craft\base\ElementContainerFieldInterface, which should be implemented by fields which contain nested elements, such as Matrix.craft\base\ElementInterface::canDuplicateAsDraft().craft\base\ElementInterface::getActionMenuItems().craft\base\ElementInterface::getCardBodyHtml().craft\base\ElementInterface::getChipLabelHtml().craft\base\ElementInterface::getCrumbs().craft\base\ElementInterface::getInlineAttributeInputHtml().craft\base\ElementInterface::hasDrafts().craft\base\ElementInterface::hasThumbs().craft\base\ElementInterface::setAttributesFromRequest().craft\base\ElementInterface::setAttributesFromRequest().craft\base\ElementInterface::setLazyEagerLoadedElements().craft\base\ElementTrait::$deletedWithOwner.craft\base\ElementTrait::$eagerLoadInfo.craft\base\ElementTrait::$elementQueryResult.craft\base\ElementTrait::$forceSave.craft\base\ElementTrait::$propagatingFrom.craft\base\Field::valueSql().craft\base\FieldInterface::dbType(), which defines the type(s) of values the field will store in the elements_sites.content column (if any).craft\base\FieldInterface::getValueSql().craft\base\FieldInterface::icon().craft\base\FieldInterface::isMultiInstance().craft\base\FieldInterface::queryCondition(), which accepts an element query param value and returns the corresponding query condition.craft\base\FieldLayoutComponent::hasSettings().craft\base\FieldLayoutElement::isMultiInstance().craft\base\FieldLayoutProviderInterface::getHandle().craft\base\FieldTrait::$layoutElement.craft\base\Iconic. (#14169)craft\base\Identifiable. (#14169)craft\base\InlineEditableFieldInterface.craft\base\NestedElementInterface, which should be implemented by element types which could be nested by other elements.craft\base\NestedElementTrait.craft\base\Statusable. (#14169)craft\base\ThumbableFieldInterface.craft\base\Thumbable. (#14169)craft\base\conditions\ConditionInterface::createConditionRule().craft\behaviors\EventBehavior.craft\controllers\EntryTypesController.craft\db\CallbackExpressionBuilder.craft\db\CallbackExpression.craft\db\Connection::getIsMaria().craft\db\QueryParam.craft\db\Table::ELEMENTS_OWNERS.craft\db\Table::SECTIONS_ENTRYTYPES.craft\db\mysql\ColumnSchema::$collation.craft\db\mysql\QueryBuilder::jsonContains().craft\db\mysql\QueryBuilder::jsonExtract().craft\db\mysql\Schema::supportsMb4().craft\db\pgsql\QueryBuilder::jsonContains().craft\db\pgsql\QueryBuilder::jsonExtract().craft\db\pgsql\Schema::supportsMb4().craft\elements\Address::GQL_TYPE_NAME.craft\elements\Asset::gqlTypeName().craft\elements\Category::gqlTypeName().craft\elements\ElementCollection::render(). (#14284)craft\elements\Entry::$collapsed.craft\elements\Entry::$dirty.craft\elements\Entry::gqlTypeName().craft\elements\Entry::setOwner().craft\elements\NestedElementManager.craft\elements\Tag::gqlTypeName().craft\elements\User::GQL_TYPE_NAME.craft\elements\User::authenticateWithPasskey().craft\elements\User::canRegisterUsers().craft\elements\conditions\ElementConditionInterface::getFieldLayouts().craft\elements\conditions\addresses\AddressLine1ConditionRule.craft\elements\conditions\addresses\AddressLine2ConditionRule.craft\elements\conditions\addresses\AddressLine3ConditionRule.craft\elements\conditions\addresses\AdministrativeAreaConditionRule.craft\elements\conditions\addresses\CountryConditionRule.craft\elements\conditions\addresses\DependentLocalityConditionRule.craft\elements\conditions\addresses\FullNameConditionRule.craft\elements\conditions\addresses\LocalityConditionRule.craft\elements\conditions\addresses\OrganizationConditionRule.craft\elements\conditions\addresses\OrganizationTaxIdConditionRule.craft\elements\conditions\addresses\PostalCodeConditionRule.craft\elements\conditions\addresses\SortingCodeConditionRule.craft\elements\conditions\entries\MatrixFieldConditionRule.craft\elements\db\EagerLoadInfo.craft\elements\db\EagerLoadPlan::$lazy.craft\elements\db\ElementQuery::$eagerLoadAlias.craft\elements\db\ElementQuery::$eagerLoadHandle.craft\elements\db\ElementQueryInterface::eagerly().craft\elements\db\ElementQueryInterface::fieldLayouts().craft\elements\db\ElementQueryInterface::prepForEagerLoading().craft\elements\db\ElementQueryInterface::wasCountEagerLoaded().craft\elements\db\ElementQueryInterface::wasEagerLoaded().craft\enums\AttributeStatus.craft\enums\CmsEdition.craft\enums\Color. (#14187)craft\enums\ElementIndexViewMode.craft\enums\PropagationMethod.craft\enums\TimePeriod.craft\events\BulkElementsEvent.craft\events\BulkOpEvent. (#14032)craft\events\DefineEntryTypesForFieldEvent.craft\events\DefineFieldHtmlEvent::$inline.craft\events\DuplicateNestedElementsEvent.craft\events\SetEagerLoadedElementsEvent::$plan.craft\fieldlayoutelements\BaseField::$includeInCards.craft\fieldlayoutelements\BaseField::$providesThumbs.craft\fieldlayoutelements\BaseField::previewHtml().craft\fieldlayoutelements\BaseField::previewable().craft\fieldlayoutelements\BaseField::selectorIcon().craft\fieldlayoutelements\BaseField::thumbHtml().craft\fieldlayoutelements\BaseField::thumbable().craft\fieldlayoutelements\CustomField::$handle.craft\fieldlayoutelements\CustomField::getOriginalHandle().craft\fieldlayoutelements\TextField::inputAttributes().craft\fieldlayoutelements\users\EmailField.craft\fieldlayoutelements\users\FullNameField.craft\fieldlayoutelements\users\PhotoField.craft\fieldlayoutelements\users\UsernameField.craft\fields\Addresses.craft\fields\Matrix::EVENT_DEFINE_ENTRY_TYPES.craft\fields\Matrix::getEntryTypes().craft\fields\Matrix::getEntryTypesForField().craft\fields\Matrix::getSupportedSitesForElement().craft\fields\Matrix::setEntryTypes().craft\fields\Matrix::supportedSiteIds().craft\fields\Money::currencyLabel().craft\fields\Money::currencyLabel().craft\fields\Money::subunits().craft\fields\Money::subunits().craft\fields\conditions\FieldConditionRuleTrait::fieldInstances().craft\fields\conditions\FieldConditionRuleTrait::setLayoutElementUid().craft\fields\conditions\MoneyFieldConditionRule.craft\fields\conditions\MoneyFieldConditionRule.craft\helpers\App::isWindows().craft\helpers\App::silence().craft\helpers\ArrayHelper::lastValue().craft\helpers\Cp::CHIP_SIZE_LARGE.craft\helpers\Cp::CHIP_SIZE_SMALL.craft\helpers\Cp::checkboxGroupFieldHtml().craft\helpers\Cp::checkboxGroupHtml().craft\helpers\Cp::chipHtml().craft\helpers\Cp::colorSelectFieldHtml().craft\helpers\Cp::customSelectFieldHtml(). (#14169)craft\helpers\Cp::customSelectHtml(). (#14169)craft\helpers\Cp::disclosureMenu().craft\helpers\Cp::earthIcon(). (#14169)craft\helpers\Cp::elementCardHtml().craft\helpers\Cp::elementChipHtml().craft\helpers\Cp::elementIndexHtml().craft\helpers\Cp::entryTypeSelectFieldHtml(). (#14169)craft\helpers\Cp::entryTypeSelectHtml(). (#14169)craft\helpers\Cp::fallbackIconSvg(). (#14169)craft\helpers\Cp::iconPickerFieldHtml(). (#14169)craft\helpers\Cp::iconPickerHtml(). (#14169)craft\helpers\Cp::iconSvg(). (#14169)craft\helpers\Cp::layoutElementSelectorHtml().craft\helpers\Cp::menuItem(). (#14169)craft\helpers\Cp::moneyFieldHtml().craft\helpers\Cp::moneyInputHtml().craft\helpers\Cp::normalizeMenuItems().craft\helpers\Cp::siteMenuItems().craft\helpers\Db::defaultCollation().craft\helpers\Db::prepareForJsonColumn().craft\helpers\ElementHelper::actionConfig().craft\helpers\ElementHelper::addElementEditorUrlParams().craft\helpers\ElementHelper::elementEditorUrl().craft\helpers\ElementHelper::renderElements(). (#14284)craft\helpers\ElementHelper::rootElementIfCanonical().craft\helpers\Gql::getSchemaContainedSections().craft\helpers\Json::detectIndent().craft\helpers\Json::encodeToFile().craft\helpers\ProjectConfig::ensureAllEntryTypesProcessed().craft\i18n\Locale::$aliasOf.craft\i18n\Locale::setDisplayName().craft\log\Dispatcher::getDefaultTarget(). (#14283)craft\migrations\BaseContentRefactorMigration.craft\models\EntryType::$color.craft\models\EntryType::findUsages().craft\models\FieldLayout::getCardBodyFields().craft\models\FieldLayout::getElementByUid().craft\models\FieldLayout::getFieldById().craft\models\FieldLayout::getFieldByUid().craft\models\FieldLayout::getThumbField().craft\models\FsListing::getAdjustedUri().craft\models\Section::getCpEditUrl().craft\models\Site::getLanguage().craft\models\Site::setLanguage().craft\models\Volume::$altTranslationKeyFormat.craft\models\Volume::$altTranslationMethod.craft\models\Volume::getSubpath().craft\models\Volume::setSubpath().craft\queue\BaseBatchedElementJob. (#14032)craft\queue\BaseBatchedJob::after().craft\queue\BaseBatchedJob::afterBatch().craft\queue\BaseBatchedJob::before().craft\queue\BaseBatchedJob::beforeBatch().craft\services\Auth.craft\services\Elements::EVENT_AUTHORIZE_DUPLICATE_AS_DRAFT.craft\services\Elements::canDuplicateAsDraft().craft\services\Entries::deleteEntryType().craft\services\Entries::deleteEntryTypeById().craft\services\Entries::deleteSection().craft\services\Entries::deleteSectionById().craft\services\Entries::getAllEntryTypes().craft\services\Entries::getAllSectionIds().craft\services\Entries::getAllSections().craft\services\Entries::getEditableSectionIds().craft\services\Entries::getEditableSections().craft\services\Entries::getEntryTypeByHandle().craft\services\Entries::getEntryTypeById().craft\services\Entries::getEntryTypesBySectionId().craft\services\Entries::getSectionByHandle().craft\services\Entries::getSectionById().craft\services\Entries::getSectionByUid().craft\services\Entries::getSectionsByType().craft\services\Entries::getTotalEditableSections().craft\services\Entries::getTotalSections().craft\services\Entries::refreshEntryTypes().craft\services\Entries::saveSection().craft\services\Fields::$fieldContext, which replaces craft\services\Content::$fieldContext.craft\services\Fields::EVENT_REGISTER_NESTED_ENTRY_FIELD_TYPES.craft\services\Fields::findFieldUsages().craft\services\Fields::getAllLayouts().craft\services\Fields::getNestedEntryFieldTypes().craft\services\Gql::defineContentArgumentsForFieldLayouts().craft\services\Gql::defineContentArgumentsForFields().craft\services\Gql::getOrSetContentArguments().craft\services\ProjectConfig::find().craft\services\ProjectConfig::flush().craft\services\ProjectConfig::writeYamlFiles().craft\services\Sites::$maxSites. (#14307)craft\services\Sites::getRemainingSites(). (#14307)craft\servics\Users::canCreateUsers().craft\web\Controller::asCpModal().craft\web\CpModalResponseBehavior.craft\web\CpModalResponseFormatter.craft\web\CpScreenResponseBehavior::$actionMenuItems.craft\web\CpScreenResponseBehavior::$contextMenuItems.craft\web\CpScreenResponseBehavior::$selectableSites.craft\web\CpScreenResponseBehavior::$site.craft\web\CpScreenResponseBehavior::actionMenuItems().craft\web\CpScreenResponseBehavior::contextMenuItems().craft\web\CpScreenResponseBehavior::selectableSites().craft\web\CpScreenResponseBehavior::site().craft\web\Request::getQueryParamsWithoutPath().craft\web\twig\variables\Cp::getEntryTypeOptions().craft\base\PluginTrait::$minCmsEdition.craft\base\BlockElementInterface to NestedElementInterface, and added the getField(), getSortOrder(), and setOwner() methods to it.craft\base\Element::EVENT_SET_TABLE_ATTRIBUTE_HTML to EVENT_DEFINE_ATTRIBUTE_HTML.craft\base\Element::getHasCheckeredThumb() to hasCheckeredThumb() and made it protected.craft\base\Element::getHasRoundedThumb() to hasRoundedThumb() and made it protected.craft\base\Element::getThumbAlt() to thumbAlt() and made it protected.craft\base\Element::getThumbUrl() to thumbUrl() and made it protected.craft\base\Element::tableAttributeHtml() to attributeHtml().craft\base\ElementInterface::getTableAttributeHtml() to getAttributeHtml().craft\base\FieldInterface::valueType() to phpType().craft\base\PreviewableFieldInterface::getTableAttributeHtml() to getPreviewHtml().craft\base\UtilityInterface::iconPath() to icon(), which can now return a system icon name. (#14169)craft\base\conditions\BaseCondition::EVENT_REGISTER_CONDITION_RULE_TYPES to EVENT_REGISTER_CONDITION_RULES.craft\base\conditions\BaseCondition::conditionRuleTypes() to selectableConditionRules().craft\events\BatchElementActionEvent to MultiElementActionEvent.craft\events\RegisterConditionRuleTypesEvent to RegisterConditionRulesEvent, and its $conditionRuleTypes property has been renamed to $conditionRules.craft\events\SetElementTableAttributeHtmlEvent to DefineAttributeHtmlEvent.craft\fields\BaseRelationField::tableAttributeHtml() to previewHtml(), and it now accepts an ElementCollection argument, rather than Collection.craft\fields\Matrix::$maxBlocks to $maxEntries.craft\fields\Matrix::$minBlocks to $minEntries.craft\helpers\MailerHelper\EVENT_REGISTER_MAILER_TRANSPORT_TYPES to EVENT_REGISTER_MAILER_TRANSPORTS.craft\log\Dispatcher::getTargets() to getDefaultTargets(). (#14283)craft\services\Addresses::getLayout() to getFieldLayout().craft\services\Addresses::saveLayout() to saveFieldLayout().craft\services\Utilities::EVENT_REGISTER_UTILITY_TYPES to EVENT_REGISTER_UTILITIES.craft\web\CpScreenResponseBehavior::$additionalButtons() and additionalButtons() to $additionalButtonsHtml and additionalButtonsHtml(). (#13037)craft\web\CpScreenResponseBehavior::$content() and content() to $contentHtml and contentHtml(). (#13037)craft\web\CpScreenResponseBehavior::$contextMenu() and contextMenu() to $contextMenuHtml and contextMenuHtml(). (#13037)craft\web\CpScreenResponseBehavior::$notice() and notice() to $noticeHtml and noticeHtml(). (#13037)craft\web\CpScreenResponseBehavior::$pageSidebar() and pageSidebar() to $pageSidebarHtml and pageSidebarHtml(). (#13037)craft\web\CpScreenResponseBehavior::$sidebar() and sidebar() to $metaSidebarHtml and metaSidebarHtml(). (#13037)craft\base\ApplicationTrait::getLicensedEdition() now returns a craft\enums\CmsEdition case or null.craft\base\ApplicationTrait::requireEdition() now accepts a craft\enums\CmsEdition case or an integer.craft\base\ApplicationTrait::setEdition() now accepts a craft\enums\CmsEdition case or an integer.craft\base\BaseFsInterface::renameFile() and copyFile() now have a $config argument. (#14147)craft\base\ConfigurableComponent::getSettings() now converts backed enum cases to their values.craft\base\Element::getCpEditUrl() now returns a URL to edit/<ID> if cpEditUrl() returns null.craft\base\ElementInterface::findSource() no longer needs to specify a default value for the context argument.craft\base\ElementInterface::getAncestors(), getDescendants(), getChildren(), and getSiblings() now have ElementQueryInterface|ElementCollection return types, rather than ElementQueryInterface|Collection.craft\base\ElementInterface::getEagerLoadedElementCount() can now return null for counts that haven’t been eager-loaded yet.craft\base\ElementInterface::getEagerLoadedElements now has an ElementCollection|null return type, rather than Collection|null.craft\base\ElementInterface::indexHtml()’ $showCheckboxes argument is now $selectable, and it now has a $sortable argument.craft\base\ElementInterface::modifyCustomSource() can now set disabled to true on the source config to hide it.craft\base\ElementInterface::setEagerLoadedElements() now has a $plan argument, which will be set to the eager-loading plan.craft\base\ElementInterface::setParent() no longer needs to specify a default value for the parent argument.craft\base\ElementInterface::setRevisionCreatorId() no longer needs to specify a default value for the creatorId argument.craft\base\ElementInterface::setRevisionNotes() no longer needs to specify a default value for the notes argument.craft\base\Field::inputHtml() now has an $inline argument.craft\base\FieldInterface::getIsTranslatable(), getTranslationDescription(), getInputHtml(), normalizeValue(), normalizeValueFromRequest(), and serializeValue() no longer need to specify a default value for the $element argument.craft\base\WidgetInterface::icon() can now return a system icon name. (#14169)craft\behaviors\SessionBehavior::setSuccess() and getSuccess() use the success flash key now, rather than notice. (#14345)craft\db\Connection::getSupportsMb4() is now dynamic for MySQL installs, based on whether the elements_sites table has an mb4 charset.craft\elemens\db\ElementQueryInterface::collect() now has an ElementCollection return type, rather than Collection.craft\elements\Entry::getSection() can now return null, for nested entries.craft\elements\User::getAddresses() now returns a collection.craft\elements\db\ElementQuery::__toString() now returns the class name. (#14498)craft\enums\LicenseKeyStatus is now an enum.craft\events\AuthenticateUserEvent::$password can now be null, if the user is being authenticated with a passkey.craft\fields\BaseOptionsField::$multi and $optgroups properties are now static.craft\fields\Matrix::$propagationMethod now has a type of craft\enums\PropagationMethod.craft\fields\fieldlayoutelements\BaseUiElement::selectorIcon() can now return a system icon name. (#14169)craft\gql\mutations\Entry::createSaveMutations() now accepts a $section argument.craft\helpers\App::parseEnv() now returns null when a missing environment variable name is passed to it. (#14253)craft\helpers\Assets::generateUrl() no longer has an $fs argument. (#14353)craft\helpers\Cp::fieldHtml() now supports a labelExtra config value.craft\helpers\Db::parseParam(), parseDateParam(), parseMoneyParam(), and parseNumericParam() now return null instead of an empty string if no condition should be applied.craft\helpers\Html::id() and Craft.formatInputId() now retain colons and periods, and ensure the string begins with a letter.craft\helpers\Html::normalizeTagAttributes() now supports a removeClass key.craft\helpers\Html::svg() now has a $throwException argument.craft\helpers\Html::tag() and beginTag() now ensure that the passed-in attributes are normalized.craft\helpers\StringHelper::toString() now supports backed enums.craft\i18n\I18N::getPrimarySiteLocale() is now deprecated. craft\models\Site::getLocale() should be used instead.craft\i18n\I18N::getPrimarySiteLocaleId() is now deprecated. craft\models\Site::$language should be used instead.craft\models\FieldLayout::getField() and isFieldIncluded() now now have a $filter argument rather than $attribute, and it can be set to a callable.craft\models\Section::$propagationMethod now has a type of craft\enums\PropagationMethod.craft\services\AssetIndexer::indexFileByListing() now has a $volume argument in place of $volumeId.craft\services\AssetIndexer::indexFolderByListing() now has a $volume argument in place of $volumeId.craft\services\AssetIndexer::storeIndexList() now has a $volume argument in place of $volumeId.craft\services\Elements::duplicateElement() now has an $asUnpublishedDraft argument, and no longer has a $trackDuplication argument.craft\services\Elements::saveElement() now has a $saveContent argument.craft\services\Plugins::getPluginLicenseKeyStatus() now returns a craft\enums\LicenseKeyStatus case.craft\services\ProjectConfig::saveModifiedConfigData() no longer has a $writeExternalConfig argument, and no longer writes out updated project config YAML files.craft\services\Users::activateUser() now has a void return type, and throws an InvalidElementException in case of failure.craft\services\Users::deactivateUser() now has a void return type, and throws an InvalidElementException in case of failure.craft\services\Users::removeCredentials() now has a void return type, and throws an InvalidElementException in case of failure.craft\services\Users::shunMessageForUser() now has a void return type, and throws an InvalidElementException in case of failure.craft\services\Users::suspendUser() now has a void return type, and throws an InvalidElementException in case of failure.craft\services\Users::unlockUser() now has a void return type, and throws an InvalidElementException in case of failure.craft\services\Users::unshunMessageForUser() now has a void return type, and throws an InvalidElementException in case of failure.craft\services\Users::unsuspendUser() now has a void return type, and throws an InvalidElementException in case of failure.craft\services\Users::verifyEmailForUser() now has a void return type, and throws an InvalidElementException in case of failure.craft\web\Controller::asModelSuccess() now includes a modelClass key in the response data (and modelId if the model implements craft\base\Identifiable).statuses() methods can now be a craft\enums\Color instance.error key with the exception message. message should be used instead. (#14346)Craft::Pro. craft\enums\CmsEdition::Pro should be used instead.Craft::Solo. craft\enums\CmsEdition::Solo should be used instead.craft\base\ApplicationTrait::getEdition(). $edition should be used instead.craft\base\ApplicationTrait::getEditionHandle(). $edition should be used instead.craft\base\ApplicationTrait::getEditionName(). $edition should be used instead.craft\base\ApplicationTrait::getLicensedEditionName(). getLicensedEdition() should be used instead.craft\events\DefineElementInnerHtmlEvent.craft\events\SearchEvent::$siteId.craft\helpers\App::editionHandle(). craft\enums\CmsEdition::handle() should be used instead.craft\helpers\App::editionIdByHandle(). craft\enums\CmsEdition::fromHandle() should be used instead.craft\helpers\App::editionName(). craft\enums\CmsEdition::name should be used instead.craft\helpers\App::editions(). craft\enums\CmsEdition::cases() should be used instead.craft\helpers\App::isValidEdition(). craft\enums\CmsEdition::tryFrom() should be used instead.craft\helpers\Component::iconSvg(). craft\helpers\Cp::iconSvg() and fallbackIconSvg() should be used instead. (#14169)craft\helpers\Cp::ELEMENT_SIZE_LARGE. CHIP_SIZE_LARGE should be used instead.craft\helpers\Cp::ELEMENT_SIZE_SMALL. CHIP_SIZE_SMALL should be used instead.craft\helpers\Cp::elementHtml(). elementChipHtml() or elementCardHtml() should be used instead._elements/element.twig control panel template. elementChip() or elementCard() should be used instead.cp.elements.element control panel template hook._includes/revisionmenu.twig control panel template.\craft\mail\transportadapters\Gmail::$timeout.\craft\mail\transportadapters\Smtp::$encryptionMethod.\craft\mail\transportadapters\Smtp::$timeout.craft\base\ApplicationTrait::getMatrix().craft\base\Element::$contentId.craft\base\Element::ATTR_STATUS_MODIFIED. craft\enums\AttributeStatus::Modified should be used instead.craft\base\Element::ATTR_STATUS_OUTDATED. craft\enums\AttributeStatus::Outdated should be used instead.craft\base\ElementInterface::getContentTable().craft\base\ElementInterface::getFieldColumnPrefix().craft\base\ElementInterface::gqlMutationNameByContext().craft\base\ElementInterface::gqlTypeNameByContext().craft\base\ElementInterface::hasContent().craft\base\FieldInterface::getContentColumnType(). dbType() should be implemented instead.craft\base\FieldInterface::getGroup().craft\base\FieldInterface::hasContentColumn(). Fields that don’t need to store values in the elements_sites.content column should return null from dbType().craft\base\FieldInterface::modifyElementsQuery(). Fields can customize how their element query params are handled by implementing queryCondition().craft\base\FieldTrait::$groupId.craft\base\FieldTrait::$layoutId.craft\base\FieldTrait::$sortOrder.craft\base\FieldTrait::$tabId.craft\base\conditions\ConditionInterface::getConditionRuleTypes().craft\controllers\Sections::actionDeleteEntryType().craft\controllers\Sections::actionEditEntryType().craft\controllers\Sections::actionEntryTypesIndex().craft\controllers\Sections::actionReorderEntryTypes().craft\controllers\Sections::actionSaveEntryType().craft\controllers\UsersController::EVENT_REGISTER_USER_ACTIONS. craft\base\Element::EVENT_DEFINE_ACTION_MENU_ITEMS should be used instead.craft\db\Table::FIELDGROUPS.craft\elements\MatrixBlock.craft\elements\db\ElementQuery::$contentTable.craft\elements\db\MatrixBlockQuery.craft\enums\PatchManifestFileAction.craft\enums\PeriodType.craft\enums\PluginUpdateStatus.craft\enums\VersionUpdateStatus.craft\errors\MatrixBlockTypeNotFoundException.craft\events\BlockTypesEvent.craft\events\FieldGroupEvent.craft\events\RegisterUserActionsEvent.craft\fieldlayoutelements\users\AddressesField.craft\fields\Matrix::EVENT_SET_FIELD_BLOCK_TYPES.craft\fields\Matrix::PROPAGATION_METHOD_ALL. craft\enums\PropagationMethod::All should be used instead.craft\fields\Matrix::PROPAGATION_METHOD_CUSTOM. craft\enums\PropagationMethod::Custom should be used instead.craft\fields\Matrix::PROPAGATION_METHOD_LANGUAGE. craft\enums\PropagationMethod::Language should be used instead.craft\fields\Matrix::PROPAGATION_METHOD_NONE. craft\enums\PropagationMethod::None should be used instead.craft\fields\Matrix::PROPAGATION_METHOD_SITE_GROUP. craft\enums\PropagationMethod::SiteGroup should be used instead.craft\fields\Matrix::contentTable.craft\fields\Matrix::getBlockTypeFields().craft\fields\Matrix::getBlockTypes().craft\fields\Matrix::setBlockTypes().craft\gql\arguments\elements\MatrixBlock.craft\gql\interfaces\elements\MatrixBlock.craft\gql\resolvers\elements\MatrixBlock.craft\gql\types\elements\MatrixBlock.craft\gql\types\generators\MatrixBlockType.craft\helpers\Db::GLUE_AND, GLUE_OR, and GLUE_NOT. craft\db\QueryParam::AND, OR, and NOT can be used instead.craft\helpers\Db::extractGlue(). craft\db\QueryParam::extractOperator() can be used instead.craft\helpers\ElementHelper::fieldColumn().craft\helpers\ElementHelper::fieldColumnFromField().craft\helpers\FieldHelper.craft\helpers\Gql::canMutateEntries().craft\models\EntryType::$sectionId.craft\models\EntryType::$sortOrder.craft\models\EntryType::getSection().craft\models\FieldGroup.craft\models\MatrixBlockType.craft\models\Section::PROPAGATION_METHOD_ALL. craft\enums\PropagationMethod::All should be used instead.craft\models\Section::PROPAGATION_METHOD_CUSTOM. craft\enums\PropagationMethod::Custom should be used instead.craft\models\Section::PROPAGATION_METHOD_LANGUAGE. craft\enums\PropagationMethod::Language should be used instead.craft\models\Section::PROPAGATION_METHOD_NONE. craft\enums\PropagationMethod::None should be used instead.craft\models\Section::PROPAGATION_METHOD_SITE_GROUP. craft\enums\PropagationMethod::SiteGroup should be used instead.craft\records\EntryType::getSection().craft\records\Field::getGroup().craft\records\Field::getOldColumnSuffix().craft\records\FieldGroup.craft\records\FieldLayout::getFields().craft\records\FieldLayout::getTabs().craft\records\FieldLayoutField.craft\records\FieldLayoutTab.craft\records\MatrixBlockType.craft\records\MatrixBlock.craft\services\Content.craft\services\Elements::$duplicatedElementIds.craft\services\Elements::$duplicatedElementSourceIds.craft\services\Fields::EVENT_AFTER_DELETE_FIELD_GROUP.craft\services\Fields::EVENT_AFTER_SAVE_FIELD_GROUP.craft\services\Fields::EVENT_BEFORE_APPLY_GROUP_DELETE.craft\services\Fields::EVENT_BEFORE_DELETE_FIELD_GROUP.craft\services\Fields::EVENT_BEFORE_SAVE_FIELD_GROUP.craft\services\Fields::deleteGroup().craft\services\Fields::deleteGroupById().craft\services\Fields::getAllGroups().craft\services\Fields::getFieldIdsByLayoutIds().craft\services\Fields::getFieldsByGroupId().craft\services\Fields::getGroupById().craft\services\Fields::getGroupByUid().craft\services\Fields::getLayoutTabsById().craft\services\Fields::handleChangedGroup().craft\services\Fields::handleDeletedGroup().craft\services\Fields::saveGroup().craft\services\Fields::updateColumn().craft\services\Matrix.craft\services\Plugins::setPluginLicenseKeyStatus().craft\services\ProjectConfig::PATH_MATRIX_BLOCK_TYPES.craft\services\ProjectConfig::PATH_MATRIX_BLOCK_TYPES.craft\services\ProjectConfig::PATH_MATRIX_BLOCK_TYPES.craft\services\ProjectConfig::updateStoredConfigAfterRequest().craft\services\Sections. Most of its methods have been moved to craft\services\Entries.craft\web\CpScreenResponseBehavior::$contextMenuHtml. $contextMenuItems should be used instead.craft\web\CpScreenResponseBehavior::contextMenuHtml(). contextMenuItems() should be used instead.craft\web\CpScreenResponseBehavior::contextMenuTemplate(). contextMenuItems() should be used instead.craft\web\User::startElevatedSession(). login() should be used instead.craft\web\twig\variables\Cp::getEntryTypeOptions().bodyHtml and headHtml when running in API mode.Craft.BaseElementSelectInput::defineElementActions().Craft.CP::setSiteCrumbMenuItemStatus().Craft.CP::showSiteCrumbMenuItem().Craft.CP::updateContext().Craft.CpModal.Craft.ElementEditor::markDeltaNameAsModified().Craft.ElementEditor::setFormValue().Garnish.DisclosureMenu::addGroup().Garnish.DisclosureMenu::addHr().Garnish.DisclosureMenu::addItem().Garnish.DisclosureMenu::createItem().Garnish.DisclosureMenu::getFirstDestructiveGroup().Garnish.DisclosureMenu::isPadded().Craft.appendBodyHtml() and appendHeadHtml() are now promise-based, and load JavaScript resources over Ajax.bacon/bacon-qr-code.composer/semver directly.pragmarx/google2fa.pragmarx/recovery.web-auth/webauthn-lib.commerceguys/addressing to v2. (#14318)illuminate/collections to v10.yiisoft/yii2-symfonymailer to v4.composer/composer.utf8mb4 charset, and the utf8mb4_0900_ai_ci or utf8mb4_unicode_ci collation, on MySQL. Existing installs should run db/convert-charset after upgrading, to ensure all tables have consistent charsets and collations. (#11823)deprecationerrors.traces, fieldlayouts.config, gqlschemas.scope, sections.previewTargets, userpreferences.preferences, and widgets.settings columns are now of type JSON for MySQL and PostgreSQL. (#14300)defaultTemplateExtensions config setting now lists twig before html by default. (#11809)slug.craft\ervices\Sites::$maxSites at your own peril. (#14307)author. (#14057)How can I help you explore Laravel packages today?