The Winter CMS maintainers are pleased to announce that Winter CMS v1.2.1 is now available. You may upgrade to this version automatically by running a Composer update in your Winter CMS install directory through composer update
.
The main focus of this release was improving support for more complex hosting solutions such as Laravel Vapor or Amazon Web Services that use ephemeral microservices, proxying and cloud storage, meaning less configuration and customisation in order to run Winter CMS on SaaS platforms. In addition, we refined our API to follow Laravel 9 more closely and fixed several bugs that had been reported from the v1.2.0 release.
stream_uploads
option on the disk configuration. Requires the Winter.DriverAWS plugin.data-request-parent
attribute to the AJAX framework, allowing AJAX requests to include the data from the elements that spawned them which allows for highly complex workflows where popups spawn popups and then those popups need to call their own AJAX handlers but the page previously didn't know to initialize them without their parent data being present. This fixes support of the RecordFinder inside of popups like the RelationController's update & pivot forms as well as the FileUpload's description form popup inside of other popups.winter:up
/ migrate
commands to use the new Laravel CLI components for improved output formatting.type: range
Form fields.conditions
property on List Columns with a relationship defined via the relation
property.package.json
unnecessarily.switch
field will now toggle the switch.winter:install
command output and can be changed through the wizard.app.tempPath
configuration option.winter:password
as an alias for winter:passwd
.maxlength
of 255 from type: text
Form fields.twig.environment.cms
Twig environment is no longer provided as a singleton, instead being generated on each request to App::make()
. This helps to avoid conflicts when calling the CMS controller multiple times in the same request.Winter\Storm\Database\Behaviors\Purgeable
behavior as the Purgeable
trait is now included by default on all Winter models.backend.formwidgets.fileupload.onUpload
event to allow for custom handling of file uploads in the FileUpload FormWidget.backend.widgets.uploadable.onUpload
event to allow for custom handling of file uploads in the widgets that implement the Backend\Traits\UploadableWidget
trait.formwidgets.fileupload.initUploader
Snowboard global JS event to allow for interacting with the FileUpload's JS uploader instance.formwidgets.richeditor.init
Snowboard global JS event to allow for interacting with the RichEditor's JS editor instance.widgets.mediamanager.initUploader
Snowboard global JS event to allow for interacting with the MediaManager's JS uploader instance.getRelationModel()
from protected to public on the Backend\Traits\FormModelWidget
trait.getOptionsFromModel()
from protected to public on the Backend\Widgets\Form
widget.Backend\Traits\UploadableWidget
trait to make it easier to customize upload behaviour:
uploadableGetDisk()
uploadableGetUploadPath()
uploadableGetUploadUrl()
model.relation.beforeAdd($relationName, $relatedModel)
model.relation.afterAdd($relationName, $relatedModel)
model.relation.beforeRemove($relationName, $relatedModel)
model.relation.afterRemove($relationName, $relatedModel)
model.relation.beforeAssociate($relationName, $relatedModel)
model.relation.afterAssociate($relationName, $relatedModel)
model.relation.beforeDisassociate($relationName)
model.relation.afterDisassociate($relationName)
mix:run
Artisan command has been added to allow scripts defined in the package.json
file of a Mix package to be run easily through the CLI. You can find the documentation here..
) or an ID hash (#
) to be prefixed to any partials that are to be updated in an AJAX response. This includes any mapped selectors.Winter\Storm\Database\Traits\HasSortableRelations
trait to make it easier to sort related records on a model.**
as a wildcard when setting the application's trusted proxies. This was originally supported in fideloper/trustedProxy
but was removed without explanation in Laravel 5.6. *
will trust the currently requesting IP address, **
will trust all proxies in a chain of proxies (often required if you are behind something like CloudFront and another proxy). This was required for retrieving the correct Client IP address when using Laravel Vapor.addDynamicProperty()
are now automatically added as purgeable attributes to prevent them from being saved to the database.Arr::moveKeyToIndex($array, $targetKey, $index)
helper method to make it easier to move a specific array element to the specified index.Str::unique($str, $items, $separator, $step)
helper method that ensures the provided string will be unique when compared to the provided array by adjusting the string with the separator & step as necessary. Useful for filename deplication or other deduplication of unique references.Str::join($items, $glue, $lastGlue, $dyadicGlue)
helper method to join an array of items with a glue string, optionally using a different glue string for the last item and for the dyadic item case (only two items). By default this applies the "Oxford / Serial Comma" gramatical construct when listing items.fromStorage()
helper method to the Winter\Storm\Database\Attach\File
model class in order to create a new file record from a file path that already exists on the file model's storage disk.Winter\Storm\Console\Traits\HandlesCleanup
trait to the base Winter Command
class that makes it easier to implement cross-platform cleanup logic on your CLI commands when process termination signals are received.mix:compile
. Also added support for the --silent
, --stop-on-error
, and --manifest
flags.winter:test
command now automatically uses the correct bootstrap file for unit testing, irrespective of the bootstrap
configuration in any plugin or module's phpunit.xml
file, to assist users migrating their unit tests to Winter 1.2.Input::all()
facade method, which prevented files from being included in the result, breaking previous behaviour.0
that was left over in numberrange
filter partials.winter:fresh
command where the demo plugin was not removed and an error message was shown.$cacheArray
to false
.fromUrl()
method would not correctly determine the file's mimeType if the file was delivered with a Content-Type
header that was incorrectly capitalized.ClassName@method
syntax for event listeners.attach
method on a BelongsToMany relationship.Winter\Storm\Console\Command
's alert()
method.{% snowboard %}
Twig tag were not taking into account the configured app.asset_url
of the application.codeeditor
and richeditor
fields were not properly triggering change events when their contents were changed.jobs
/ failed_jobs
table structure did not match that of Laravel 9.config/session.php
.Svg
helper class to make it easier to work with SVG files. Currently one method (extract()
) is available which sanitizes and optionally minifies the provided SVG file making it safer to deal with.migrate
to the list of commands that require plugins to have the $elevated
property set in order to run when the command is being run.System\Tests\Bootstrap\PluginTestCase
class has been signficantly refactored to improve testing in plugins. While it is mostly backwards-compatible, the method runPluginRefreshCommand
is now deprecated and will be removed in the Winter CMS 1.3 branch. Please use the instantiatePlugin
method instead if you have overridden the core plugin test case methods.Winter\Storm
library and into it's own standalone Winter\LaravelConfigWriter
library. This was done in order to reuse it in the web installer, but also means that any Laravel application can take advantage of this package.composer.json
. Copy the changes from GitHub in order to apply it to your projects.Sign up to our newsletter and receive updates on Winter releases, new features in the works, plugin and theme promotions and much more!