Content Management
- Condition rules for Checkboxes, Dropdown, Multi-select, and Radio Buttons fields now include “has a value” and “is empty” operators. (#17015)
- The Assets index page now prompts for confirmation when moving more than 50 assets, or assets totalling more than 50MB, at once. (#16908)
- The success notification displayed after an asset move now includes an “Undo” button, if less than 50 assets/50MB were involved in the move. (#16908)
- Window scrolling is now blocked when a modal window is open. (#16768)
Administration
- Added the
db/repair
command. (#16812) - Added the
--batch-size
option forresave/*
commands. (#16586) - The
plugin/install
command now accepts anedition
argument, and prompts for the default edition if none is specified. (#17030) - The
plugin/uninstall
command now reports if no plugin is installed with the provided handle. (#17030) - The
users/create
command now prompts to send an activation email, or outputs an activation URL. (#16794) - Dragging headings within the Customize Sources modal now also drags any subsequent sources. (#16737)
- When switching field types, any field settings which are defined by the same base class are now preserved. (#16783)
Development
- Added the
searchTermOptions
GraphQL query argument. (#16979) - Added the
revisionNotes
GraphQL entry mutation argument. (#16943)
Extensibility
- Global nav items and breadcrumbs can now have
aria-label
attributes via anariaLabel
property. - Added
craft\base\ElementInterface::getSerializedFieldValuesForDb()
. - Added
craft\base\FieldInterface::serializeValueForDb()
. - Added
craft\base\conditions\BaseMultiSelectConditionRule::$includeEmptyOperators
. - Added
craft\db\Connection::getIsMaria()
. - Added
craft\db\Table::SEARCHINDEXQUEUE_FIELDS
. - Added
craft\db\Table::SEARCHINDEXQUEUE
. - Added
craft\db\mysql\QueryBuilder::jsonContains()
. - Added
craft\db\mysql\QueryBuilder::jsonExtract()
. - Added
craft\db\pgsql\QueryBuilder::jsonContains()
. - Added
craft\db\pgsql\QueryBuilder::jsonExtract()
. - Added
craft\events\UpdateReleaseEvent
. - Added
craft\models\UpdateRelease::EVENT_IS_CRITICAL
. - Added
craft\models\UpdateRelease::isCritical()
. - Added
craft\queue\ReleasableQueueInterface
. (#16672) - Added
craft\records\User::haveIndexAttributesChanged()
. - Added
craft\services\Search::indexElementIfQueued()
. - Added
craft\services\Search::queueIndexElement()
. craft\cache\ElementQueryTagDependency
now merges cache tags provided by the element query with any tags already set on its$tags
property.craft\services\Users::ensureUserByEmail()
now prioritizes credentialed users.
System
craft\queue\Queue::release()
andreleaseAll()
now callrelease()
andreleaseAll()
on the proxied queue if it implementscraft\queue\ReleasableQueueInterface
. (#16672)- The
changedattributes
andchangedfields
tables are now cleaned up during garbage collection. (#16531) - The
resourcepaths
table is now truncated when clearing control panel resources, via the Caches utility or theclear-caches/cp-resources
command. (#16514) - Date values for custom fields are now represented as ISO-8601 date strings (with time zones) within element exports. (#16629)
- “Updating search indexes” queue jobs no longer do anything if search indexes were already updated for the element since the job was created. (#16644)
- User caches are no longer invalidated on login attempts or when user management actions are taken. (#16937)
- Batchable queue jobs now spawn new batches when their execution time is getting uncomfortably close to their TTR duration. (#16947)
- Added compatibility with Symfony HTTP Client 7. (#17065)
- Updated Yii to 2.0.52.
- Updated yii2-debug to 2.1.26.
- Updated Axios to 1.8.4.
- Fixed a bug where
CRAFT_WEB_URL
andCRAFT_WEB_ROOT
environment variables could be overridden by@web
and@webroot
aliases define by thealiases
config setting. (#16980) - Fixed a bug where assets’ “View” buttons/links had outdated URLs after replacing the file. (#17063)