PHPackages                             silverstripe/cmsworkflow - 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. [Admin Panels](/categories/admin)
4. /
5. silverstripe/cmsworkflow

AbandonedSilverstripe-module[Admin Panels](/categories/admin)

silverstripe/cmsworkflow
========================

Two- and three-step approval workflow for page content in SilverStripe CMS

2522612[12 issues](https://github.com/silverstripe-archive/silverstripe-cmsworkflow/issues)PHP

Since Jun 18Pushed 6y ago9 watchersCompare

[ Source](https://github.com/silverstripe-archive/silverstripe-cmsworkflow)[ Packagist](https://packagist.org/packages/silverstripe/cmsworkflow)[ RSS](/packages/silverstripe-cmsworkflow/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

CMS Workflow Module
===================

[](#cms-workflow-module)

**Please note: this module is no longer actively maintained.**

Requirements
------------

[](#requirements)

- SilverStripe 2.4 or newer
- `legacydatetimefields` module (see )

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

[](#installation)

You need to choose an 'approval path'. This details the actual process a request goes through before it gets published to the live site.

There are two approval paths supplied: "Two Step" and "Three Step".

### Two Step

[](#two-step)

Author submits a request. Publisher approves it change is pushed live immediately.

This workflow is automatically set up for you and doesn't need any configuration.

### Three Step

[](#three-step)

Author submits a request. Approver approves it. Publisher publishes it at a later date.

Attach the following decorators in your `mysite/_config.php`:

```
// remove two-step decorators
Object::remove_extension('WorkflowRequest', 'WorkflowTwoStepRequest');
Object::remove_extension('SiteTree', 'SiteTreeCMSTwoStepWorkflow');
Object::remove_extension('SiteConfig', 'SiteConfigTwoStepWorkflow');
// add three-step decorators
Object::add_extension('WorkflowRequest', 'WorkflowThreeStepRequest');
Object::add_extension('SiteTree', 'SiteTreeCMSThreeStepWorkflow');
Object::add_extension('LeftAndMain', 'LeftAndMainCMSThreeStepWorkflow');
Object::add_extension('SiteConfig', 'SiteConfigThreeStepWorkflow');

```

Refresh your database schema through `http:///dev/build`.

Usage
-----

[](#usage)

Based on your permission levels, authors in the CMS will see different actions on a page, and a new "Workflow" tab listing open requests.

Popup alerts
------------

[](#popup-alerts)

You can allow Administrator users to Publish without giving a comment. by placing the following in your mysite/\_config.php file: This will disable the popup for this situation.

```
LeftAndMainCMSWorkflow::set_prompt_admin_for_comments(false);

```

Email alerts
------------

[](#email-alerts)

Email alerts are configurable by the developer.

The following line sets a config option

```
WorkflowRequest::set_alert(CLASS, EVENT, GROUP, NOTIFY);

```

CLASS is one of either WorkflowPublicationRequest or WorkflowDeletionRequest

EVENT is one of

- request
- publish (3 step only)
- approve
- deny
- cancel
- comment

GROUP is either author or publisher or approver

NOTIFY is either true or false

Customising strings via translation
-----------------------------------

[](#customising-strings-via-translation)

The cmsworkflow uses the translation facilities of SilverStripe extensively. This allows us to support the module in different languages, with many languages available out of the box.

If you want to customise these strings further, there is another module called customtranslation that allows you to override the strings provided in the lang files, without changing the lang files. The module can override strings across the whole site, not just cmsworkflow. customtranslation will be supported for SilverStripe 2.4.1 and up.

See [customtranslation on silverstripe.org](http://silverstripe.org/custom-translations-module/)

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance10

Infrequent updates — may be unmaintained

Popularity23

Limited adoption so far

Community24

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 Bus Factor1

Top contributor holds 73% 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/b0cba8b534e20e6ab4fff555a97b237a18436ebca1446fc0b29c8a8b504038b9?d=identicon)[GuySartorelli](/maintainers/GuySartorelli)

![](https://avatars.githubusercontent.com/u/111025?v=4)[Ingo Schommer](/maintainers/chillu)[@chillu](https://github.com/chillu)

---

Top Contributors

[![rixth](https://avatars.githubusercontent.com/u/116910?v=4)](https://github.com/rixth "rixth (373 commits)")[![chillu](https://avatars.githubusercontent.com/u/111025?v=4)](https://github.com/chillu "chillu (93 commits)")[![lingo](https://avatars.githubusercontent.com/u/219531?v=4)](https://github.com/lingo "lingo (16 commits)")[![mateusz](https://avatars.githubusercontent.com/u/118653?v=4)](https://github.com/mateusz "mateusz (12 commits)")[![geoff-silverstripe](https://avatars.githubusercontent.com/u/318115?v=4)](https://github.com/geoff-silverstripe "geoff-silverstripe (9 commits)")[![dhensby](https://avatars.githubusercontent.com/u/563596?v=4)](https://github.com/dhensby "dhensby (3 commits)")[![robbieaverill](https://avatars.githubusercontent.com/u/5170590?v=4)](https://github.com/robbieaverill "robbieaverill (2 commits)")[![sminnee](https://avatars.githubusercontent.com/u/59968?v=4)](https://github.com/sminnee "sminnee (1 commits)")[![jthomerson](https://avatars.githubusercontent.com/u/171934?v=4)](https://github.com/jthomerson "jthomerson (1 commits)")[![ajoneil](https://avatars.githubusercontent.com/u/460342?v=4)](https://github.com/ajoneil "ajoneil (1 commits)")

### Embed Badge

![Health badge](/badges/silverstripe-cmsworkflow/health.svg)

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

###  Alternatives

[jeroennoten/laravel-adminlte

Easy AdminLTE integration with Laravel

4.0k4.8M43](/packages/jeroennoten-laravel-adminlte)[dmstr/yii2-adminlte-asset

AdminLTE backend theme asset bundle for Yii 2.0 Framework

1.1k1.8M67](/packages/dmstr-yii2-adminlte-asset)[dwij/laraadmin

LaraAdmin is a Open source Laravel Admin Panel / CMS which can be used as Admin Backend, Data Management Tool or CRM boilerplate for Laravel with features like CRUD Generation, Module Manager, Media, Menus, Backups and much more

1.6k68.7k](/packages/dwij-laraadmin)[filament/spatie-laravel-media-library-plugin

Filament support for `spatie/laravel-medialibrary`.

1764.8M125](/packages/filament-spatie-laravel-media-library-plugin)[bezhansalleh/filament-exceptions

A Simple &amp; Beautiful Pluggable Exception Viewer for FilamentPHP's Admin Panel

193195.9k13](/packages/bezhansalleh-filament-exceptions)[filament/infolists

Easily add beautiful read-only infolists to any Livewire component.

1220.8M36](/packages/filament-infolists)

PHPackages © 2026

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