andrewandante / silverstripe-async-publisher
An asynchronous publishing hook for large datasets.
Installs: 188
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 4
Forks: 3
Open Issues: 0
Type:silverstripe-vendormodule
Requires
- php: ^8
- silverstripe/cms: ^4.11
- silverstripe/versioned: ^1.11
- symbiote/silverstripe-queuedjobs: ^4.10
Requires (Dev)
- phpunit/phpunit: ^9.5
- slevomat/coding-standard: 8.1
- squizlabs/php_codesniffer: ^3.5
README
Pushes writing and publishing to a Queued Job to avoid in-browser timeouts
Installation
composer require andrewandante/silverstripe-async-publisher
Once the module is installed, simply apply AndrewAndante\SilverStripe\AsyncPublisher\Extension\AsyncPublisherExtension
to any classes that you wish to enable Queued Publishing for:
--- name: async-publisher-config --- My\SuperSlow\Page: extensions: - AndrewAndante\SilverStripe\AsyncPublisher\Extension\AsyncPublisherExtension
This will apply it by default to all instances of that class. You can make this a little more configurable
using the shouldPreferAsync()
method in an extension; for example, you might attach the below to UserDefinedForm
:
<?php namespace My\App\Extensions; use SilverStripe\Core\Extension; class ShouldPreferAsyncExtension extends Extension { public function shouldPreferAsync() { return $this->owner->Fields()->count() >= 20; } }
Which will default to Queueing if there are 20 or more fields on the User Defined form, but otherwise simply add the queueing actions to the "more options" menu
Features
- replaces the "Save" and "Publish" buttons with "Queue Save" and "Queue Publish"
- adds "Save immediately" and "Publish immediately" to the "More Options" menu (in case of emergency)
- prevents editing while jobs are in the queue to prevent weird race conditions
Screenshots
TODOS
- test better with Unpublish and Archive
- make it more configurable/extensible in general
Maintainers
- Andrew Paxley andrew.paxley@silverstripe.com