class WebformAttachmentController in Webform 6.x
Same name and namespace in other branches
- 8.5 modules/webform_attachment/src/Controller/WebformAttachmentController.php \Drupal\webform_attachment\Controller\WebformAttachmentController
Defines a controller to return a webform attachment.
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, RedirectDestinationTrait, StringTranslationTrait
- class \Drupal\webform_attachment\Controller\WebformAttachmentController implements ContainerInjectionInterface
Expanded class hierarchy of WebformAttachmentController
File
- modules/
webform_attachment/ src/ Controller/ WebformAttachmentController.php, line 19
Namespace
Drupal\webform_attachment\ControllerView source
class WebformAttachmentController extends ControllerBase implements ContainerInjectionInterface {
/**
* Element info.
*
* @var \Drupal\Core\Render\ElementInfoManager
*/
protected $elementInfo;
/**
* The webform element plugin manager.
*
* @var \Drupal\webform\Plugin\WebformElementManagerInterface
*/
protected $elementManager;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
$instance = parent::create($container);
$instance->elementInfo = $container
->get('plugin.manager.element_info');
$instance->elementManager = $container
->get('plugin.manager.webform.element');
return $instance;
}
/**
* Response callback to download an attachment.
*
* @param \Drupal\webform\WebformInterface $webform
* A webform.
* @param \Drupal\webform\WebformSubmissionInterface $webform_submission
* A webform submission.
* @param string $element
* The attachment element webform key.
* @param string $filename
* The attachment filename.
*
* @return \Symfony\Component\HttpFoundation\Response
* A response containing the attachment's file.
*/
public function download(WebformInterface $webform, WebformSubmissionInterface $webform_submission, $element, $filename) {
// Make sure the webform id and submission webform id match.
if ($webform
->id() !== $webform_submission
->getWebform()
->id()) {
throw new NotFoundHttpException();
}
// Get the webform element and plugin.
$element = $webform_submission
->getWebform()
->getElement($element) ?: [];
$element_plugin = $this->elementManager
->getElementInstance($element, $webform_submission);
// Make sure the element is a webform attachment.
if (!$element_plugin instanceof WebformAttachmentBase) {
throw new NotFoundHttpException();
}
// Make sure element #access is not FALSE.
// The #private property is used to to set #access to FALSE.
// @see \Drupal\webform\Entity\Webform::initElementsRecursive
if (!Element::isVisibleElement($element)) {
throw new AccessDeniedHttpException();
}
// Make sure the current user can view the element.
if (!$element_plugin
->checkAccessRules('view', $element)) {
throw new AccessDeniedHttpException();
}
/** @var \Drupal\webform_attachment\Element\WebformAttachmentInterface $element_info */
// Get base form element for webform element derivatives.
// @see \Drupal\webform_entity_print\Plugin\Derivative\WebformEntityPrintWebformElementDeriver
list($type) = explode(':', $element['#type']);
$element_info = $this->elementInfo
->createInstance($type);
// Get attachment information.
$attachment_name = $element_info::getFileName($element, $webform_submission);
$attachment_mime = $element_info::getFileMimeType($element, $webform_submission);
$attachment_content = $element_info::getFileContent($element, $webform_submission);
$attachment_size = strlen($attachment_content);
$attachment_download = !empty($element['#download']) ? 'attachment;' : '';
// Make sure the attachment can be downloaded.
if (empty($attachment_name) || empty($attachment_content) || empty($attachment_mime)) {
throw new NotFoundHttpException();
}
// Return the file.
$headers = [
'Content-Length' => $attachment_size,
'Content-Type' => $attachment_mime,
'Content-Disposition' => $attachment_download . 'filename="' . $filename . '"',
];
return new Response($attachment_content, 200, $headers);
}
}
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:: |
protected | property | The messenger. | 27 |
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. | |
WebformAttachmentController:: |
protected | property | Element info. | |
WebformAttachmentController:: |
protected | property | The webform element plugin manager. | |
WebformAttachmentController:: |
public static | function |
Instantiates a new instance of this class. Overrides ControllerBase:: |
|
WebformAttachmentController:: |
public | function | Response callback to download an attachment. |