|
1 | 1 | # Change Log |
2 | 2 |
|
3 | | -## v4.0.23-Alpha |
| 3 | +## v4.1.0 |
| 4 | +- Switch from pagination "plugin" to "widget" for Tablesorter. Allows us to update to the latest version of TS (fix #688, #715) |
| 5 | +- Implement `WhoopsRenderer` for pretty debug pages. See (#674) |
| 6 | +- Refactor error handling. Move responsibility for displayErrorDetails to handlers, and factor our ErrorRenderers. Addresses (#702) |
| 7 | +- Move `composer.json` to root directory to allow installing UF via composer create-project |
| 8 | +- Move `sprinkles.json` to app directory to make it easier to find |
| 9 | +- Eliminate the `root` theme Sprinkle. Custom styling for the root user is now handled with some Twig logic in the `admin` Sprinkle (#726) |
| 10 | +- Rename bundle.config.json -> asset-bundles.json (#726) |
| 11 | +- Reorganize assets (#726) |
| 12 | +- Heavily reorganize templates (#726) |
| 13 | +- Move request schema from `schema/` to `schema/requests/` (#726) |
| 14 | +- Factor out "system" classes from core Sprinkle |
| 15 | +- Refactor overall application lifecycle; move main lifecycle into UserFrosting\System\UserFrosting |
| 16 | +- SprinkleManager now better focused on a single responsibility |
| 17 | +- Sprinkle initializer classes now use events to hook into application lifecycle |
| 18 | +- Support for allowing Sprinkles to register middleware (#617) |
| 19 | +- Automatically load Sprinkle service providers (see #636) |
| 20 | +- Get rid of "implicit loading" for core Sprinkle - core is now just an ordinary Sprinkle like any other. |
| 21 | +- The `sprinkles://` stream now represents a virtual filesystem for the root directory of each loaded sprinkle, rather than the `sprinkles/` directory itself. |
| 22 | +- Separate out `localePathBuilder` from the `translator` service. Makes it easier to add/remove paths before actually loading the translations. |
| 23 | +- Only present locale options with non-null names. |
| 24 | +- Rebased ufTable and ufModal with new jQuery plugin template. (part of #646) |
| 25 | +- Removed the search bar from the Dashboard layout |
| 26 | +- Added Tablesorter pagination translation |
| 27 | +- New Translator Facade |
| 28 | +- New CLI tool (Bakery). |
| 29 | +- New migration system based on bakery CLI |
| 30 | +- Listable sprunjing |
| 31 | +- Refactor groups and user routes (Fix #721) |
| 32 | +- Added the `config` alert stream to save ufAlerts to the cache instead of sessions. Fix #633. The old `session` is still the default alertStream in 4.1. |
| 33 | +- Added support for the Redis cache driver and refactored the cache config values. |
| 34 | +- Added user and session cache. |
| 35 | +- Common log file for db queries, auth checks, smtp, errors, and debug messages (#709). |
| 36 | +- Use YAML as default format for request schema (#690) |
| 37 | + |
| 38 | +See [http://learn.userfrosting.com/upgrading/40-to-41](Upgrading 4.0.x to 4.1.x documentation) for complete list of changes and breaking changes. |
4 | 39 |
|
| 40 | +## v4.0.23-Alpha |
5 | 41 | - Set module dependency versions to ~4.0.0 instead of ^4.0.0 (since 4.1.x will introduce breaking changes) |
6 | 42 | - Fix bug in ufCollection |
7 | 43 |
|
|
29 | 65 | - New custom relationships 'BelongsToManyThrough', 'BelongsToManyUnique', 'BelongsToManyConstrained', 'HasManySyncable', 'MorphManySyncable' |
30 | 66 | - Change implementation of User::permissions() to use BelongsToManyThrough |
31 | 67 | - New ufForm options: setting reqParams, encType, submittingText |
32 | | -- ufCollection now triggers a check for virgin rows when _any_ control is touched |
| 68 | +- ufCollection now triggers a check for virgin rows when _any_ control is touched |
33 | 69 | - Fix issue with Sprunje when generating CSV with empty child collections (#697) |
34 | 70 | - Authorizer now correctly interprets string literals (#482) |
35 | 71 | - Authorizer now correctly interprets numeric types in access conditions. **Caution**: this causes the `equals()` callback to return true in situations where it would have (incorrectly) returned false before. For example, `equals(self.group_id,2)` would have returned false for users in group 2, because it was interpreting `2` as a string and then performing its strict comparison. It now (correctly) returns true. Notice that `equals(self.group_id,'2')`, on the other hand, will now return `false`. |
|
0 commit comments