andrewandante/silverstripe-async-publisher

An asynchronous publishing hook for large datasets.

Installs: 141

Dependents: 0

Suggesters: 0

Security: 0

Stars: 2

Watchers: 4

Forks: 2

Open Issues: 0

Type:silverstripe-vendormodule

v1.1.0 2022-07-29 11:37 UTC

This package is auto-updated.

Last update: 2024-03-29 04:39:18 UTC


README

CircleCI

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

CMS Actions

Pending Jobs Warning

TODOS

  • test better with Unpublish and Archive
  • make it more configurable/extensible in general

Maintainers