Releases: wintercms/winter
Releases · wintercms/winter
v1.0.466
UX/UI Improvements
- Improved the disabled styling of the
markdown
,richeditor
,mediafinder
, &colorpicker
FormWidgets. - Fixed long standing issue where on initial page load the backend nav bar would be an incorrect width until the JS loaded to correct it by switching to a flex layout for the backend nav bar.
- Improved UX when an AJAX request is made while the application is in hard maintenance mode (
php artisan down
). - Added three preset buttons (Default, Full, & Minimal) to the backend richeditor toolbar settings to simplify the experience of selecting a custom richeditor toolbar.
- Form tabs in the backend are now tracked in the URL bar by default making linking to specific tabs easier and retaining the place of the currently active tab across page reloads. Disable this behaviour by setting
linkable: false
on the form tab configuration. - Added button on backend user record pages that allows admins to unsuspend a user account that has been locked out due to failed login throttling.
- Added new
plugin:rollback Author.Plugin 1.2.3
command to rollback a specified plugin all the way to before it was installed or to the provided version. - Added new
create:reportwidget Author.Plugin ReportWidgetName
command to scaffold ReportWidget creation. - Added button on the Updates page in the backend to take users directly to the Install Themes page.
- Update management page & dashboard status widget now list plugins that are missing their dependencies and what dependencies are missing specifically.
API Changes
- Menu items controlled by
NavigationManager
are now objects, and$manager->getMainMenuItem($owner, $code)
has been added to make it easier to manipulate existing menu items without having to deregister and reregister menu items to apply changes. - The
postbackHandler
property for DataTable form widgets now defaults tonull
- the widget will interpret anull
value as to detect the save handler for the form that contains the widget (this is usuallyonSave
, the old default value, but it will now detect other handlers such as those used by the relation controller). - The
getParameter
method inCms\Classes\Router
is now correctly type-hinted. - External parameters may now use dot notation to get a deeper-nested value when used for component parameters in a CMS object.
- Added
auth.throttle.*
configuration options to configure the login throttling for the backend. - Added
formGetRedirectUrl($context, $model)
method to theFormController
behavior, overrideable by the implementing controller. Used to get the redirect URL for a given context & model if a redirect is requested. - If uploaded files are missing an extension Winter will now try to automatically determine one based on the MIME type of the file.
- Added support for the
attributes
property on thecolorpicker
,codeeditor
,markdown
,richeditor
,mediafinder
, &fileupload
FormWidgets. - Added support for the
placeholder
attribute on thepassword
field type. - Added support for defining custom values for the
title
andtoolbarButtons
labels of the RelationController behavior. - Added support for a
badge
property on main & side menu items in the backend to display string values as the menu item badge instead of the only numeric values already supported by thecounter
property. - Added a unique HTML id attribute to the Filter widget popups for targeting individual filter scopes in CSS.
- Added
usingSource($source, $closure)
method to theCms\Classes\AutoDatasource
to force theAutoDatasource
to only use the specified source for that closure. - Media items now only return an absolute URL if either
cms.linkPolicy
is set toforce
or thepath
property of the media storage disk starts with an absolute URL. This limits the breaking change from Build 1.0.444 to only installations using aforce
link policy. - Implemented the new
Backend\Traits\UploadableWidget
trait intended for Widgets that need to handle uploading files to the Media Library. - Added support for "soft" or "optional" components, a way for themes to include components only if they're present without breaking the theme if the relevant plugin is not installed and / or enabled. To make a component "soft" or "optional", prefix its name with
@
. Example:[@staticPage]
- Added support for
ignoreTimezone
todate
anddaterange
filter scope types. - Changed optional .htaccess line forcing HTTPS to default to returning a 301 response instead of 302.
- Added ability to translate List column default values
- Added ability to specify the filename of files uploaded directly via the AJAX framework and
Blob
objects. - Added new
data-browser-validate
option to trigger browser-based client side validation on AJAX requests within<form>
elements. - Plugins & themes included as git submodules are now properly detected as valid git sources in the
winter:util git pull
command. PluginManager->findMissingDependencies()
now returns an array of arrays of missing plugin codes keyed by the plugin code that requires the missing plugins.- Added support for the
trigger
field property in the FieldParser. - Finished the implementation of the
(array) $cssClasses
property on the Filter widget. - Inspector dropdown properties now refresh dependent fields if the values are loaded remotely through the API (ie. through a
getOptions
method). - Inspector dropdown properties now support the
emptyOption
option as a synonym forplaceholder
, to show a value if no dropdown option is selected.
Bug Fixes
- Fixed an issue where data in a DataTable widget inside a relation model popup form would not be saved on submit.
- Record Finder widgets will now correctly save and load a record when using a column other than ID in the
keyFrom
configuration value, when the widget is not in relation mode. - Fixed issue where custom validation rule strings starting with
unique
would not register correctly. - Fixed
propertyExists()
method to correctly detect properties added throughaddDynamicProperty()
. - Fixed
options
support forcheckboxlist
andballoon-selector
field types in the Syntax Parser - Fixed issues with properly quoting values when running
winter:env
- Fixed issue where Excel wouldn't properly detect the encoding of CSV files exported using the
useList
option - Asset files uploaded in the CMS will now take their default permissions from the value set in the configuration.
- Repeaters will now trigger
change.oc.formwidget
when adding or removing items. - Fixed issue where the richeditor toolbar popups were z-index clashing with other form elements.
- Fixed issue where mail layouts that didn't exist in the database but did exist in the filesystem weren't being loaded correctly.
- Fixed issue where some browsers would incorrectly check off list checkboxes after a page reload through the autocomplete functionality which would cause visual & behavioural inconsistencies.
- Fixed support for importing CSV files with encodings not supported by
mb_convert_encoding()
by usingiconv()
as a fallback. - Fixed issue where translations for related models managed by the
RelationController
behavior would not save when creating the related model, or updating a pivot model. - Fixed issue where model scopes applied by the
relation
FormWidget didn't support joins being used. - Fixed issue where
php artisan theme:sync --target=database
wouldn't properly sync to the specified target. - Improved the flexibility of the PluginManager in accepting plugin identifiers that are not perfectly matched to the desired plugin's casing (i.e.
Rainlab.Blog
would be considered an invalid plugin identifier prior to this change, it is now correctly identified as belonging toRainLab.Blog
). - Fixed issue where pivot records being created or updated through the
RelationController
would not trigger the form field change events. - Update manager now respects the values of
cms.pluginsPathLocal
andcms.themesPathLocal
when installing new plugins & themes. - Improved support for opcache when
opcache.restrict_api
is in effect. - Fixed issue where
Lang::choice
method would not use the plural form for a locale with a sublocale (ie. "English (United Kingdom)" /en-uk
). - Fixed issue where
theme:install
Artisan command would throw an exception if the database templates feature was enabled. - Fixed issue where using the search query input in a filter for a relation list modal would throw a "not bound to controller" exception, due to the request not being tied to the relation list modal.
- Fixed weird outline styling around
:focus
ed elements introduced in Build 1.0.465 - Fixed bug that prevented the
Purgeable
database model behavior from being used with theSimpleTree
&NestedTree
traits. - Fixed error that would occur when using the
Revisionable
model trait with a date value that was null. - Fixed long standing problem where if a user attempts to use the list search feature on a list that has improperly configured (i.e.
searchable: true
set on a column that doesn't support DB searching) then that list would remain broken for the rest of the session's lifetime. - Fixed issue where model slugs weren't generated before model validation ran, meaning that autogenerated slugs would not be considered present when attempting to validate a slug attribute as required.
- Fixed issue where creating records with the TagList would require the nameFrom attribute to be marked as fillable for mass assignment.
- Fixed issue where having a filter config with no scopes defined would cause issues with the ListController behavior.
- Fixed typos referencing the Halcyon library
- Fixed IE11 support for deregistering service workers in the backend
- Fixed issue where if a template was manually removed from
cms_theme_templates
when usingdatabaseTemplates
would cause an exceptio...
v1.0.465
UX/UI Improvements
- The Event Log list now shows the entire first line of a logged error message, up to 500 characters maximum, in order to provide more context of errors in the list.
- When searching for plugins to install in the backend plugin management screen author names are now included in the search results.
- A consistent cross browser focus ring style is now utilized in the backend.
- Fixed a small typo when using number range filters with no value provided for the minimum.
- Removed excess space from tab titles when hovering over them.
- Added styling to distinguish a disabled unchecked checkbox from a enabled unchecked checkbox.
- Added ability to middle mouse click on list rows to open them in a new tab.
- Added new
style
attribute for repeater widgets, which controls repeater item behaviour. Allows items to be expanded or collapsed on load, or allows a repeater to act as an "accordion" widget. - If a lazily loaded tab is the first tab or only tab displayed it will now be automatically loaded on page load instead of remaining empty.
API Changes
- Type hint for
registerSchedule
method inPluginBase
updated to correctly hint theIlluminate\Console\Scheduling\Schedule
object that is passed to it. - Added
exception.beforeReport
andexception.report
events cms.backendForceSecure
no longer supports the value ofnull
(where it would be considered the inverse ofapp.debug
) as this resulted in confusion when disabling debug mode while the application was behind a proxy causing an infinite loop. Ultimately it's the server's responsibility to handle forcing HTTPS.- User preferences for list widgets are now ignored if the list widget has disabled the setup modal via
showSetup
beingfalse
. - Return type hint documentation for
PluginBase::boot
method changed fromarray
tovoid
. - Re-added the
db:seed
artisan command
Bug Fixes
- Fixed issue with the
queueOn
andlaterOn
methods of theMail
facade throwing an invalid argument exception due to queue name string being defined where the queue manager is meant to be defined. The queue name is now injected into theMailable
object that is created, and the default queue manager is used instead. - Implemented another fix for the temporary monkey patched LESS compilation to support PHP 7.4 until the Laravel 6 upgrade is completed.
- Fixed a bug where attempting to set a simple value on a BelongsToMany relationship as a collection would produce a collection wrapped in an array instead of an array of values which would confuse the
sync()
command. - Fixed an issue with composer.json which could cause some installations to load a version of Laravel newer than actually supported.
- Fixed issue where un-elevated plugins weren't being loaded on any routes starting with /combine (should have been /combine/)
- Fixed a change in default behavior where a recent update to Dropzone.js (used for uploading files) added a timeout property that defaults to 30 seconds. Timeout has been set to 0 (infinite) to retain the previous behaviour of no timeout utilized on file uploads.
- Fixed a bug where reloading a Lists widget with a custom search term applied would reset the pagination.
- Improved error handling on invalid model attributes being used for form fields.
- Improved preview mode support for
type: number
fields with0
as their value.
Security Improvements
- Improved escaping of option values provided to the dropdown field type
Translation Improvements
- Improved Slovakian translation.
- Improved French translation.
- Improved Dutch translation.
- Minor cleanup to English translation.
v1.0.464
Bug Fixes:
- Fixed the
trans()
helper function to match the updated signature required by the Translator.
v1.0.463
UX/UI Improvements:
- Fixed display of checkbox lists when quickselect is selected.
- Added new
winter:passwd
Artisan command to change the password of a Backend user through the command-line. - Secondary branding colour is now applied to the active media filter in the MediaManager widget
- Lists can now disable the click event by applying the
nolink
CSS class to table row (TR) elements in addition to table data elements (TD) elements.
API Changes:
System\Classes\PluginManager->sortByDependencies()
is now deprecated as plugins are now sorted by key & dependencies by default.- Changed the
Winter\Rain\Database\Builder->simplePaginate()
signature to matchpaginate()
($perPage, $currentPage, $columns, $pageName
) - Added
engine => InnoDB
to the defaultmysql
database driver configuration - Added support for
varcharmax
to themysql
database driver configuration to specify the default length used for varchar / string columns when running migrations. If usingutf8mb4
on MySQL < 5.7 or MariaDB < 10.2 this should be set to 191, newer versions can be safely set to 255 however. - Translator
trans
andtransChoice
method arguments have changed to match the Laravel 5.5 base package.
Bug Fixes:
- Fixed the LESS compiler using PHP 7.4 that was previously throwing an error.
- Added support for tab lazy loading to all forms of tabs, not just primary tabs.
- Fixed hard coded Form widget alias in the recently added tab lazy-loading functionality.
- Fixed support for Laravel's Builder::paginate() signature
paginate($perPage, $columns, $pageName, $currentPage)
in addition to Winter'spaginate($perPage, $currentPage, $columns, $pageName)
. Additionally fixed support for Laravel'ssimplePaginate()
signature. - Fixed issue where errors thrown during the page processing of the RelationController would be silently consumed without being reported to the user.
- Fixed issue where popups can still be interacted with when they are in a loading state using
data-popup-load-indicator
.
Dependencies:
- Updated minimum required PHP version for the installer to match Build 1.0.472's minimum of 7.0.8
v1.0.462
UX/UI Improvements:
- Documented
session.http_only
config property in the defaultconfig/session.php
API Changes:
- Event logs are now double-encoded for HTML characters before being displayed as both HTML and text in the event log viewer. This allows encoded HTML entities to be parsed and displayed correctly in the HTML view, but displayed exactly as entered in the text view.
Bug Fixes:
- Fixed janky behaviour with the javascript sortable plugin when sorting items on a scrollable container (affected RainLab.Sitemap, RainLab.Pages, Menus, etc).
- Fixed issue where linked data in singular relation controller (hasOne or belongsTo) would remain populated in the relation fields even after unlinking or deleting the linked record.
Dependencies
- Changed Laravel dependency to require 5.5.40 as a minimum due to the breaking change Laravel made in that version, some composer installs were not recognizing anything newer than 5.5.38 so this bump makes it more obvious that a stale composer is the issue.
v1.0.461
UX/UI Improvements:
- Set the CMS
codeeditor
field to readonly and added a warning message above it when safemode is enabled.
API Changes:
- Bumped minimum required version of PHP from 7.0 to 7.0.8 to enable support for PHP 7.4.
- Added support for the
customViewPath
configuration property in the RelationController when rendering lists to be able to override the partials used for rendering theLists
widget. - Using the
ImportExportController
'suseList
property will now pass the list header values through thebackend.list.overrideHeaderValue
event just like a regular list would. - ApplicationException are no longer logged if unhandled (they're meant as more of a validation / sanity check exception. SystemExceptions are logged instead.
- All Artisan commands that are unusable in Winter (typically because they rely on a "Laravel" project structure) are no longer registered and thus no longer made available. Full list of removed commands here: wintercms/library#447
- Added static method
Cms\Helpers\Cms::safeModeEnabled()
to check if safe mode is enabled. - Add support for lazy loading backend form tabs with the
lazy
configuration property that takes an array of tab names to apply lazy loading to.
Bug Fixes:
- Fixed scrolling issue in the MediaManager that would occur on some browsers causing scrolled content to no longer become visible erratically.
- Added smoother support for old serialized cookie data to retain sessions during the upgrade process.
- Fixed issue where similarly-named repeaters in a CMS page or layout would conflict when checking for AJAX actions on a child repeater.
Translation Improvements:
- Added Slovenian translation
Community Improvements:
- Switched to using Discord instead of Slack: https://discord.gg/D5MFSPH6Ux
- Launched Premium Support: https://wintercms.com/premium-support
Dependencies
- Minimum PHP version bumped from 7.0.0 to 7.0.8
- Support for PHP 7.4 added
v1.0.460
UX/UI Improvements:
- Moved CodeEditor's full screen buttons to the bottom of the widget.
- Fixed keyboard support for checkboxes
- Added keyboard support to lists
- Improved the UX of checkbox lists "Select All", "Select None" bulk actions
- Changed the cursor to be a
grab
cursor when hovering over table headers to indicate that they are a scrollable container - Made the record "Delete" button consistent across the core backend controllers by replacing User Roles & User Groups delete buttons with the standard trash can icon button
- Fixed issue where form tabs would initially be unstyled until the JS had loaded and initialized them
- Added support for making radio fields display inline by adding
cssClass: 'inline-options'
to their properties - Added auto detection of the field
required
property for fields that haverequired_if
model validation rules
API Changes:
- Cookies are no longer serialized. This brings the behavior back in line with Laravel's default behavior as of the 5.5.42 update. IMPORTANT: If you are passing non-scalar values to
Cookie::set()
(i.e. objects & arrays) then you will need to change your code so that those values are JSON encoded / decoded before and after being stored in the cookie. - Added new
System\Traits\ResponseMaker
trait to the baseBackend\Classes\Controller
class (and theCms\Classes\Controller
controller). Adds the following methods:setStatusCode($code)
,getStatusCode()
,setResponse($response)
,setResponseHeader($key, $values, $replace = true)
,setResponseCookie($cookie)
,getResponseHeaders()
, andmakeResponse($contents)
. media.file.upload
event now passes the$path
argument by reference.- Added ability to specify a LESS file to be used as a default backend brand CSS override with the config item
brand.customLessPath
- Updated references to deprecated
event.which
and other methods of determining the selected keys to the newevent.key
- Added new method
removePermission($owner, $code)
to the BackendAuth manager class to enable plugins to dynamically remove permissions from the available list registered with the BackendAuth manager class. - Added support for SparkPost mail driver
- Added support for a string option to be provided to
Winter\Rain\Network\Http->setOption($option, $value)
as long as it corresponds to a validCURLOPT_
constant - Added
getConfig($value, $default = null)
method to theBackend\Classes\ListColumn
class to mirror what's available on theBackend\Classes\FormField
class - Added
order
option to therelation
FormWidget to allow relation options to be ordered by a custom order statement. - Added
email
field type (type: email
) - Documented newly available
services.mailgun.endpoint
config item inconfig/services.php
- Replaced existing handling of disabling CloudFlare's rocket loader on backend scripts by adding a new event (
system.assets.beforeAddAsset
) that is listened to by theHeathDutton.CloudFlare
plugin. Recommend any CloudFlare users using Rocket Loader to use that plugin going forward - Added support for
permissions
property on form fields, list columns, and list filter scopes. Property supports either a single string or an array of permissions that the current backend user must have access to at least one of in order to access the field / column / filter scope. - Added support for
mode: switch
to theBackend\FormWidgets\PermissionEditor
FormWidget that defines permissions as either expliclity allowed (1) or denied (-1). - Added support for
availablePermissions
property to theBackend\FormWidgets\PermissionEditor
FormWidget that accepts an array of permission codes to filter the list of permission codes to be managed by that widget instance down to. - Added
clear-full
,clear-left
, andclear-right
CSS classes that can be used to apply clearfixes to form fields by adding them to the field'scssClass
property - Added support for the
CURLOPT_POSTFIELDS
cURL option to be manually overriden when using theWinter\Rain\Network\Http
wrapper. - Added support for
dependsOn
to filter scopes oftype: group
. All current filter scopes (including their current values) will be passed to the options method as an array of scope objects to be used in redetermining the available options to provide when the scopes that are targeted withdependsOn
are updated. - Added support for unregistered translation strings to still have the replacement engine run on them
- Added support for minimum or maximum values in number range filter to be left unspecified - this is treated as an "at least" minimum value or "at most" maximum value filter.
- Added
getSortColumn()
andgetSortDirection()
public methods to theLists
widget. - Added two more valid characters to filenames managed by the MediaLibrary,
'
and&
. - Added
parseClean()
method toWinter\Rain\Parse\Markdown
that enables safe mode on the markdown parser used.
Bug Fixes:
- Reverted improvements to table column width handling on Chrome (specifically for long unbroken text values in columns) introduced in Build 1.0.444 as it was causing other issues on mobile.
- Reduced inconsistencies with results generated by
\Winter\Rain\Database\Attach\Resizer
class, specifically for .gif images by processing .gif images withimagescale()
instead ofimagecopyresampled()
- Fixed an issue where attempting to modify the available Settings Items through the
SettingsManager
could fail if a user wasn't provided tofilterItemPermissions()
at that point in the request - Removed caching of Theme configuration, this is now handled by
YAML::parseFile()
caching which simplifies the Theme processing code and fixes some bugs related to cache invalidation - Fixed issue with trying to create multiple CMS templates at once
- Fixed issue where the cached classes file would not be removed along with the cached services file when running
php artisan clear-compiled
- Fixed issue with PHP 7.0 compatibility introduced with new
PreferenceMaker
trait in Build 1.0.457 - Fixed issue where message subjects set in Mail callback functions were not available to the system mail layouts because the layouts were generated before the callback was called. Note that this was accomplished by calling the callback before content is added to the message instead of after, so it could be considered a breaking change
- Fixed styling for switch fields that are required
- Fixed bug where '0' was returned as NULL from
$this->param()
but returned as'0'
from{{ this.param.slug }}
- Fixed issue where updating a record through a RelationController would not trigger a change event on the RelationController field like creating a record would by triggering the change event on successful update
- Fixed issue where FormWidgets in Repeaters that made orphaned AJAX requests (AJAX requests fired on an element outside of the repeater's markup structure, ex. from a popup modal instead) were not being initialized which was causing the orphaned requests to fail
- Fixed issue where the
databaseTemplates
feature from Build 1.0.456 wouldn't support templates in subfolders. Nesting limit is still 2 (/template-type/subfolder1/template.htm
) but the issue where it was just 1 whendatabaseTemplates
was enabled has been fixed. - Fixed issue where the
change
event was not triggered on removing a recordfinder's value with the clear button - Improved default email branding styles compatibility with Outlook mail clients by preventing harsh word breaks.
- Fixed issue where the Model class would try to trim an attribute that was a PHP resource (pgsql:bytea) by simplifying the trim detection logic to just use
is_string
instead of checking if value wasn't every other type of variable available. - Fixed issue where an infinite loop could occur when trying to resolve a circular required_with or required_if validation rule chain.
- Fixed issue where having no class lists configured for the RichEditor markup class options would break the RichEditor.
- Fixed issue where the
model.beforeSave
event would be fired twice under some conditions when using a HasOneOrMany relationship. - Fixed PHP fatal error under some cases where
argv
is not available in the server variables. - Fixed issue where the FileUpload FormWidget was checking if the file model was protected before generating the URL to the file even though the File model itself handles that operation since Build 1.0.447.
- Fixed issue where the mediafinder formwidget wouldn't work when the user didn't have access to the Media Manager by switching the formwidget to preview mode under those conditions
- Fixed issue where text in an error message popup could not be selected for copy-pasting.
- Fixed issue with parsing the select2 options format over AJAX requests introduced in Build 1.0.457.
- Fixed conflict between input.trigger.js & filter.js that caused filter popup buttons to disappear when searching for records in a group filter popup.
- Fixed faulty type cast for belongsToMany deferring bindings table when using PostgreSQL
- Fixed support for mobile devices (touch screens) in the jquery.sortable.js plugin
- Fixed issue introduced in Build 1.0.459 where some server configurations could cause the AssetCombiner to stop working
- Fixed issue with number range filter not working with a value of
0
for either the minimum or maximum value. - Fixed issue where attempting to sort by a column that isn't actually supported as a sortable column by the database could cause the session to enter an invalid state where it would be impossible to remove that column sorting preference.
- Fixed issue where changing just the "time" field on a
datepicker
FormWidget wouldn't trigger the JSchange
event on the field. - Fixed issue with the numberrange filter on PostgreSQL when attempting to filter the range by infinity in either direction.
- Fixed issue w...
v1.0.459
UX/UI Improvements:
- The theme Delete button is now hidden for the currently active theme as you cannot delete the active theme anyways.
- Added a warning to the System Status dashboard ReportWidget when debug mode is enabled as debug should never be enabled in production.
- Invalid menu items now throw a ValidationException when debug mode is enabled and log an error instead when debug is disabled.
- Added support for Repeater item titles to be pulled from dropdown field types.
- Added the Validation trait to model stubs when calling
create:model
. - Made the CodeEditor fullscreen button easier to see by increasing the contrast.
API Changes:
- When setting relationship values model mutator methods (
'set' . $attribute . 'Attribute'
) are now taken into account meaning that you can control how specific relationship values are set by defining a custom mutator method for the relationship. - Added
getReportWidgets()
method toBackend\Classes\WidgetManager
to return the protected array of currently registered report widgets - Custom theme data stored in
cms_theme_data
is now removed when the theme it belongs to is deleted. - Added
develop.decompileBackendAssets
configuration flag to decompile the backend assets in order to simplify making changes to backend asset files for the purpose of making PRs to the Winter CMS core. - Switched parsing of stub files for the generator commands to use Twig instead of basic
str_replace()
, this will enable more complex stub files
Bug Fixes:
- Fixed issue where the
TagList
FormWidget inmode: relation
wasn't respecting relationship constraints (conditions
andscope
) set on the relationship definition. - Fixed issue where using the
::class
magic constant in database migrations would cause them to break due to flawed parsing logic. - Fixed use of Storage::url() for local disks that haven't been configured correctly
- Moved the translation for plugin's "By $author" text in the plugin update view to the System module instead of the CMS module to support installations without the CMS module enabled or installed.
- Removed old "Holly Hack" for IE5-IE7 support, we don't support those browsers anymore.
- Fixed Theme importing/exporting that was broken as of 457-458.
- Fixed issue where the session expiring would throw a vague exception when attempting to check the CSRF token instead of just throwing a general CSRF invalid error message.
- Fixed issue where multiple instances of the PermissionEditor could not exist on a single page.
Translation Improvements:
- Improved Arabic translation
Performance Improvements:
- The file extension has been added to the end of asset combiner URLs (ex. /combine/asqw3ljkqw421323.js or /combine/lkj23jlk13j1l.css) in order to allow CDNs to more easily identify the URL as cacheable to improve overall site performance.
Community Improvements:
- Added documentation on keeping local forks of the Winter CMS codebase up to date with upstream.
- Improved the CONTRIBUTING.md guide
- Added security policy
- Added documentation for testing pull requests
Dependencies
- Updated to v1.8.0 of Spectrum.js (Note: Winter was already using 1.8.0, however jQuery API updates were made without the vendor tagging a new release)
v1.0.458
UX/UI Improvements:
- The link to "Access Logs" in the System Dashboard Widget is now hidden when the user doesn't have access to view those logs.
- Reverted 457's improvements for screen reader accessibility and keyboard navigation in the backend as they are not production ready. Will be considered for inclusion in 459.
- Side panel header now styled with brand colors
API Changes:
- Added
cms.runMigrationsOnLogin
configuration item to control whether the UpdateManager automatically runs any pending migrations on login to the backend. The default is nownull
which means that the value is pulled fromapp.debug
; i.e. only enabled when the application is in debug mode. - Field labels are now added as model validation attribute names after the field is checked for inclusion in the current context which solves an issue where multiple fields for the same attribute but under different contexts would conflict with each other.
Bug Fixes:
- Fixed support for tab icons in the Theme customization form
- Fixed support for default values in nestedforms inside of repeaters in an update context
- Fixed bug where a CSRF token mismatch would display an error twice in the CMS section
- Removed support for the Priority Hints API in the
{% framework %}
tags as that broke existing themes that rely on a synchronous load order of the theme scripts - Fixed minor issue where the editable part of the RichEditor FormWidget didn't fully fill the height of the control
- Fixed issue where calling isset() on CMS page codebase object properties wouldn't give the same result as actually accessing them.
- Fixed "widget not bound to controller" error for nested repeaters.
- Improved support for previewMode being passed down to Repeaters and NestedForms
- Fixed an issue where using unsupported database drivers would thrown an incorrect exception
Translation Improvements:
- Added Thai translation
Community Improvements:
- Added documentation for the DataTable FormWidget
- Added an issue template for marketplace issues
v1.0.457
UX/UI Improvements:
- Now utilizing the selected
secondaryColor
brand setting for the border color on selected items in the Treeview control (pages list) - Added support for
cms.databaseTemplates
to thewinter:env
command - Added support for preview mode to the Taglist FormWidget
- Improved the visibility of the code editor buttons in the CMS section by changing their colour to one with more contrast
- Disabled the theme config cache when application is in debug mode
- Improved the styling of the colour picker when
allowEmpty: true
- Improved screen reader accessibility for tabs and improved keyboard navigation in the backend
API Changes:
- The
Winter\Rain\Database\Attach\File
model'sgetPath()
now defines an optional$fileName
parameter, any custom classes that extend this method must have their method signatures updated to match this change. - The
Winter\Rain\Database\Attach\File
model'sgetThumbFilename()
method has been changed fromprotected
topublic
, any custom classes that extend this method must have their method signatures updated to match this change. - The
getDisk()
method has been added to theWinter\Rain\Database\Attach\File
model which enables running all storage related commands on the File's actual storage disk instead of the default storage disk. - Added new
Backend\Traits\PreferenceMaker
trait modelled after theSessionMaker
trait that stores minor user preference changes (such as backend list configurations) in the user's preferences. - Added
cms.enableBackendServiceWorkers
(defaulting to false) to allow the use of Service Workers in the backend. They have been disabled by default for security purposes to prevent any frontend Service Workers from leaking into the backend. - Plugin dependencies defined in the plugin registration class
$require
property are now case insensitive. - Removed support for the invalid
type: relation
column configuration, previously this would warn that is was invalid in the system log and convert totype: text
automatically. Recommended replacement is to use whatever type the data actually is and then use therelation:
property to specify the relationship you want to get the value from. - Added a
is_countable()
polyfill to the library for PHP < 7.3 - Disabled global jQuery AJAX events by default in favour of just the
framework.js
ones. Previously both would fire leading to conflicts between what parameters jQuery sends vs what the AJAX framework. If access to the jQuery AJAX events is required, passajaxGlobal: true
to the options for$.request(handler, options)
or adddata-request-ajax-global
for the Data Attributes AJAX API. - Third parameter
$options
added toZip::make()
that passes the options ontoZip->add()
. In addition, theincludeHidden
option has been added which specifies that all hidden files (dot files) from the source should be included in the final Zip destination. - Added
maxFilesize
option to theFileUpload
FormWidget, defaults to theupload_max_filesize
from the server
Bug Fixes:
- Fixed support for JS plugins extending the RichEditor
- Improved the Halcyon
addDynamicProperty
test - Fixed issue where CMS Meta information wasn't populating correctly (breaking menus in RainLab.Pages)
- Fixed issue where mainMenu counter's being set to
false
didn't properly disable them fully from displaying - Improved reliability of
jsonable
properties in models under conditions where they might be double de/encoded for one reason or another - Fixed broken path to the video thumbnail in the MediaManager widget
- Fixed issue when attempting to interact with CMS assets in the backend caused by the recent addition of the
databaseTemplates
functionality - Fixed long standing issue where loading indicators would remain in a loading state when an error or flash message was returned from a response forcing the user to reload the page to get back to a usable state
- Improved error message displayed when using a custom Halcyon model that does not have a
dirName
set - Fixed issue introduced with 447 when trying to get the thumbnail for private files without specifying any options by using default options when generating thumbnails for private files
- Improved handling for error states in the
RelationController
behavior - Fixed support for
files: true
as an AJAX framework option in newer browsers - Fixed support for saving Repeater data in Static Pages when a repeater item is deleted
- Fixed support for custom Select2 options via the AJAX framework, also added new format for custom options to be returned in to preserve their order
- Fixed issue where CMS templates with the same filenames (i.e. a partial and a page both called contact.htm) would be unable to be selected in the list of templates in the CMS section.
- Fixed the centering of no record message in lists when tree mode is enabled.
- Stopped minifying CSS rules inside of parenthesis, fixes issue where calc() rules with pixel values were breaking after being run through the asset combiner.
- Fixed support for
ReportWidgets
using theobjectList
property type for their properties. - Fixed support for
Auth::id()
, there was a typo in the method that rendered it unusable previously. - Fixed bug when attempting to sort by the
any_template
(Template) column in the CMS Theme Log. To sort by template, change the list setup to show the "Old Template" and "New Template" columns and sort by those instead. - Fixed inspector option values not being translated.
- Fixed
DataFeed
support for Postgres - Fixed minor issues with poorly structured HTML from the
dump()
Twig function
Security Improvements
- Backend ServiceWorkers have been disabled by default to prevent frontend ones from leaking into the backend unintentionally. See
cms.enableBackendServiceWorkers
Translation Improvements:
- Improved the Brazilian Portuguese translation
- Improved the Chinese translation
- Improved the Spanish translation
- Improved the Russian translation
Performance Improvements:
- When using Cloud storage drivers (ex. AWS or Rackspace) for
File
s that are marked as protected, theBackend\Controllers\Files
controller'sgetDownloadUrl()
andgetThumbUrl()
methods now return temporary URLs to the actual asset instead of a URL that proxies the entire asset through the framework to the browser. The amount of time the temporary URL is valid for is configurable by settingcms.storage.uploads.temporaryUrlTTL
to a value in seconds (default 3600, an hour). This should dramatically improve performance of protected files that are located in storage drives that support thegetTemporaryUrl()
method - and it is recommended that if you heavily utilize that feature that you utilize a storage drive that supports that method. - Added support for the Priority Hints API supported in newer browsers for backend core assets and the
{% framework %}
tags
Community Improvements:
- Various improvements (performance and otherwise) made to the TravisCI integration with the main repos to make contributing to PRs a nicer experience
- Various improvements to the automated testsuite (including a new style checker, the existing code base has been cleaned up to conform to the style checker. It may be made more strict in the future, for now all PRs are required to adhere to it)
- Added documentation for the
theme:sync
command and for the--relative
option for thewinter:mirror
command
Dependencies
- Added inline_style and inline_class Froala plugins into the base Froala build
- Added polyfill for
:focus-visible
CSS selector to the backend (https://github.com/WICG/focus-visible) - Added polyfill for
event.key
in JS events to the backend (https://github.com/cvan/keyboardevent-key-polyfill)