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!