You are here

public function Workflow::getTransitions in Workflow 7.2

@inheritdoc

Overrides WorkflowInterface::getTransitions

5 calls to Workflow::getTransitions()
Workflow::getTransitionsBySid in includes/Entity/Workflow.php
Workflow::getTransitionsBySidTargetSid in includes/Entity/Workflow.php
Get a specific transition. Therefore, use $roles = 'ALL'.
Workflow::getTransitionsByTargetSid in includes/Entity/Workflow.php
Workflow::getTransitionsByTid in includes/Entity/Workflow.php
Workflow::rebuildInternals in includes/Entity/Workflow.php
Rebuild internals that get saved separately.

File

includes/Entity/Workflow.php, line 556
Contains workflow\includes\Entity\Workflow. Contains workflow\includes\Entity\WorkflowController.

Class

Workflow

Code

public function getTransitions($tids = FALSE, array $conditions = array(), $reset = FALSE) {
  $config_transitions = array();

  // Get valid + creation states.
  $states = $this
    ->getStates('CREATION');

  // Get filters on 'from' states, 'to' states, roles.
  $sid = isset($conditions['sid']) ? $conditions['sid'] : FALSE;
  $target_sid = isset($conditions['target_sid']) ? $conditions['target_sid'] : FALSE;
  $roles = isset($conditions['roles']) ? $conditions['roles'] : 'ALL';

  // Cache all transitions in the workflow.
  // We may have 0 transitions....
  if ($this->transitions === NULL) {
    $this->transitions = array();

    // Get all transitions. (Even from other workflows. :-( )
    $config_transitions = entity_load('WorkflowConfigTransition', $tids, array(), $reset);
    foreach ($config_transitions as &$config_transition) {
      if (isset($states[$config_transition->sid])) {
        $config_transition
          ->setWorkflow($this);
        $this->transitions[$config_transition->tid] = $config_transition;
      }
    }
    $this
      ->sortTransitions();
  }
  $config_transitions = array();
  foreach ($this->transitions as &$config_transition) {
    if (!isset($states[$config_transition->sid])) {

      // Not a valid transition for this workflow.
    }
    elseif ($sid && $sid != $config_transition->sid) {

      // Not the requested 'from' state.
    }
    elseif ($target_sid && $target_sid != $config_transition->target_sid) {

      // Not the requested 'to' state.
    }
    elseif ($roles == 'ALL' || $config_transition
      ->isAllowed($roles)) {

      // Transition is allowed, permitted. Add to list.
      $config_transition
        ->setWorkflow($this);
      $config_transitions[$config_transition->tid] = $config_transition;
    }
    else {

      // Transition is otherwise not allowed.
    }
  }
  return $config_transitions;
}