WebformTestController.php in Webform 8.5
File
src/Controller/WebformTestController.php
View source
<?php
namespace Drupal\webform\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\Core\Serialization\Yaml;
use Drupal\webform\Plugin\WebformHandler\EmailWebformHandler;
use Drupal\webform\WebformInterface;
use Drupal\webform\WebformRequestInterface;
use Drupal\webform\WebformSubmissionGenerateInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
class WebformTestController extends ControllerBase implements ContainerInjectionInterface {
protected $messenger;
protected $requestHandler;
protected $entityReferenceManager;
protected $generate;
public function __construct(MessengerInterface $messenger, WebformRequestInterface $request_handler, WebformSubmissionGenerateInterface $submission_generate) {
$this->messenger = $messenger;
$this->requestHandler = $request_handler;
$this->generate = $submission_generate;
}
public static function create(ContainerInterface $container) {
$instance = new static($container
->get('messenger'), $container
->get('webform.request'), $container
->get('webform_submission.generate'));
$instance->entityReferenceManager = $container
->get('webform.entity_reference_manager');
return $instance;
}
public function testForm(Request $request) {
list($webform, $source_entity) = $this->requestHandler
->getWebformEntities();
$test_webform_handler = $request->query
->get('_webform_handler');
if ($test_webform_handler) {
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();
}
$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);
}
}
$webform
->setOverride(TRUE);
}
$values = [];
if ($source_entity) {
$values['entity_type'] = $source_entity
->getEntityTypeId();
$values['entity_id'] = $source_entity
->id();
$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');
}
public function title(WebformInterface $webform) {
list($webform, $source_entity) = $this->requestHandler
->getWebformEntities();
return $this
->t('Testing %title webform', [
'%title' => $source_entity ? $source_entity
->label() : $webform
->label(),
]);
}
}