All Versions
336
Latest Version
Avg Release Cycle
7 days
Latest Release
568 days ago

Changelog History
Page 9

  • v3.7.7 Changes

    July 29, 2021

    ➕ Added

    • ➕ Added the canonicalId GraphQL field for entries.

    🗄 Deprecated

    • 🗄 Deprecated the sourceId and sourceUid GraphQL fields for entries. canonicalId should be used instead.

    🛠 Fixed

    • 🛠 Fixed an error that could occur when creating a new entry, if the section’s Entry URI Format contained {canonicalId}. (#6080)
    • 🛠 Fixed a bug where craft\helpers\Db::isTextualColumnType() was always returning false.
    • 🛠 Fixed a bug where :empty: element query conditions weren’t working correctly for empty string values on Postgres. (#9641)
    • 🛠 Fixed an error that occurred if an entry’s getSupportedSites() method was called on a front-end, non-action request. (#9649)
    • 🛠 Fixed a SQL error that could occur when running the “Find and Replace” utility. (#9651)
    • 🛠 Fixed a bug where Date fields that were set to only show the time input weren’t saving new values properly. (#9650)
    • 🛠 Fixed a bug where craft\services\Fields::$oldFieldColumnPrefix wasn’t getting set properly when deleting a Matrix block type.
    • 🛠 Fixed a bug where Matrix sub-fields were getting new content columns whenever their block type’s handle was changed, when the existing columns should have been renamed.
  • v3.7.6 Changes

    July 27, 2021

    ➕ Added

    • ➕ Added the provisionalDrafts argument for entry GraphQL queries.

    🛠 Fixed

    • 🛠 Fixed a bug where global set queries could contain fields that were supposed to be hidden.
    • 🛠 Fixed a bug where craft\helpers\DateTimeHelper::toDateTime() was interpreting year-only values as timestamps. (#9642)
    • 🛠 Fixed a bug where blank Email field values were getting stored as empty strings rather than NULL. (#9641)
    • 🛠 Fixed a bug where it wasn’t possible to clear out some entry field values, if their values were blank to begin with. (#9643)
  • v3.7.5 Changes

    July 23, 2021

    ➕ Added

    • ➕ Added craft\base\ElementTrait::$firstSave. (#9638)
    • ➕ Added craft\base\FieldInterface::getOrientation().
    • ➕ Added craft\helpers\FieldHelper.

    🔄 Changed

    • Field orientations are now based on the primary site’s language for single-site installs. (#9616)
    • Matrix block type handles are now limited to 47 characters. (#9636)

    🛠 Fixed

    • 🛠 Fixed a bug where Live Preview stopped working when the device type was changed, for preview targets that had auto-refresh disabled. (#9610)
    • 🛠 Fixed a 403 error that occurred when attempting to discard changes on an entry. (#9602)
    • 🛠 Fixed a bug where opening the image editor would cause the page to scroll to the top. (#9612)
    • 🛠 Fixed a bug where provisional drafts weren’t displaying a notice when upstream changes had been merged into them. (#9615)
    • 🛠 Fixed a bug where entry titles were set to null before getting regenerated via their Title Format for new drafts.
    • 🛠 Fixed SQL errors that could occur when updating Craft 3.7. (#9624, #9625)
    • 🛠 Fixed a bug where craft\web\Request::getRawCookies() was returning hashed cookie values.
    • Fixed a PHP error that could occur when saving a site, if there were any event handlers on craft\services\Sites::EVENT_BEFORE_SAVE_SITE.
    • Fixed an error that could occur when deleting a route from the control panel if there were any event handlers on craft\services\Routes::EVENT_AFTER_DELETE_ROUTE.
    • 🛠 Fixed a bug where existing fields’ maximum handle lengths were nine characters less than they needed to be.
    • 🛠 Fixed a bug where Craft would send a X-Robots-Tag: none header on front-end Login pages. (#9621)
    • 🛠 Fixed a bug where the “Singles” entry source showed the Author column by default. (#9627)
    • 🛠 Fixed a bug where the control panel header could remain “stuck” after closing Live Preview in Firefox. (#9630)
    • 🛠 Fixed a JavaScript error that could occur on Edit Entry pages. (#9631)
    • 🛠 Fixed a bug where assets weren’t always getting moved out of the Temporary Uploads volume when saving an entry. (#9619)
    • 🛠 Fixed a bug where it wasn’t possible to upload an asset via a data URL if its MIME type contained a dash. (#9632)
  • v3.7.4 Changes

    July 19, 2021

    ➕ Added

    • ➕ Added craft\helpers\ElementHelper::shouldTrackChanges().

    🔄 Changed

    • 👌 Improved the performance of delta form submissions. (#9605)

    🛠 Fixed

    • 🛠 Fixed a bug where temporary volume folders couldn’t be created for console requests. (#9597)
    • 🛠 Fixed a bug where craft\base\Field::copyValue() wasn’t passing the source element to $this->serializeValue(). (sebastian-lenz/craft-linkfield#161)
    • 🛠 Fixed a bug where entries were only tracking modified attributes for the site the changes were made on.
    • 🛠 Fixed a bug where entries were only tracking modified relation fields for the site changes were made on. (#9596)
    • 🛠 Fixed a bug where images within rich text fields’ static previews could bleed out of their container element. (#9603)
    • 🛠 Fixed a bug where passing an empty value to relatedTo() and andRelatedTo() would yield no results on an element query. (#9599)
    • 🛠 Fixed a bug where existing Matrix/Neo/Super Table blocks could lose their content when creating a provisional draft, if additional block changes were queued up before the draft was fully created. (#9601)
  • v3.7.3 Changes

    July 16, 2021

    ➕ Added

    • ➕ Added the sendContentLengthHeader config setting.

    🔄 Changed

    • Template requests no longer respond with a Content-Length header, unless the sendContentLengthHeader config setting is enabled. (#8070)
    • 🍱 Edit Asset pages are now located at assets/edit/<id>-<filename> rather than assets/<volume>/<id>-<filename>.
    • edit is now a reserved volume handle.
    • Number fields no longer allow non-numeric input. (#9586)

    🛠 Fixed

    • 🛠 Fixed a bug where object templates didn’t support string interpolation within normal Twig tags. (#9138)
    • 🛠 Fixed an error that could occur after applying project config changes.
    • 🛠 Fixed a bug where assets’ control panel URLs were getting routed to the Assets index page. (#9583)
    • 🛠 Fixed a visual bug where field status indicators were overlapping the prior field in the same row. (#9585)
  • v3.7.3.2 Changes

    July 18, 2021

    🛠 Fixed

    • 🛠 Fixed a bug where Edit Entry pages weren’t submitting changes to fields if they had been changed back to their original value they had on page load. (#9575)
  • v3.7.3.1 Changes

    July 17, 2021

    🔄 Changed

    • 👌 Improved the performance of Edit Entry pages. (#9575)

    🛠 Fixed

    • 🛠 Fixed styling issues in the control panel. (#9590, #9592)
    • 🛠 Fixed a bug where entry drafts could label fields as being modified on the canonical entry, even when they weren’t.
  • v3.7.2 Changes

    July 15, 2021

    🛠 Fixed

    • 🛠 Fixed a SQL error that could occur when updating to Craft 3.7. (#9574)
    • 🛠 Fixed a bug where Edit Entries pages were displaying a “Delete draft” action for provisional drafts.
    • 🛠 Fixed a 404 error that occurred when linking to a volume’s subfolder on the Assets index page, if the subfolder contained a dash. (#9579)
    • Fixed a bug where Craft was logging errors and warnings to stdout when Dev Mode was disabled, if the CRAFT_STREAM_LOG PHP constant was set. (#9572)
  • v3.7.1 Changes

    July 14, 2021

    ➕ Added

    • ➕ Added the transformSvgs config setting. (#9557)

    🔄 Changed

    • Console requests no longer force Dev Mode to be enabled. (#5256)

    🛠 Fixed

    • 🛠 Fixed deprecation warnings that occurred on some edit pages. (#9556)
    • 🛠 Fixed an error that occurred when updating from Craft 3.6.7 or earlier.
    • 🛠 Fixed a bug where progress bar labels weren’t always removed correctly.
    • 🛠 Fixed a bug where it wasn’t possible to filter by status on the Categories index page. (#9555)
    • 🛠 Fixed a bug where Edit Category pages didn’t have a “Save and add another” action.
    • 🛠 Fixed a bug where moving an asset with an invalid file extension would be treated as if there was a conflicting asset in the destination directory. (#9147)
    • 🛠 Fixed a bug where multiple tab bars could appear on Edit Entry pages, if the Entry Type had been changed multiple times. (#9562)
    • 🛠 Fixed a bug where some control panel icons had unhelpful <title> tags and other cruft. (#9563)
    • 🛠 Fixed a bug where the “Create a draft” button on Edit Entry pages wasn’t working properly for users that didn’t have permission to publish changes to the entry. (#9570)
    • 🛠 Fixed a bug where Edit Entry pages could show a provisional draft immediately after saving published changes to the entry, if the save was initiated at the same time that the provisional draft was getting created. (#9568)
    • 🛠 Fixed a bug where entry slugs weren’t getting auto-generated on first save, if their title was generated based on a custom Title Format. (#9561)
  • v3.7.0 Changes

    July 13, 2021

    ⚡️ > {tip} Read through the Upgrading to Craft 3.7 guide before updating.

    ➕ Added

    • The control panel now displays new feature announcements. (#8056)
    • ➕ Added the “Always show focus rings” user preference. (#7790)
    • The Entries index page now has “Create a new entry before” and “Create a new entry after” actions for entries within Structure sections. (#870)
    • The Entries index page now has a “Delete for site” action for entries whose section’s Propagation Method is set to “Let each entry choose which sites it should be saved to”. (#9119)
    • Edit Entry pages now treat unpublished drafts similarly to published entries, rather than drafts. (#7899)
    • Edit Entry pages no longer appear to create a draft when the Current revision is edited within Live Preview. Unsaved changes are now stored within a “provisional draft”, which is mostly hidden from the author. (#7899)
    • 0️⃣ Category groups now have a “Default Category Placement” setting, which determines where new categories should be placed within the structure by default. (#7759)
    • 0️⃣ Structure sections now have a “Default Entry Placement” setting, which determines where new entries should be placed within the structure by default. (#7759)
    • 🍱 The Assets index page now remembers the selected subfolder between page loads. (#9546)
    • 🍱 It’s now possible to deep-link to a specific subfolder on the Assets index page.
    • Edit Asset pages now redirect back to the subfolder the asset is located in on save.
    • It’s now possible to reorder global sets. (#8052)
    • Date fields now have a “Show Time Zone” setting, allowing authors to choose which time zone the date is set to, rather than using the system time zone.
    • Matrix fields can now be set to custom propagation methods, based on a propagation key template. (#7610)
    • ➕ Added a “Refresh” button to Live Preview, for preview targets whose “Auto-refresh” (formerly “Refresh”) setting is disabled.
    • ➕ Added the users/create and users/delete commands. (#8014)
    • ➕ Added the siteSettingsId element query and GraphQL API query parameter for all elements.
    • ➕ Added the preferSites GraphQL API query argument for all elements. (#8006)
    • ➕ Added the ancestors, descendants, drafts, draftCreator, revisions, currentRevision, and revisionCreator fields to entry GraphQL queries. ([#7950]((https://github.com/craftcms/cms/issues/7950)))
    • ➕ Added the httpProxy config setting, which can be used instead of setting the proxy Guzzle request option. (#9105)
    • ➕ Added the previewTokenDuration config setting. (#2394)
    • ➕ Added the revAssetUrls config setting. (#7847)
    • ➕ Added the setGraphqlDatesToSystemTimeZone config setting. (#8016)
    • ➕ Added the useUnbufferedConnections database connection setting, which can be set to true when using MySQL to cause batched queries to be executed over separate, unbuffered database connections when using MySQL. (#7338)
    • ➕ Added the “Validate custom fields on public registration” user setting. (#4229)
    • ➕ Added the |removeClass Twig filter.
    • ➕ Added craft\base\ApplicationTrait::getAnnouncements().
    • Added craft\base\ConfigurableComponent::EVENT_DEFINE_SETTINGS_ATTRIBUTES. (#8004)
    • Added craft\base\Element::EVENT_DEFINE_IS_DELETABLE.
    • Added craft\base\Element::EVENT_DEFINE_IS_EDITABLE. (#8023)
    • Added craft\base\Element::EVENT_DEFINE_METADATA.
    • Added craft\base\Element::EVENT_DEFINE_META_FIELDS_HTML.
    • Added craft\base\Element::EVENT_DEFINE_SIDEBAR_HTML.
    • ➕ Added craft\base\Element::cpEditUrl(), which should be overridden rather than getCpEditUrl().
    • ➕ Added craft\base\Element::hasFieldLayout().
    • ➕ Added craft\base\Element::isDeletable().
    • ➕ Added craft\base\Element::isEditable().
    • ➕ Added craft\base\Element::metaFieldsHtml().
    • ➕ Added craft\base\Element::metadata().
    • ➕ Added craft\base\Element::slugFieldHtml().
    • ➕ Added craft\base\ElementInterface::getCanonical().
    • ➕ Added craft\base\ElementInterface::getCanonicalId().
    • ➕ Added craft\base\ElementInterface::getIsCanonical().
    • ➕ Added craft\base\ElementInterface::getIsDerivative().
    • ➕ Added craft\base\ElementInterface::getMetadata().
    • ➕ Added craft\base\ElementInterface::getModifiedAttributes().
    • ➕ Added craft\base\ElementInterface::getModifiedFields().
    • ➕ Added craft\base\ElementInterface::getOutdatedAttributes().
    • ➕ Added craft\base\ElementInterface::getOutdatedFields().
    • ➕ Added craft\base\ElementInterface::getParentUri(). (#7932)
    • ➕ Added craft\base\ElementInterface::getSidebarHtml().
    • ➕ Added craft\base\ElementInterface::isAttributeModified().
    • ➕ Added craft\base\ElementInterface::isAttributeOutdated().
    • ➕ Added craft\base\ElementInterface::isFieldModified().
    • ➕ Added craft\base\ElementInterface::isFieldOutdated().
    • ➕ Added craft\base\ElementInterface::mergeCanonicalChanges().
    • ➕ Added craft\base\ElementInterface::setCanonical().
    • ➕ Added craft\base\ElementInterface::setCanonicalId().
    • ➕ Added craft\base\ElementTrait::$dateLastMerged.
    • ➕ Added craft\base\ElementTrait::$isProvisionalDraft.
    • ➕ Added craft\base\ElementTrait::$mergingCanonicalChanges.
    • ➕ Added craft\base\ElementTrait::$updatingFromDerivative.
    • ➕ Added craft\base\FieldInterface::copyValue().
    • ➕ Added craft\base\FieldInterface::getStatus().
    • ➕ Added craft\base\FieldTrait::$columnSuffix.
    • ➕ Added craft\console\ControllerTrait::checkRootUser().
    • ➕ Added craft\console\ControllerTrait::createAttributeValidator(). (#8066)
    • ➕ Added craft\console\controllers\ResaveController::resaveElements().
    • Added craft\elements\User::EVENT_DEFINE_FRIENDLY_NAME. (#8027)
    • Added craft\elements\User::EVENT_DEFINE_NAME. (#8027)
    • ➕ Added craft\elements\User::setFriendlyName().
    • ➕ Added craft\elements\User::setName().
    • ➕ Added craft\elements\db\ElementQuery::provisionalDrafts().
    • ➕ Added craft\events\DefineHtmlEvent.
    • ➕ Added craft\events\DefineMetadataEvent.
    • ➕ Added craft\events\DefineValueEvent.
    • ➕ Added craft\events\DraftEvent::$provisional.
    • ➕ Added craft\fields\Matrix::$propagationKeyFormat.
    • Added craft\fields\Matrix::PROPAGATION_METHOD_CUSTOM.
    • ➕ Added craft\helpers\Cp::autosuggestFieldHtml().
    • ➕ Added craft\helpers\Cp::dateTimeFieldHtml().
    • ➕ Added craft\helpers\Cp::editElementTitles().
    • ➕ Added craft\helpers\Cp::elementSelectFieldHtml().
    • ➕ Added craft\helpers\Cp::metadataHtml().
    • ➕ Added craft\helpers\Db::batch() and each(), which can be used instead of craft\db\Query::batch() and each(), to execute batched SQL queries over a new, unbuffered database connection (if using MySQL and useUnbufferedConnections is true). (#7338)
    • ➕ Added craft\helpers\ElementHelper::fieldColumn().
    • ➕ Added craft\helpers\ElementHelper::fieldColumnFromField().
    • ➕ Added craft\helpers\ElementHelper::isDraft().
    • ➕ Added craft\helpers\ElementHelper::isRevision().
    • ➕ Added craft\helpers\Html::parseTagAttribute().
    • ➕ Added craft\helpers\Html::widont().
    • ➕ Added craft\mail\Message::$error. (#8091)
    • ➕ Added craft\models\CategoryGroup::$defaultPlacement.
    • Added craft\models\CategoryGroup::DEFAULT_PLACEMENT_BEGINNING.
    • Added craft\models\CategoryGroup::DEFAULT_PLACEMENT_END.
    • ➕ Added craft\models\FieldLayout::$reservedFieldHandles.
    • ➕ Added craft\models\Section::$defaultPlacement.
    • Added craft\models\Section::DEFAULT_PLACEMENT_BEGINNING.
    • Added craft\models\Section::DEFAULT_PLACEMENT_END.
    • ➕ Added craft\models\SiteGroup::getName().
    • ➕ Added craft\models\SiteGroup::setName().
    • ➕ Added craft\services\Announcements.
    • Added craft\services\Elements::EVENT_AFTER_MERGE_CANONICAL_CHANGES.
    • Added craft\services\Elements::EVENT_BEFORE_MERGE_CANONICAL_CHANGES.
    • ➕ Added craft\services\Elements::mergeCanonicalChanges().
    • ➕ Added craft\services\Elements::updateCanonicalElement().
    • ➕ Added craft\services\Matrix::mergeCanonicalChanges().
    • ➕ Added craft\services\Tokens::createPreviewToken().
    • ➕ Added craft\web\Request::checkIfActionRequest().
    • ➕ Added craft\web\View::clearCssBuffer().
    • ➕ Added craft\web\View::clearScriptBuffer().
    • ➕ Added craft\web\View::getInitialDeltaValues().
    • ➕ Added craft\web\View::startCssBuffer().
    • ➕ Added craft\web\View::startScriptBuffer().
    • ➕ Added craft\web\twig\variables\Cp::getTimeZoneOptions().
    • ➕ Added the timeZone and timeZoneField macros to the _includes/forms.html control panel template.
    • ➕ Added the Craft.Slideout JavaScript class.
    • ➕ Added the Craft.Tabs JavaScript class.
    • ➕ Added the Craft.group() JavaScript method.
    • ➕ Added the Craft.setFocusWithin() JavaScript method.
    • ➕ Added the Craft.trapFocusWithin() JavaScript method.

    🔄 Changed

    • 🔄 Changes from an entry’s Current revision are now automatically merged into drafts upon visiting drafts’ edit pages.
    • 🔀 When changes from an entry’s Current revision are merged into a draft, Matrix field changes are now merged on a per-block basis. (#5503, #7710)
    • 📇 Inline element editors now use slideouts rather than HUDs, and include the element’s fully-rendered field layout (including tabs and custom UI elements), meta fields (Slug, Post Date, etc.) and metadata, plus a link to open the element’s dedicated edit page in a new browser tab. (#8017)
    • The “Publish draft” button has been relabelled to “Apply draft”.
    • Entries now retain their original IDs when created from an unpublished draft. (#9104)
    • Matrix blocks now retain their original IDs and UIDs when a draft is published. (#7710)
    • 👌 Improved the styling of field status indicators.
    • Field status indicators now appear immediately after a field’s value is changed and saved successfully to a draft.
    • 👌 Improved the design and accessibility of tabs in the control panel. (#7299)
    • 0️⃣ Asset, category, and entry indexes now use “Asset”, “Category”, and “Entry” header column headings by default, rather than “Title”.
    • 👌 Improved the UI of the Time Zone input in Settings → General.
    • It’s now possible to toggle site-specific category statuses from the Edit Category page. (#7636)
    • 🏷 Tag field layouts now include the Title field, allowing its placement and label to be customized.
    • 🏷 Tag field layouts can now contain multiple tabs and UI elements.
    • 🌐 Custom fields with a custom translation method are no longer labelled as translatable if the translation key is an empty string. (#7647)
    • Category and tag groups no longer validate if their field layout contains a field called group. (#2797)
    • Entry types no longer validate if their field layout contains a field called author, section, or type. (#2797)
    • Volumes no longer validate if their field layout contains a field called folder or volume. (#2797)
    • The user field layout no longer validates if it contains a field called groups or photo. (#2797)
    • The resave/entries command now has a --provisional-drafts option.
    • resave/* commands now have a --queue option. (#8040)
    • 👍 Entries no longer support Live Preview if the autosaveDrafts config setting is disabled.
    • Most text areas in the control panel will now submit the closest form when Ctrl/Command + Return is pressed. (#7999)
    • 0️⃣ The defaultCpLanguage config setting no longer affects console requests. (#7747)
    • The {% cache %} tag now stores any JavaScript or CSS code registered with {% js %}, {% script %}, and {% css %} tags. (#7758)
    • 👍 The date() Twig function now supports arrays with date and/or time keys. (#7681)
    • 👍 Date query params now support passing in times relative to now (e.g. >= now). (#9117)
    • 👍 Object templates (such as redirect params and URI Format settings) now support string interpolation. (#9138)
    • 🚀 Custom field column names now include a random string, preventing column name conflicts when deploying multiple project config changes at once. (#6922)
    • Custom fields can now store data across multiple columns in the content table.
    • 0️⃣ Channel and Structure sections’ initial entry types are now named “Default” by default. (#7078)
    • Entries can now be eager-loaded with revisions.
    • Console commands now show a confirmation prompt when executed as the root user. (#7955)
    • Project config component UID/name mappings are now stored in the project config itself, making them portable across environments. (#7709)
    • 📜 Validation errors in the control panel are now parsed for Markdown syntax. (#8008)
    • 🗄 Renamed the enableGraphQlCaching config setting to enableGraphqlCaching. (The old name still works but is deprecated.)
    • Admin tables can now include linked buttons in the toolbar.
    • Admin tables can now include single action buttons.
    • 👍 Admin tables now support separators in menu button lists.
    • Site group names can now be set to environment variables. (#8044)
    • Template requests now respond with a Content-Length header. (#8070)
    • 👷 Exceptions thrown by queue jobs are now logged. (#8060)
    • craft\base\Element::__set() now detects whether a custom field value is being set, and if so, passes the value through setFieldValue(). (#7726)
    • craft\base\Element::getCpEditUrl() now includes a draftId/revisionId query string param in the returned URL if the element is a draft or revision. (#7832)
    • craft\base\FieldInterface::getContentColumnType() can now return an array, if the field stores content across multiple columns.
    • craft\helpers\Cp::elementHtml() now has a $single argument.
    • 👍 craft\helpers\DateTimeHelper::toDateTime() now supports passing in 'now'. (#9117)
    • craft\services\AssetTransforms::normalizeTransform() now accepts transform configs arrays that specify a base transform which should be extended, via a transform key set to the stored transform’s handle. (#7892)
    • craft\services\Drafts::EVENT_AFTER_APPLY_DRAFT is no longer deprecated.
    • craft\services\Drafts::EVENT_BEFORE_APPLY_DRAFT is no longer deprecated.
    • 🗄 craft\services\Drafts::applyDraft() is no longer deprecated.
    • 0️⃣ craft\services\Users::saveLayout() now has a $runValidation argument, which is true by default.
    • 🌐 craft\web\View::clearJsBuffer() now has a $combine argument.
    • 🌐 craft\web\View::namespaceInputs() now accepts a callback function for the first argument, which simplifies the process of setting and resetting the registered namespace before and after generating the to-be-namespaced HTML.
    • ⚡️ Updated Garnish to 0.1.46.

    🗄 Deprecated

    • Deprecated craft\base\Element::ATTR_STATUS_CONFLICTED.
    • 🗄 Deprecated craft\base\Element::getFieldStatus().
    • 🗄 Deprecated craft\base\Element::getSourceId(). getCanonicalId() should be used instead.
    • 🗄 Deprecated craft\base\Element::getSourceUid(). getCanonical()->uid should be used instead.
    • 🗄 Deprecated craft\base\VolumeInterface::folderExists(). directoryExists() should be used instead.
    • 🗄 Deprecated craft\behaviors\BaseRevisionBehavior::$sourceId. craft\base\ElementInterface::getCanonicalId() should be used instead.
    • 🗄 Deprecated craft\behaviors\DraftBehavior::$dateLastMerged. craft\base\ElementTrait::$dateLastMerged should be used instead.
    • 🔀 Deprecated craft\behaviors\DraftBehavior::$mergingChanges. craft\base\ElementTrait::$mergingCanonicalChanges should be used instead.
    • 🗄 Deprecated craft\behaviors\DraftBehavior::$trackChanges.
    • 🗄 Deprecated craft\behaviors\DraftBehavior::getOutdatedAttributes(). craft\base\ElementInterface::getOutdatedAttributes() should be used instead.
    • 🗄 Deprecated craft\behaviors\DraftBehavior::getOutdatedFields(). craft\base\ElementInterface::getOutdatedFields() should be used instead.
    • 🗄 Deprecated craft\behaviors\DraftBehavior::isAttributeModified(). craft\base\ElementInterface::isAttributeModified() should be used instead.
    • 🗄 Deprecated craft\behaviors\DraftBehavior::isAttributeOutdated(). craft\base\ElementInterface::isAttributeOutdated() should be used instead.
    • 🗄 Deprecated craft\behaviors\DraftBehavior::isFieldModified(). craft\base\ElementInterface::isFieldModified() should be used instead.
    • 🗄 Deprecated craft\behaviors\DraftBehavior::isFieldOutdated(). craft\base\ElementInterface::isFieldOutdated() should be used instead.
    • 🗄 Deprecated craft\console\controllers\ResaveController::saveElements(). resaveElements() should be used instead.
    • 🗄 Deprecated craft\elements\Asset::KIND_FLASH.
    • 🗄 Deprecated craft\services\Content::getContentRow().
    • 🗄 Deprecated craft\services\Content::populateElementContent().
    • Deprecated craft\services\Drafts::EVENT_AFTER_MERGE_SOURCE_CHANGES.
    • Deprecated craft\services\Drafts::EVENT_AFTER_PUBLISH_DRAFT. EVENT_AFTER_APPLY_DRAFT should be used instead.
    • Deprecated craft\services\Drafts::EVENT_BEFORE_MERGE_SOURCE_CHANGES.
    • Deprecated craft\services\Drafts::EVENT_BEFORE_PUBLISH_DRAFT. EVENT_BEFORE_APPLY_DRAFT should be used instead.
    • 🔀 Deprecated craft\services\Drafts::mergeSourceChanges().
    • 🗄 Deprecated craft\services\Drafts::publishDraft(). applyDraft() should be used instead.
    • 🗄 Deprecated craft\web\View::getInitialDeltaValue().

    ✂ Removed

    • ✂ Removed support for the “Flash” file kind. (#7626)

    🛠 Fixed

    • 🛠 Fixed a bug where Craft would place the beginBody() tag incorrectly if a template’s <body> tag had attribute values that included > characters. (#7779)
    • 🛠 Fixed a bug where updated attributes and fields weren’t getting tracked when publishing a draft or reverting an entry to a revision.
    • 🛠 Fixed a bug where it wasn’t easily possible to submit forms to controller actions from Live Preview pages. (#7885)
    • 🛠 Fixed a bug where it was possible to choose a different parent entry when editing a draft, even though the change wouldn’t stick when publishing the draft.
    • 🛠 Fixed a bug where changing an entry’s parent wouldn’t update any of its drafts.
    • 🛠 Fixed a SQL error that occurred when deleting a volume folder that had subfolders nested more than 15 levels deep. (#8073)
    • 🛠 Fixed a SQL error that occurred when hard-deleting a volume that had subfolders nested more than 15 levels deep. (#8073)
    • 🛠 Fixed a bug where exported CSV files weren’t being imported with an UTF-8 encoding by Excel. (#8067)
    • 🛠 Fixed a bug where Dropdown fields weren’t always saving properly within element editor slideouts, if left unchanged. (#8090)
    • 🛠 Fixed a bug where value normalizers for GraphQL mutations would not be executed in nested field. (#9139)

    🔒 Security

    • 0️⃣ The default allowedFileExtensions config setting value no longer includes xml.