execute action on workflow transition
Вопрос
I want to execute PHP script in my custom module, when transition occurs. Workflow is assigned to custom entity. I'm using Drupal's core modules Workflow and Content moderation. How can I do that programmatically?
Решение
You can use hook_ENTITY_TYPE_update to achieve this.
/**
* Implements hook_ENTITY_TYPE_update().
*/
function mymodule_node_update(Drupal\Core\Entity\EntityInterface $entity) {
//Get the current Moderation state;
if (isset($entity->moderation_state) && isset($entity->moderation_state->getValue()[0]['target_id'])) {
$currentState = $entity->hasField('moderation_state') ? $entity->moderation_state->getValue()[0]['target_id'] : null;
}
//Get the original Moderation state;
if ( isset($entity->original->moderation_state ) && isset($entity->original->moderation_state->getValue()[0]['target_id']) ) {
$originalState = $entity->original !== NULL ? $entity->original->moderation_state->getValue()[0]['target_id'] : null;
}
#Get the Transition;
$workflowTransition = rtrim($originalState.'-->'.$currentState);
switch ($workflowTransition) {
case 'published-->needs_review':
case 'draft-->needs_review':
//Do something.
break;
case 'draft-->needs_review':
//Do something else;
break;
}
}
Не связан с drupal.stackexchange