function template_preprocess_commerce_file_download_link in Commerce File 8.2
Prepares variables for file download link templates.
Copied from template_preprocess_file_link.
Default template: commerce-file-download-link.html.twig.
Parameters
array $variables: An associative array containing:
- file: A File entity to which the link will be created.
- icon_directory: (optional) A path to a directory of icons to be used for files. Defaults to the value of the "icon.directory" variable.
- description: A description to be displayed instead of the filename.
- attributes: An associative array of attributes to be placed in the a tag.
File
- ./
commerce_file.module, line 218 - Extends Commerce License with the ability to sell access to files.
Code
function template_preprocess_commerce_file_download_link(array &$variables) {
/** @var \Drupal\file\FileInterface $file */
$file = $variables['file'];
$options = [];
// @todo Wrap in file_url_transform_relative(). This is currently
// impossible. As a work-around, we currently add the 'url.site' cache context
// to ensure different file URLs are generated for different sites in a
// multisite setup, including HTTP and HTTPS versions of the same site.
// Fix in https://www.drupal.org/node/2646744.
$variables['#cache']['contexts'][] = 'url.site';
$mime_type = $file
->getMimeType();
// Set options as per anchor format described at
// http://microformats.org/wiki/file-format-examples
$options['attributes']['type'] = $mime_type . '; length=' . $file
->getSize();
// Use the description as the link text if available.
if (empty($variables['description'])) {
$link_text = $file
->getFilename();
}
else {
$link_text = $variables['description'];
$options['attributes']['title'] = $file
->getFilename();
}
// Classes to add to the file field for icons.
$classes = [
'file',
// Add a specific class for each and every mime type.
'file--mime-' . strtr($mime_type, [
'/' => '-',
'.' => '-',
]),
// Add a more general class for groups of well known MIME types.
'file--' . file_icon_class($mime_type),
];
// Set file classes to the options array.
$variables['attributes'] = new Attribute($variables['attributes']);
$variables['attributes']
->addClass($classes);
$variables['file_size'] = format_size($file
->getSize());
$route_parameters = [
'file' => $file
->id(),
];
$variables['link'] = Link::fromTextAndUrl($link_text, Url::fromRoute('commerce_file.download', $route_parameters, $options))
->toRenderable();
}