How should a multi-stage editorial process be implemented in Craft?

Harper: 19 May 2022

I'm building an editorial system on Craft which has 6-8 editorial stages, such as Assignment, Initial Proofing, Secondary Proofing, etc. It seems that the simplest solution would be to have the current stage be a custom field. I'd like to build this system entirely using Craft's backend so I don't have to reinvent all of the niceties Craft provides.

The fuzzy part, however, comes when I'd like to be able to have a "Send to Next Stage" button. For instance, if the article is done with its initial proofing, the proofreader should be able to mark it as done and automatically send it to the Secondary Proofing step. I realize that I could just have a dropdown where the user changes the status and saves it, but that feels cumbersome. Stage 1 should only be able to send entries to Stage 2. Stage 2 should only be able to send entries to Stage 3. Things should never skip steps or move backwards.

My current thought is to hook into the entries.onSave event and have a switch or something to automatically change the status. Then, I suppose that within a stage, all versions would have to be saved as drafts rather than entries, as saving would have that side-effect of essentially marking the entry as complete.

Is there a simpler, more foolproof, or more intuitive way to walk an article through an editorial process like this? I suppose I could use categories rather than a custom field type, but the entries.onSave hook would still have to be the mechanism I'd use to automatically send the article to the next stage of the editorial process.

Rowan: 19 May 2022

Have you already seen the workflow plugin? Maybe it could give you some inputs for your further development: