class WebformTestController in Webform 6.x
Same name and namespace in other branches
- 8.5 src/Controller/WebformTestController.php \Drupal\webform\Controller\WebformTestController
Provides route responses for Webform testing.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, RedirectDestinationTrait, StringTranslationTrait- class \Drupal\webform\Controller\WebformTestController implements ContainerInjectionInterface
 
Expanded class hierarchy of WebformTestController
File
- src/Controller/ WebformTestController.php, line 17 
Namespace
Drupal\webform\ControllerView source
class WebformTestController extends ControllerBase implements ContainerInjectionInterface {
  /**
   * The messenger.
   *
   * @var \Drupal\Core\Messenger\MessengerInterface
   */
  protected $messenger;
  /**
   * The webform request handler.
   *
   * @var \Drupal\webform\WebformRequestInterface
   */
  protected $requestHandler;
  /**
   * The webform entity reference manager.
   *
   * @var \Drupal\webform\WebformEntityReferenceManagerInterface
   */
  protected $entityReferenceManager;
  /**
   * The webform submission generation service.
   *
   * @var \Drupal\webform\WebformSubmissionGenerateInterface
   */
  protected $generate;
  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    $instance = parent::create($container);
    $instance->messenger = $container
      ->get('messenger');
    $instance->requestHandler = $container
      ->get('webform.request');
    $instance->entityReferenceManager = $container
      ->get('webform.entity_reference_manager');
    $instance->generate = $container
      ->get('webform_submission.generate');
    return $instance;
  }
  /**
   * Returns a webform to add a new test submission to a webform.
   *
   * @param \Symfony\Component\HttpFoundation\Request $request
   *   The current request.
   *
   * @return array
   *   The webform submission webform.
   */
  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');
  }
  /**
   * Route title callback.
   *
   * @param \Drupal\webform\WebformInterface $webform
   *   The webform.
   *
   * @return string
   *   The webform label as a render array.
   */
  public function title(WebformInterface $webform) {
    /** @var \Drupal\webform\WebformInterface $webform */
    /** @var \Drupal\Core\Entity\EntityInterface $source_entity */
    list($webform, $source_entity) = $this->requestHandler
      ->getWebformEntities();
    return $this
      ->t('Testing %title webform', [
      '%title' => $source_entity ? $source_entity
        ->label() : $webform
        ->label(),
    ]);
  }
}Members
| Name   | Modifiers | Type | Description | Overrides | 
|---|---|---|---|---|
| ControllerBase:: | protected | property | The configuration factory. | |
| ControllerBase:: | protected | property | The current user service. | 1 | 
| ControllerBase:: | protected | property | The entity form builder. | |
| ControllerBase:: | protected | property | The entity type manager. | |
| ControllerBase:: | protected | property | The form builder. | 2 | 
| ControllerBase:: | protected | property | The key-value storage. | 1 | 
| ControllerBase:: | protected | property | The language manager. | 1 | 
| ControllerBase:: | protected | property | The module handler. | 2 | 
| ControllerBase:: | protected | property | The state service. | |
| ControllerBase:: | protected | function | Returns the requested cache bin. | |
| ControllerBase:: | protected | function | Retrieves a configuration object. | |
| ControllerBase:: | private | function | Returns the service container. | |
| ControllerBase:: | protected | function | Returns the current user. | 1 | 
| ControllerBase:: | protected | function | Retrieves the entity form builder. | |
| ControllerBase:: | protected | function | Retrieves the entity type manager. | |
| ControllerBase:: | protected | function | Returns the form builder service. | 2 | 
| ControllerBase:: | protected | function | Returns a key/value storage collection. | 1 | 
| ControllerBase:: | protected | function | Returns the language manager service. | 1 | 
| ControllerBase:: | protected | function | Returns the module handler. | 2 | 
| ControllerBase:: | protected | function | Returns a redirect response object for the specified route. | |
| ControllerBase:: | protected | function | Returns the state storage service. | |
| LoggerChannelTrait:: | protected | property | The logger channel factory service. | |
| LoggerChannelTrait:: | protected | function | Gets the logger for a specific channel. | |
| LoggerChannelTrait:: | public | function | Injects the logger channel factory. | |
| MessengerTrait:: | public | function | Gets the messenger. | 27 | 
| MessengerTrait:: | public | function | Sets the messenger. | |
| RedirectDestinationTrait:: | protected | property | The redirect destination service. | 1 | 
| RedirectDestinationTrait:: | protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
| RedirectDestinationTrait:: | protected | function | Returns the redirect destination service. | |
| RedirectDestinationTrait:: | public | function | Sets the redirect destination service. | |
| StringTranslationTrait:: | protected | property | The string translation service. | 4 | 
| StringTranslationTrait:: | protected | function | Formats a string containing a count of items. | |
| StringTranslationTrait:: | protected | function | Returns the number of plurals supported by a given language. | |
| StringTranslationTrait:: | protected | function | Gets the string translation service. | |
| StringTranslationTrait:: | public | function | Sets the string translation service to use. | 2 | 
| StringTranslationTrait:: | protected | function | Translates a string to the current language or to a given language. | |
| WebformTestController:: | protected | property | The webform entity reference manager. | |
| WebformTestController:: | protected | property | The webform submission generation service. | |
| WebformTestController:: | protected | property | The messenger. Overrides MessengerTrait:: | |
| WebformTestController:: | protected | property | The webform request handler. | |
| WebformTestController:: | public static | function | Instantiates a new instance of this class. Overrides ControllerBase:: | |
| WebformTestController:: | public | function | Returns a webform to add a new test submission to a webform. | |
| WebformTestController:: | public | function | Route title callback. | 
