You are here

protected function WebformEntityController::getVariants in Webform 8.5

Same name and namespace in other branches
  1. 6.x src/Controller/WebformEntityController.php \Drupal\webform\Controller\WebformEntityController::getVariants()

Get variants from the current request.

Parameters

\Symfony\Component\HttpFoundation\Request $request: The current request.

\Drupal\webform\WebformInterface|null $webform: The current webform.

\Drupal\Core\Entity\EntityInterface|null $source_entity: The current source entity.

Return value

array An associative array of variants keyed by element key and variant instance id.

See also

\Drupal\webform\Entity\Webform::getSubmissionForm

1 call to WebformEntityController::getVariants()
WebformEntityController::confirmation in src/Controller/WebformEntityController.php
Returns a webform confirmation page.

File

src/Controller/WebformEntityController.php, line 229

Class

WebformEntityController
Provides route responses for Webform entity.

Namespace

Drupal\webform\Controller

Code

protected function getVariants(Request $request, WebformInterface $webform, EntityInterface $source_entity = NULL) {

  // Get variants from '_webform_variant query string parameter.
  $webform_variant = $request->query
    ->get('_webform_variant');
  if ($webform_variant && ($webform
    ->access('update') || $webform
    ->access('test'))) {
    return $webform_variant;
  }

  // Get default data.
  $field_name = $this->webformEntityReferenceManager
    ->getFieldName($source_entity);
  if (!$field_name) {
    return [];
  }
  $default_data = $source_entity->{$field_name}->default_data;
  $default_data = $default_data ? Yaml::decode($default_data) : [];

  // Get query string data.
  $query = $request->query
    ->all();

  // Get variants from #prepopulate query string parameters.
  $variants = [];
  $element_keys = $webform
    ->getElementsVariant();
  foreach ($element_keys as $element_key) {
    $element = $webform
      ->getElement($element_key);
    if (!empty($query[$element_key]) && !empty($element['#prepopulate'])) {
      $variants[$element_key] = $query[$element_key];
    }
    elseif (!empty($default_data[$element_key])) {
      $variants[$element_key] = $default_data[$element_key];
    }
  }
  return $variants;
}