diff --git a/src/Tests/TokenFieldUiTest.php b/src/Tests/TokenFieldUiTest.php index 76aed4e..6da6256 100644 --- a/src/Tests/TokenFieldUiTest.php +++ b/src/Tests/TokenFieldUiTest.php @@ -151,19 +151,19 @@ class TokenFieldUiTest extends TokenTestBase { // Obtain the file size and dimension of the images that will be scaled // down during token replacement by applying the styles here. - $style = ImageStyle::load('thumbnail'); - $style->createDerivative('public://example1.png', 'public://styles/thumbnail/public/example1-test.png'); - $style->createDerivative('public://example2.gif', 'public://styles/thumbnail/public/example2-test.gif'); + $style_thumbnail = ImageStyle::load('thumbnail'); + $style_thumbnail->createDerivative('public://example1.png', 'public://styles/thumbnail/public/example1-test.png'); + $style_thumbnail->createDerivative('public://example2.gif', 'public://styles/thumbnail/public/example2-test.gif'); $image_1_thumbnail = \Drupal::service('image.factory')->get('public://styles/thumbnail/public/example1-test.png'); $image_2_thumbnail = \Drupal::service('image.factory')->get('public://styles/thumbnail/public/example2-test.gif'); - $style = ImageStyle::load('medium'); - $style->createDerivative('public://example1.png', 'public://styles/medium/public/example1-test.png'); - $style->createDerivative('public://example2.gif', 'public://styles/medium/public/example2-test.gif'); + $style_medium = ImageStyle::load('medium'); + $style_medium->createDerivative('public://example1.png', 'public://styles/medium/public/example1-test.png'); + $style_medium->createDerivative('public://example2.gif', 'public://styles/medium/public/example2-test.gif'); $image_1_medium = \Drupal::service('image.factory')->get('public://styles/medium/public/example1-test.png'); $image_2_medium = \Drupal::service('image.factory')->get('public://styles/medium/public/example2-test.gif'); - $style = ImageStyle::load('large'); - $style->createDerivative('public://example1.png', 'public://styles/large/public/example1-test.png'); - $style->createDerivative('public://example2.gif', 'public://styles/large/public/example2-test.gif'); + $style_large = ImageStyle::load('large'); + $style_large->createDerivative('public://example1.png', 'public://styles/large/public/example1-test.png'); + $style_large->createDerivative('public://example2.gif', 'public://styles/large/public/example2-test.gif'); $image_1_large = \Drupal::service('image.factory')->get('public://styles/large/public/example1-test.png'); $image_2_large = \Drupal::service('image.factory')->get('public://styles/large/public/example2-test.gif'); @@ -181,9 +181,12 @@ class TokenFieldUiTest extends TokenTestBase { 'field_image:thumbnail:width' => $image_1_thumbnail->getWidth(), 'field_image:medium:width' => $image_1_medium->getWidth(), 'field_image:large:width' => $image_1_large->getWidth(), - 'field_image:thumbnail:uri' => 'public://styles/thumbnail/public/example1.png', - 'field_image:medium:uri' => 'public://styles/medium/public/example1.png', - 'field_image:large:uri' => 'public://styles/large/public/example1.png', + 'field_image:thumbnail:uri' => $style_thumbnail->buildUri('public://example1.png'), + 'field_image:medium:uri' => $style_medium->buildUri('public://example1.png'), + 'field_image:large:uri' => $style_large->buildUri('public://example1.png'), + 'field_image:thumbnail:url' => $style_thumbnail->buildUrl('public://example1.png'), + 'field_image:medium:url' => $style_medium->buildUrl('public://example1.png'), + 'field_image:large:url' => $style_large->buildUrl('public://example1.png'), // field_image_2 'field_image_2:thumbnail:mimetype' => 'image/gif', 'field_image_2:medium:mimetype' => 'image/gif', @@ -197,9 +200,12 @@ class TokenFieldUiTest extends TokenTestBase { 'field_image_2:thumbnail:width' => $image_2_thumbnail->getWidth(), 'field_image_2:medium:width' => $image_2_medium->getWidth(), 'field_image_2:large:width' => $image_2_large->getWidth(), - 'field_image_2:thumbnail:uri' => 'public://styles/thumbnail/public/example2.gif', - 'field_image_2:medium:uri' => 'public://styles/medium/public/example2.gif', - 'field_image_2:large:uri' => 'public://styles/large/public/example2.gif', + 'field_image_2:thumbnail:uri' => $style_thumbnail->buildUri('public://example2.gif'), + 'field_image_2:medium:uri' => $style_medium->buildUri('public://example2.gif'), + 'field_image_2:large:uri' => $style_large->buildUri('public://example2.gif'), + 'field_image_2:thumbnail:url' => $style_thumbnail->buildUrl('public://example2.gif'), + 'field_image_2:medium:url' => $style_medium->buildUrl('public://example2.gif'), + 'field_image_2:large:url' => $style_large->buildUrl('public://example2.gif'), ]; $this->assertTokens('node', ['node' => $node], $tokens); } diff --git a/token.tokens.inc b/token.tokens.inc index faaa745..8f773b6 100644 --- a/token.tokens.inc +++ b/token.tokens.inc @@ -1312,7 +1312,7 @@ function field_token_info_alter(&$info) { } // Provide image_with_image_style tokens for image fields. - if (($field->getType() == 'image') && \Drupal::moduleHandler()->moduleExists('image')) { + if ($field->getType() == 'image') { $image_styles = image_style_options(FALSE); foreach ($image_styles as $style => $description) { $info['tokens'][$field_token_name][$style] = [ @@ -1469,50 +1469,61 @@ function field_tokens($type, $tokens, array $data = array(), array $options = ar } // Handle [field_name:image_style:token] tokens. - if (\Drupal::moduleHandler()->moduleExists('image')) { - $field = $data[$data['field_name']]; + $field = $data[$data['field_name']]; + if ($field->getFieldDefinition()->getType() == 'image') { $parts = explode(':', $name); $image_styles = image_style_options(FALSE); - if ((count($parts) == 2) && array_key_exists($parts[0], $image_styles) && ($field->getFieldDefinition()->getType() == 'image')) { - // An image derivative of the original has to be created first. + if ((count($parts) == 2) && array_key_exists($parts[0], $image_styles)) { + $style_name = $parts[0]; + $derivative_property = $parts[1]; /** @var \Drupal\file\Entity\File $field_image */ $field_image = $field->entity; $original_uri = $field_image->getFileUri(); - $style = ImageStyle::load($parts[0]); - $derivative_uri = $style->buildUri($original_uri); - if (!file_exists($derivative_uri)) { - // If the image derivative already exists, don't re-generate it. - $derivative_exists = $style->createDerivative($original_uri, $derivative_uri); + // Only generate the image derivative if needed. + if ($derivative_property === 'width' || $derivative_property === 'height') { + /** @var \Drupal\Core\Image\Image $image */ + $image = \Drupal::service('image.factory')->get($original_uri); + $variables = [ + 'width' => $image->getWidth(), + 'height' => $image->getHeight(), + 'style_name' => $style_name, + 'uri' => $original_uri, + 'attributes' => [], + ]; + template_preprocess_image_style($variables); + $replacements[$original] = $variables['image']["#$derivative_property"]; } - else { - $derivative_exists = TRUE; + elseif ($derivative_property === 'uri') { + $style = ImageStyle::load($style_name); + $replacements[$original] = $style->buildUri($original_uri); } - - if ($derivative_exists) { - /** @var \Drupal\Core\Image\Image $image */ - $image = \Drupal::service('image.factory')->get($derivative_uri); - // Generate the replacement token. - switch ($parts[1]) { - case 'mimetype': - $replacements[$original] = $image->getMimeType(); - break; - case 'filesize' : - $replacements[$original] = $image->getFileSize(); - break; - case 'height' : - $replacements[$original] = $image->getHeight(); - break; - case 'width' : - $replacements[$original] = $image->getWidth(); - break; - case 'uri' : - $replacements[$original] = $derivative_uri; - break; + elseif ($derivative_property === 'url') { + $style = ImageStyle::load($style_name); + $replacements[$original] = $style->buildUrl($original_uri); + } + else { + // Generate the image derivative, if it doesn't already exist. + $style = ImageStyle::load($style_name); + $derivative_uri = $style->buildUri($original_uri); + $derivative_exists = true; + if (!file_exists($derivative_uri)) { + $derivative_exists = $style->createDerivative($original_uri, $derivative_uri); + } + if ($derivative_exists) { + $image = \Drupal::service('image.factory')->get($derivative_uri); + // Provide the replacement. + switch ($derivative_property) { + case 'mimetype': + $replacements[$original] = $image->getMimeType(); + break; + case 'filesize' : + $replacements[$original] = $image->getFileSize(); + break; + } } } - continue; } } }