class WebformAttachmentController in Webform 8.5
Same name and namespace in other branches
- 6.x 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, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\webform_attachment\Controller\WebformAttachmentController implements ContainerInjectionInterface
Expanded class hierarchy of WebformAttachmentController
File
- modules/
webform_attachment/ src/ Controller/ WebformAttachmentController.php, line 21
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;
/**
* Constructs a WebformAttachmentController object.
*
* @param \Drupal\Core\Render\ElementInfoManagerInterface $element_info
* The element info manager.
* @param \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager
* A webform element plugin manager.
*/
public function __construct(ElementInfoManagerInterface $element_info, WebformElementManagerInterface $element_manager) {
$this->elementInfo = $element_info;
$this->elementManager = $element_manager;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('plugin.manager.element_info'), $container
->get('plugin.manager.webform.element'));
}
/**
* 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 manager. | |
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 manager service. | |
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. Overrides UrlGeneratorTrait:: |
|
ControllerBase:: |
protected | function | Returns the state storage service. | |
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator 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. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
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. | 1 |
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. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. | |
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. | |
WebformAttachmentController:: |
public | function | Constructs a WebformAttachmentController object. |