You are here

public function WebformTestController::testForm in Webform 8.5

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

Returns a webform to add a new test submission to a webform.

Parameters

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

Return value

array The webform submission webform.

2 string references to 'WebformTestController::testForm'
webform.routing.yml in ./webform.routing.yml
webform.routing.yml
webform_node.routing.yml in modules/webform_node/webform_node.routing.yml
modules/webform_node/webform_node.routing.yml

File

src/Controller/WebformTestController.php, line 89

Class

WebformTestController
Provides route responses for Webform testing.

Namespace

Drupal\webform\Controller

Code

public function testForm(Request $request) {

  /** @var \Drupal\webform\WebformInterface $webform */

  /** @var \Drupal\Core\Entity\EntityInterface $source_entity */
  list($webform, $source_entity) = $this->requestHandler
    ->getWebformEntities();

  // Test a single webform handler which is set via
  // ?_webform_handler={handler_id}.
  $test_webform_handler = $request->query
    ->get('_webform_handler');
  if ($test_webform_handler) {

    // Make sure the handler exists.
    if (!$webform
      ->getHandlers()
      ->has($test_webform_handler)) {
      $t_args = [
        '%webform' => $webform
          ->label(),
        '%handler' => $test_webform_handler,
      ];
      $this->messenger
        ->addWarning($this
        ->t('The %handler email/handler for the %webform webform does not exist.', $t_args));
      throw new AccessDeniedHttpException();
    }

    // Enable only the selected handler for testing
    // and disable all other handlers.
    $handlers = $webform
      ->getHandlers();
    foreach ($handlers as $handler_id => $handler) {
      if ($handler_id === $test_webform_handler) {
        $handler
          ->setStatus(TRUE);
        $t_args = [
          '%webform' => $webform
            ->label(),
          '%handler' => $handler
            ->label(),
          '@type' => $handler instanceof EmailWebformHandler ? $this
            ->t('email') : $this
            ->t('handler'),
        ];
        $this->messenger
          ->addWarning($this
          ->t('Testing the %webform webform %handler @type. <strong>All other emails/handlers are disabled.</strong>', $t_args));
      }
      else {
        $handler
          ->setStatus(FALSE);
      }
    }

    // Set override to prevent the webform's altered handler statuses
    // from being saved.
    $webform
      ->setOverride(TRUE);
  }

  // Set values.
  $values = [];

  // Set source entity type and id.
  if ($source_entity) {
    $values['entity_type'] = $source_entity
      ->getEntityTypeId();
    $values['entity_id'] = $source_entity
      ->id();

    // Add source entity's default data to values data.
    $field_names = $this->entityReferenceManager
      ->getFieldNames($source_entity);
    foreach ($field_names as $field_name) {
      if ($source_entity
        ->get($field_name)->target_id === $webform
        ->id() && $source_entity
        ->get($field_name)->default_data) {
        $values['data'] = Yaml::decode($source_entity
          ->get($field_name)->default_data);
      }
    }
  }
  return $webform
    ->getSubmissionForm($values, 'test');
}