Change record status:
Published (View all published change records)
Project:
Introduced in branch:
8.4.x
Introduced in version:
8.4.0
Issues:
#2849827: Move workflow "settings" setters and getters to WorkflowTypeInterface
#2893778: Remove deprecated Workflows methods
#2896725: Entirely remove the concept of WorkflowType(Interface|Base)::()initializeWorkflow
Description:
Previously settings for states were stored in both the Workflow
config entity and the schema of the @WorkflowType
plugin associated with a Workflow
config entity.
Config schema impact
- Old schema:
-
id: editorial label: 'Editorial workflow' states: archived: label: Archived weight: 5 type_settings: states: archived: published: false default_revision: true
- New schema:
-
id: editorial label: 'Editorial workflow' type_settings: states: archived: label: Archived weight: 5 published: false default_revision: true
- Old way to add a state:
-
$workflow->addState('test_state', 'Test state');
- New way:
-
$workflow->getTypePlugin()->addState('test_state', 'Test state');
Impact on Workflow(Interface)
(entity type)
The full list of methods that have moved from WorkflowInterface
to WorkflowTypeInterface
is (with no BC layer):
addState()
hasState()
getStates()
getState()
setStateLabel()
setStateWeight()
deleteState()
getInitialState()
addTransition()
getTransition()
hasTransition()
getTransitions()
getTransitionsForState()
getTransitionFromStateToState()
hasTransitionFromStateToState()
setTransitionLabel()
setTransitionWeight()
setTransitionFromStates()
deleteTransition()
Impact on WorkflowType(Interface)
(plugin type)
To accommodate this schema, the plugin forms are now defined in individual form classes referenced in the @WorkflowType
annotation. These forms replace the methods that were previously implemented directly on the plugin type. Previously, it was impossible to influence the initial states & transitions of a workflow, but that's no longer a problem since each @WorkflowType
plugin now controls schema + storage, so now plugins can just implement ConfigurablePluginInterface::defaultConfiguration()
.
Therefore the following methods have been removed from WorkflowTypeInterface
:
initializeWorkflow()
buildStateConfigurationForm()
buildTransitionConfigurationForm()
(Validate and submit handlers had to be set manually with advanced Form API constructs.)
What's added: WorkflowTypeInterface
now extends PluginWithFormsInterface
, which is what makes it possible to reference form classes from the @WorkflowType
annotation.
The workflows UI currently makes use of three forms: configure
, state
and transition
. The new form classes should implement PluginFormInterface
and may extend WorkflowTypeConfigureFormBase
,
WorkflowTypeStateFormBase
or WorkflowTypeTransitionFormBase
respectively.
Source: drupal.org