You are here

class WebformTestController in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/Controller/WebformTestController.php \Drupal\webform\Controller\WebformTestController

Provides route responses for Webform testing.

Hierarchy

Expanded class hierarchy of WebformTestController

File

src/Controller/WebformTestController.php, line 17

Namespace

Drupal\webform\Controller
View 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

Namesort descending Modifiers Type Description Overrides
ControllerBase::$configFactory protected property The configuration factory.
ControllerBase::$currentUser protected property The current user service. 1
ControllerBase::$entityFormBuilder protected property The entity form builder.
ControllerBase::$entityTypeManager protected property The entity type manager.
ControllerBase::$formBuilder protected property The form builder. 2
ControllerBase::$keyValue protected property The key-value storage. 1
ControllerBase::$languageManager protected property The language manager. 1
ControllerBase::$moduleHandler protected property The module handler. 2
ControllerBase::$stateService protected property The state service.
ControllerBase::cache protected function Returns the requested cache bin.
ControllerBase::config protected function Retrieves a configuration object.
ControllerBase::container private function Returns the service container.
ControllerBase::currentUser protected function Returns the current user. 1
ControllerBase::entityFormBuilder protected function Retrieves the entity form builder.
ControllerBase::entityTypeManager protected function Retrieves the entity type manager.
ControllerBase::formBuilder protected function Returns the form builder service. 2
ControllerBase::keyValue protected function Returns a key/value storage collection. 1
ControllerBase::languageManager protected function Returns the language manager service. 1
ControllerBase::moduleHandler protected function Returns the module handler. 2
ControllerBase::redirect protected function Returns a redirect response object for the specified route.
ControllerBase::state protected function Returns the state storage service.
LoggerChannelTrait::$loggerFactory protected property The logger channel factory service.
LoggerChannelTrait::getLogger protected function Gets the logger for a specific channel.
LoggerChannelTrait::setLoggerFactory public function Injects the logger channel factory.
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
RedirectDestinationTrait::$redirectDestination protected property The redirect destination service. 1
RedirectDestinationTrait::getDestinationArray protected function Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url.
RedirectDestinationTrait::getRedirectDestination protected function Returns the redirect destination service.
RedirectDestinationTrait::setRedirectDestination public function Sets the redirect destination service.
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
WebformTestController::$entityReferenceManager protected property The webform entity reference manager.
WebformTestController::$generate protected property The webform submission generation service.
WebformTestController::$messenger protected property The messenger. Overrides MessengerTrait::$messenger
WebformTestController::$requestHandler protected property The webform request handler.
WebformTestController::create public static function Instantiates a new instance of this class. Overrides ControllerBase::create
WebformTestController::testForm public function Returns a webform to add a new test submission to a webform.
WebformTestController::title public function Route title callback.