PHPackages                             fullscreeninteractive/silverstripe-queuedjob-progressfield - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Queues &amp; Workers](/categories/queues)
4. /
5. fullscreeninteractive/silverstripe-queuedjob-progressfield

ActiveSilverstripe-vendormodule[Queues &amp; Workers](/categories/queues)

fullscreeninteractive/silverstripe-queuedjob-progressfield
==========================================================

Displays a user friendly form field for the progress of a QueuedJob

1.2.1(4y ago)63.8k↓33.3%[1 issues](https://github.com/fullscreeninteractive/silverstripe-queuedjob-progressfield/issues)[10 PRs](https://github.com/fullscreeninteractive/silverstripe-queuedjob-progressfield/pulls)BSD-3-ClauseJavaScript

Since Nov 6Pushed 3y ago1 watchersCompare

[ Source](https://github.com/fullscreeninteractive/silverstripe-queuedjob-progressfield)[ Packagist](https://packagist.org/packages/fullscreeninteractive/silverstripe-queuedjob-progressfield)[ RSS](/packages/fullscreeninteractive-silverstripe-queuedjob-progressfield/feed)WikiDiscussions main Synced 2mo ago

READMEChangelog (3)Dependencies (3)Versions (15)Used By (0)

SilverStripe QueuedJob Progress Field
=====================================

[](#silverstripe-queuedjob-progress-field)

A progress bar and screen for monitoring a SilverStripe [Scheduled Job](https://github.com/symbiote/silverstripe-queuedjobs).

[![Build Status](https://camo.githubusercontent.com/c7533628da350b63c1e562ba26bdfd5ae0746cebdd02cee23633fec19be75cf1/68747470733a2f2f7472617669732d63692e6f72672f66756c6c73637265656e696e7465726163746976652f73696c7665727374726970652d7175657565646a6f622d70726f67726573736669656c642e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/fullscreeninteractive/silverstripe-queuedjob-progressfield)[![Version](https://camo.githubusercontent.com/e882361a4da2e4d232c745e8022af46b067d20642d4c5a9485e5e957ec42cb9d/687474703a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f66756c6c73637265656e696e7465726163746976652f73696c7665727374726970652d7175657565646a6f622d70726f67726573736669656c642e7376673f7374796c653d666c6174)](https://packagist.org/packages/fullscreeninteractive/silverstripe-queuedjob-progressfield)[![License](https://camo.githubusercontent.com/d34298cd85d19a058ad98936d8a60eb37f9bd36bcfbae6dae927e3902e0a7242/687474703a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f66756c6c73637265656e696e7465726163746976652f73696c7665727374726970652d7175657565646a6f622d70726f67726573736669656c642e7376673f7374796c653d666c6174)](LICENCE)

[![demo](demo.gif)](demo.gif)

Installation
------------

[](#installation)

```
composer require fullscreeninteractive/silverstripe-queuedjob-progressfield

```

Usage
-----

[](#usage)

The QueuedJobProgressField can be included in any `Form`

```
use FullscreenInteractive\QueuedJobProgressField\QueuedJobProgressField;

$fields = [
    // ...
    QueuedJobProgressField::create('ScheduledJob', '', $this->ScheduledJobID)
];
```

This module also provides a `Controller` subclass which displays the state of the job if needed. Setup a route to point to the `QueuedJobProgressController`

```
SilverStripe\Control\Director:
  rules:
    'upload//$Action/$ID': 'FullscreenInteractive\QueuedJobProgressField\QueuedJobProgressController'

```

Then you can redirect users to `site.com/upload/progress//`to see the live progress of the job.

[![demo-web](demo-web.png)](demo-web.png)

User Experience Tips
--------------------

[](#user-experience-tips)

### Overriding Redirection Location

[](#overriding-redirection-location)

Redirecting users to `site.com/upload/progress//` displays a running status of the job. If the job successes, a *Continue* button for users is activated. By default the continue button will redirect the user back, this behaviour can be overriden by using a `ContinueLink` query param on the original link.

```
site.com/upload/progress//?ContinueLink=/thanks/

```

Likewise, you can set a different link for the button if the job fails, stalls or some other error occurs.

```
site.com/upload/progress//?FailureLink=/error/

```

Long Running Single Progress Jobs
---------------------------------

[](#long-running-single-progress-jobs)

Due to the design of queued jobs, the progress indicator (currentStep) is only modified in the database at the end of a `process` call. Sometimes with long running single process jobs we need to display progress more verbosely. `QueuedJobProgressService` is designed as a drop-in replacement for `QueuedJobService`. The service allows your job to update the job descriptor more frequently.

Example Job

```
use Symbiote\QueuedJobs\DataObjects\QueuedJobDescriptor;
use Symbiote\QueuedJobs\Services\AbstractQueuedJob;
use FullscreenInteractive\QueuedJobProgressField\QueuedJobProgressService;
use SilverStripe\Core\Injector\Injector;

class MyAwesomeJob extends AbstractQueuedJob
{
    protected $descriptor;

    /**
     * By default the job descriptor is only ever updated when process() is
     * finished, so for long running single tasks the user see's no process.
     *
     * This method manually updates the count values on the QueuedJobDescriptor
     */
    public function updateJobDescriptor()
    {
        if (!$this->descriptor && $this->jobDescriptorId) {
            $this->descriptor = QueuedJobDescriptor::get()->byId($this->jobDescriptorId);
        }

        // rate limit the updater to only 1 query every sec, our front end only
        // updates every 1s as well.
        if ($this->descriptor && (!$this->lastUpdatedDescriptor || $this->lastUpdatedDescriptor < (strtotime('-1 SECOND')))) {
            Injector::inst()->get(QueuedJobProgressService::class)
                ->copyJobToDescriptor($this, $this->descriptor);

            $this->lastUpdatedDescriptor = time();
        }
    }

    public function process()
    {
        $tasks = [
            // ..
        ];

        foreach ($tasks as $task) {
            $this->currentStep++;

            // sends feedback to the database in the middle of process() allowing
            // long single processes to continue.
            $this->updateJobDescriptor();
        }

        $this->isComplete = true;
    }
}

```

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance17

Infrequent updates — may be unmaintained

Popularity23

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor1

Top contributor holds 91.7% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~310 days

Total

4

Last Release

1811d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/101629?v=4)[Will Rossiter](/maintainers/wilr)[@wilr](https://github.com/wilr)

---

Top Contributors

[![wilr](https://avatars.githubusercontent.com/u/101629?v=4)](https://github.com/wilr "wilr (22 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")

---

Tags

silverstripequeuedjobs

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/fullscreeninteractive-silverstripe-queuedjob-progressfield/health.svg)

```
[![Health](https://phpackages.com/badges/fullscreeninteractive-silverstripe-queuedjob-progressfield/health.svg)](https://phpackages.com/packages/fullscreeninteractive-silverstripe-queuedjob-progressfield)
```

###  Alternatives

[symbiote/silverstripe-queuedjobs

A framework for defining and running background jobs in a queued manner

56854.2k83](/packages/symbiote-silverstripe-queuedjobs)[silverstripe/gridfieldqueuedexport

Export large data sets from your GridField in the SilverStripe CMS interface through async jobs

10213.1k5](/packages/silverstripe-gridfieldqueuedexport)[silverstripe/staticpublishqueue

Static publishing queue to create static versions of pages for enhanced performance and security

45135.4k4](/packages/silverstripe-staticpublishqueue)[heyday/silverstripe-elastica

Provides Elastic Search integration for SilverStripe DataObjects using Elastica

1136.8k2](/packages/heyday-silverstripe-elastica)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
