public function KanbanController::updateEntityWorkflowState in Content Planner 8
Updates the Workflow state of a given Entity.
Parameters
\Drupal\Core\Entity\ContentEntityInterface $entity: The current entity.
string $state_id: The target state id for the current entity.
Return value
\Symfony\Component\HttpFoundation\JsonResponse Returns a JSON response with the result of the update process.
Throws
\Drupal\Core\Entity\EntityStorageException
1 string reference to 'KanbanController::updateEntityWorkflowState'
- content_kanban.routing.yml in modules/
content_kanban/ content_kanban.routing.yml - modules/content_kanban/content_kanban.routing.yml
File
- modules/
content_kanban/ src/ Controller/ KanbanController.php, line 136
Class
- KanbanController
- Class KanbanController.
Namespace
Drupal\content_kanban\ControllerCode
public function updateEntityWorkflowState(ContentEntityInterface $entity, $state_id) {
$data = [
'success' => FALSE,
'message' => NULL,
];
// Check if entity is moderated.
if (!$this->moderationInformation
->isModeratedEntity($entity)) {
$data['message'] = $this
->t('Entity @type with ID @id is not a moderated entity.', [
'@id' => $entity
->id(),
'@type' => $entity
->getEntityTypeId(),
]);
return new JsonResponse($data);
}
// Get Workflow from entity.
$workflow = $this->moderationInformation
->getWorkflowForEntity($entity);
// If Workflow does not exist.
if (!$workflow) {
$data['message'] = $this
->t('Workflow not found for Entity @type with ID @id.', [
'@id' => $entity
->id(),
'@type' => $entity
->getEntityTypeId(),
]);
return new JsonResponse($data);
}
// Get Workflow States.
$workflow_states = KanbanWorkflowService::getWorkflowStates($workflow);
// Check if state given by request matches any of the Workflow's states.
if (!array_key_exists($state_id, $workflow_states)) {
$data['message'] = $this
->t('Workflow State @state_id is not a valid state of Workflow @workflow_id.', [
'@state_id' => $state_id,
'@workflow_id' => $workflow
->id(),
]);
return new JsonResponse($data);
}
// Load current workflow state of entity.
$current_state = $entity
->get('moderation_state')
->getValue()[0]['value'];
// Load all valid transitions.a1
$allowed_transitions = $this->stateTransitionValidation
->getValidTransitions($entity, $this->currentUser);
// Load all available transitions.
$transitions = $workflow
->get('type_settings')['transitions'];
foreach ($transitions as $key => $transition) {
if (in_array($current_state, $transition['from']) && $transition['to'] == $state_id) {
$transition_id = $key;
continue;
}
}
if (empty($transition_id)) {
$data['message'] = $this
->t('Invalid transition');
return new JsonResponse($data);
}
if (!array_key_exists($transition_id, $allowed_transitions)) {
$data['message'] = $this
->t('You do not have permissions to perform the action @transition_id for this content. Please contact the site administrator.', [
'@transition_id' => $transition_id,
]);
return new JsonResponse($data);
}
// Set new state.
$entity->moderation_state->value = $state_id;
// Save.
if ($entity
->save() == SAVED_UPDATED) {
$data['success'] = TRUE;
$data['message'] = $this
->t('Workflow state of Entity @type with @id has been updated to @state_id', [
'@type' => $entity
->getEntityTypeId(),
'@id' => $entity
->id(),
'@state_id' => $state_id,
]);
}
return new JsonResponse($data);
}