Upgraded drupal core with security updates
[yaffs-website] / web / core / modules / image / image.admin.inc
1 <?php
2
3 /**
4  * @file
5  * Administration pages for image settings.
6  */
7
8 use Drupal\Core\Render\Element;
9
10 /**
11  * Prepares variables for image style preview templates.
12  *
13  * Default template: image-style-preview.html.twig.
14  *
15  * @param array $variables
16  *   An associative array containing:
17  *   - style: \Drupal\image\ImageStyleInterface image style being previewed.
18  */
19 function template_preprocess_image_style_preview(&$variables) {
20   // Style information.
21   $style = $variables['style'];
22   $variables['style_id'] = $style->id();
23   $variables['style_name'] = $style->label();
24
25   // Cache bypass token.
26   $variables['cache_bypass'] = REQUEST_TIME;
27
28   // Sample image info.
29   $sample_width = 160;
30   $sample_height = 160;
31   $image_factory = \Drupal::service('image.factory');
32
33   // Set up original file information.
34   $original_path = \Drupal::config('image.settings')->get('preview_image');
35   $original_image = $image_factory->get($original_path);
36   $variables['original'] = [
37     'url' => file_url_transform_relative(file_create_url($original_path)),
38     'width' => $original_image->getWidth(),
39     'height' => $original_image->getHeight(),
40   ];
41   if ($variables['original']['width'] > $variables['original']['height']) {
42     $variables['preview']['original']['width'] = min($variables['original']['width'], $sample_width);
43     $variables['preview']['original']['height'] = round($variables['preview']['original']['width'] / $variables['original']['width'] * $variables['original']['height']);
44   }
45   else {
46     $variables['preview']['original']['height'] = min($variables['original']['height'], $sample_height);
47     $variables['preview']['original']['width'] = round($variables['preview']['original']['height'] / $variables['original']['height'] * $variables['original']['width']);
48   }
49
50   // Set up derivative file information.
51   $preview_file = $style->buildUri($original_path);
52   // Create derivative if necessary.
53   if (!file_exists($preview_file)) {
54     $style->createDerivative($original_path, $preview_file);
55   }
56   $preview_image = $image_factory->get($preview_file);
57   $variables['derivative'] = [
58     'url' => file_url_transform_relative(file_create_url($preview_file)),
59     'width' => $preview_image->getWidth(),
60     'height' => $preview_image->getHeight(),
61   ];
62   if ($variables['derivative']['width'] > $variables['derivative']['height']) {
63     $variables['preview']['derivative']['width'] = min($variables['derivative']['width'], $sample_width);
64     $variables['preview']['derivative']['height'] = round($variables['preview']['derivative']['width'] / $variables['derivative']['width'] * $variables['derivative']['height']);
65   }
66   else {
67     $variables['preview']['derivative']['height'] = min($variables['derivative']['height'], $sample_height);
68     $variables['preview']['derivative']['width'] = round($variables['preview']['derivative']['height'] / $variables['derivative']['height'] * $variables['derivative']['width']);
69   }
70
71   // Build the preview of the original image.
72   $variables['original']['rendered'] = [
73     '#theme' => 'image',
74     '#uri' => $original_path,
75     '#alt' => t('Sample original image'),
76     '#title' => '',
77     '#attributes' => [
78       'width' => $variables['original']['width'],
79       'height' => $variables['original']['height'],
80       'style' => 'width: ' . $variables['preview']['original']['width'] . 'px; height: ' . $variables['preview']['original']['height'] . 'px;',
81     ],
82   ];
83
84   // Build the preview of the image style derivative. Timestamps are added
85   // to prevent caching of images on the client side.
86   $variables['derivative']['rendered'] = [
87     '#theme' => 'image',
88     '#uri' => $variables['derivative']['url'] . '?cache_bypass=' . $variables['cache_bypass'],
89     '#alt' => t('Sample modified image'),
90     '#title' => '',
91     '#attributes' => [
92       'width' => $variables['derivative']['width'],
93       'height' => $variables['derivative']['height'],
94       'style' => 'width: ' . $variables['preview']['derivative']['width'] . 'px; height: ' . $variables['preview']['derivative']['height'] . 'px;',
95     ],
96   ];
97
98 }
99
100 /**
101  * Prepares variables for image anchor templates.
102  *
103  * Default template: image-anchor.html.twig.
104  *
105  * @param array $variables
106  *   An associative array containing:
107  *   - element: An associative array containing the image.
108  */
109 function template_preprocess_image_anchor(&$variables) {
110   $element = $variables['element'];
111
112   $rows = [];
113   $row = [];
114   foreach (Element::children($element) as $n => $key) {
115     $element[$key]['#attributes']['title'] = $element[$key]['#title'];
116     unset($element[$key]['#title']);
117     $row[] = [
118       'data' => $element[$key],
119     ];
120     if ($n % 3 == 3 - 1) {
121       $rows[] = $row;
122       $row = [];
123     }
124   }
125
126   $variables['table'] = [
127     '#type' => 'table',
128     '#header' => [],
129     '#rows' => $rows,
130     '#attributes' => [
131       'class' => ['image-anchor'],
132     ],
133   ];
134 }