public function TransitionManager::process in Lightning Scheduler 8
Executes all scheduled transitions for a particular entity type.
Parameters
string $entity_type_id: The entity type ID.
DrupalDateTime $now: The time that processing began.
File
- src/
TransitionManager.php, line 143
Class
- TransitionManager
- @internal This is an internal part of Lightning Scheduler and may be changed or removed at any time without warning. It should not be used by external code in any way.
Namespace
Drupal\lightning_schedulerCode
public function process($entity_type_id, DrupalDateTime $now) {
/** @var ContentEntityInterface $entity */
foreach ($this
->getTransitionable($entity_type_id, $now) as $entity) {
$error_context = [
'entity_type' => (string) $entity
->getEntityType()
->getSingularLabel(),
'entity' => $entity
->label(),
];
$workflow = $this->moderationInformation
->getWorkflowForEntity($entity);
// If the entity hasn't got a workflow, what are we doing here?
if (empty($workflow)) {
$message = $this
->t('Could not execute scheduled transition(s) for {entity_type} "{entity}" because no workflow is assigned to it.');
$this->logger
->error($message, $error_context);
continue;
}
$transition_set = new TransitionSet($entity
->get('scheduled_transition_date'), $entity
->get('scheduled_transition_state'));
$to_state = $transition_set
->getExpectedState($now);
// If no workflow state is targeted, there's nothing to transition to.
if (empty($to_state)) {
continue;
}
$from_state = $entity->moderation_state->value;
$plugin = $workflow
->getTypePlugin();
if ($plugin
->hasTransitionFromStateToState($from_state, $to_state)) {
$entity
->set('moderation_state', $to_state);
}
else {
$error_context += [
'from_state' => $plugin
->getState($from_state)
->label(),
'to_state' => $plugin
->getState($to_state)
->label(),
'workflow' => $workflow
->label(),
];
$message = $this
->t('Could not transition {entity_type} "{entity}" from {from_state} to {to_state} because no such transition exists in the "{workflow}" workflow.');
$this->logger
->warning($message, $error_context);
}
$transition_set
->trim($now);
$entity
->save();
}
}