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. |