|
9 | 9 | - Added the “Inactive” user status, which can be used by users which can’t be signed into. ([#8963](https://github.com/craftcms/cms/discussions/8963)) |
10 | 10 | - Added “Credentialed” and “Inactive” user sources. |
11 | 11 | - Added the “Deactivate…” user action for pending and active users. |
| 12 | +- Craft now provides a native “Alternative Text” (`alt`) field for assets. ([#10302](https://github.com/craftcms/cms/discussions/10302)) |
| 13 | +- Asset thumbnails in the control panel now have `alt` attributes, for assets with a filled-in Alternative Text value. |
12 | 14 | - Added the `index-assets/cleanup` command. |
13 | 15 | - Added the “Deactivate users by default” user registration setting, which replaces “Suspend users by default”. ([#5830](https://github.com/craftcms/cms/issues/5830)) |
14 | 16 | - Element source settings are now stored in the project config. ([#8616](https://github.com/craftcms/cms/discussions/8616)) |
15 | 17 | - Added support for `JSON` columns. ([#9089](https://github.com/craftcms/cms/pull/9089)) |
16 | 18 | - It’s now possible to edit images’ focal points from their preview modals. ([#8489](https://github.com/craftcms/cms/discussions/8489)) |
17 | 19 | - Added the `assetUploaders` user query param. |
18 | 20 | - Added the `authors` user query param. |
| 21 | +- Added the `hasAlt` asset query param. |
19 | 22 | - Added support for setting custom config settings from `config/custom.php`, which are accessible via `Craft::$app->config->custom`. ([#10012](https://github.com/craftcms/cms/issues/10012)) |
20 | 23 | - Added `craft\base\ApplicationTrait::getConditions()`. |
21 | 24 | - Added `craft\base\ApplicationTrait::getElementSources()`, which replaces `getElementIndexes()`. |
|
31 | 34 | - Added `craft\base\conditions\ConditionInterface`. |
32 | 35 | - Added `craft\base\conditions\ConditionRuleInterface`. |
33 | 36 | - Added `craft\base\ElementInterface::createCondition()`. |
| 37 | +- Added `craft\base\ElementInterface::getThumbAlt()`. |
34 | 38 | - Added `craft\base\FieldInterface::getElementConditionRuleType()`. |
35 | 39 | - Added `craft\base\FieldLayoutComponent`. |
36 | 40 | - Added `craft\base\Volume::CONFIG_MIMETYPE`. |
|
48 | 52 | - Added `craft\db\Migration::renameTable()`. |
49 | 53 | - Added `craft\db\Query::collect()`, which returns the query results as an `Illuminate\Support\Collection` object rather than an array. ([#8513](https://github.com/craftcms/cms/discussions/8513)) |
50 | 54 | - Added `craft\db\Table::ASSETINDEXINGSESSIONS`. |
| 55 | +- Added `craft\elements\Asset::$alt`. |
51 | 56 | - Added `craft\elements\Asset::setFilename()`. |
52 | 57 | - Added `craft\elements\conditions\assets\AssetCondition`. |
53 | 58 | - Added `craft\elements\conditions\assets\DateModifiedConditionRule`. |
54 | 59 | - Added `craft\elements\conditions\assets\FilenameConditionRule`. |
55 | 60 | - Added `craft\elements\conditions\assets\FileSizeConditionRule`. |
56 | 61 | - Added `craft\elements\conditions\assets\FileTypeConditionRule`. |
| 62 | +- Added `craft\elements\conditions\assets\HasAltConditionRule`. |
57 | 63 | - Added `craft\elements\conditions\assets\HeightConditionRule`. |
58 | 64 | - Added `craft\elements\conditions\assets\UploaderConditionRule`. |
59 | 65 | - Added `craft\elements\conditions\assets\VolumeConditionRule`. |
|
93 | 99 | - Added `craft\elements\User::STATUS_INACTIVE`. |
94 | 100 | - Added `craft\errors\MissingVolumeFolderException`. |
95 | 101 | - Added `craft\events\RegisterConditionRuleTypesEvent`. |
| 102 | +- Added `craft\fieldlayoutelements\AssetAltField`. |
96 | 103 | - Added `craft\fieldlayoutelements\BaseNativeField`, which replaces `craft\fieldlayoutelements\StandardField`. |
| 104 | +- Added `craft\fieldlayoutelements\TextareaField`. |
97 | 105 | - Added `craft\fieldlayoutelements\TextField`, which replaces `craft\fieldlayoutelements\StandardTextField`. |
98 | 106 | - Added `craft\fields\Assets::$allowSubfolders`. |
99 | 107 | - Added `craft\fields\Assets::$restrictedDefaulUploadSubpath`. |
|
221 | 229 | - Filtering users by `active`, `pending`, and `locked` statuses no longer excludes suspended users. |
222 | 230 | - Assets fields that are restricted to a single location can now be configured to allow selection within subfolders of that location. ([#9070](https://github.com/craftcms/cms/discussions/9070)) |
223 | 231 | - When an image is saved as a new asset from the Image Editor via an Assets field, the Assets field will now automatically replace the selected asset with the new one. ([#8974](https://github.com/craftcms/cms/discussions/8974)) |
| 232 | +- `alt` is now a reserved field handle for volume field layouts. |
224 | 233 | - Entry post dates are no longer set automatically until the entry is validated with the `live` scenario. ([#10093](https://github.com/craftcms/cms/pull/10093)) |
225 | 234 | - Entry queries’ `authorGroup()` param method now accepts an array of `craft\models\UserGroup` objects. |
226 | 235 | - Relational fields now load elements in the current site rather than the primary site, if the source element isn’t localizable. ([#7048](https://github.com/craftcms/cms/issues/7048)) |
|
318 | 327 | - Widgets’ `icon()` methods must now have a `?string` return type declaration. |
319 | 328 | - Widgets’ `maxColspan()` methods must now have an `?int` return type declaration. |
320 | 329 | - `craft\base\AssetPreviewHandlerInterface::getPreviewHtml()` now accepts an optional array of variable to pass on to the template. |
321 | | -- `craft\base\ElementInterface::getEagerLoadedElements()` now returns an `Illuminate\Support\Collection` object instead of an array. ([#8513](https://github.com/craftcms/cms/discussions/8513)) |
322 | 330 | - `craft\base\Element::__get()` now clones custom field values before returning them. ([#8781](https://github.com/craftcms/cms/discussions/8781)) |
323 | 331 | - `craft\base\Element::fieldLayoutFields()` now has a `visibleOnly` argument. |
324 | 332 | - `craft\base\Element::getFieldValue()` now returns eager-loaded element values for the field, when they exist. ([#10047](https://github.com/craftcms/cms/issues/10047)) |
| 333 | +- `craft\base\ElementInterface::getEagerLoadedElements()` now returns an `Illuminate\Support\Collection` object instead of an array. ([#8513](https://github.com/craftcms/cms/discussions/8513)) |
325 | 334 | - `craft\base\MemoizableArray` no longer extends `ArrayObject`, and now implements `IteratorAggregate` and `Countable` directly. |
326 | 335 | - `craft\base\Model::datetimeAttributes()` is now called from the constructor, instead of the `init()` method. |
327 | 336 | - `craft\base\Model::setAttributes()` now normalizes date attributes into `DateTime` objects. |
328 | | -- `craft\db\Command` methods with `$includeAuditColumns` arguments now ensure the table actually has audit columns before modifying the query. |
329 | 337 | - `craft\db\Command::upsert()` no longer merges the `$updateColumns` array into `$insertColumns`. The full array of `INSERT` column values should be passed to `$insertColumns` now. |
| 338 | +- `craft\db\Command` methods with `$includeAuditColumns` arguments now ensure the table actually has audit columns before modifying the query. |
| 339 | +- `craft\elements\Asset::getImg()` now sets the `alt` attribute to the native Alternative Text field value, if set. |
330 | 340 | - `craft\elements\db\ElementQuery::ids()` no longer accepts an array of criteria params. |
331 | 341 | - `craft\events\DraftEvent::$source` has been renamed to `$canonical`. |
332 | 342 | - `craft\events\GetAssetThumbUrlEvent` has been renamed to `DefineAssetThumbUrlEvent`. |
|
344 | 354 | - `craft\services\Announcements::push()` no longer accepts callables to be passed to the `$heading` and `$body` arguments. `craft\i18n\Translation::prep()` should be used to prepare the messages to be lazy-translated instead. |
345 | 355 | - `craft\services\AssetIndexer::storeIndexList()` now expects the first argument to be a generator that returns `craft\models\VolumeListing` objects. |
346 | 356 | - `craft\services\Assets::ensureFolderByFullPathAndVolume()` now returns a `craft\models\VolumeFolder` object rather than a folder ID. |
| 357 | +- `craft\services\Assets::ensureTopFolder()` now returns a `craft\models\VolumeFolder` object rather than a folder ID. |
347 | 358 | - `craft\services\Assets::EVENT_GET_ASSET_THUMB_URL` has been renamed to `EVENT_DEFINE_THUMB_URL`. |
348 | 359 | - `craft\services\Assets::EVENT_GET_ASSET_URL` has been renamed to `EVENT_DEFINE_ASSET_URL`. |
349 | 360 | - `craft\services\Assets::EVENT_GET_THUMB_PATH` has been renamed to `EVENT_DEFINE_THUMB_PATH`. |
350 | | -- `craft\services\Assets::ensureTopFolder()` now returns a `craft\models\VolumeFolder` object rather than a folder ID. |
351 | 361 | - `craft\services\Plugins::doesPluginRequireDatabaseUpdate()` has been renamed to `isPluginUpdatePending()`. |
352 | 362 | - `craft\services\Updates::getIsCraftDbMigrationNeeded()` has been renamed to `getIsCraftUpdatePending()`. |
353 | 363 | - `craft\services\Updates::getIsPluginDbUpdateNeeded()` has been renamed to `getIsPluginUpdatePending()`. |
|
0 commit comments