Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
1.2 kB
1
Indexable
Never
use Drupal\workflows\Entity\Workflow;
use Drupal\workflows\TransitionInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;

// Load all workflow configurations.
$workflow_configs = Workflow::loadMultiple();

// Load the entity type manager.
$entity_type_manager = \Drupal::entityTypeManager();

$roles_by_state = [];

// Loop through each workflow configuration to gather roles by state.
foreach ($workflow_configs as $workflow_config) {
  $transitions = $workflow_config->getTransitions();
  foreach ($transitions as $transition) {
    // Ensure the transition implements TransitionInterface.
    if ($transition instanceof TransitionInterface) {
      // Get the to state of the transition.
      $to_state_id = $transition->to();
      $to_state = $workflow_config->getState($to_state_id);

      // Get roles associated with the state.
      $roles = $to_state->get('roles');
      foreach ($roles as $role_id => $role_name) {
        // Load the role to get its label.
        $role = $entity_type_manager->getStorage('user_role')->load($role_id);
        if ($role) {
          $roles_by_state[$to_state_id][$role_id] = $role->label();
        }
      }
    }
  }
}

// Now $roles_by_state contains roles allowed to act on each state.