Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
66.67% |
10 / 15 |
CRAP | |
60.87% |
42 / 69 |
| ResponsiveImageStyle | |
0.00% |
0 / 1 |
|
66.67% |
10 / 15 |
103.26 | |
60.87% |
42 / 69 |
| __construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| addImageStyleMapping | |
100.00% |
1 / 1 |
4 | |
100.00% |
13 / 13 |
|||
| hasImageStyleMappings | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getKeyedImageStyleMappings | |
100.00% |
1 / 1 |
4 | |
100.00% |
6 / 6 |
|||
| getImageStyleMappings | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setBreakpointGroup | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
| getBreakpointGroup | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setFallbackImageStyle | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 2 |
|||
| getFallbackImageStyle | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 1 |
|||
| removeImageStyleMappings | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
| calculateDependencies | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
| anonymous function | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| isEmptyImageStyleMapping | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 11 |
|||
| getImageStyleMapping | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
| getImageStyleIds | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 11 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\responsive_image\Entity\ResponsiveImageStyle. | |
| */ | |
| namespace Drupal\responsive_image\Entity; | |
| use Drupal\Core\Config\Entity\ConfigEntityBase; | |
| use Drupal\image\Entity\ImageStyle; | |
| use Drupal\responsive_image\ResponsiveImageStyleInterface; | |
| /** | |
| * Defines the responsive image style entity. | |
| * | |
| * @ConfigEntityType( | |
| * id = "responsive_image_style", | |
| * label = @Translation("Responsive image style"), | |
| * handlers = { | |
| * "list_builder" = "Drupal\responsive_image\ResponsiveImageStyleListBuilder", | |
| * "form" = { | |
| * "edit" = "Drupal\responsive_image\ResponsiveImageStyleForm", | |
| * "add" = "Drupal\responsive_image\ResponsiveImageStyleForm", | |
| * "delete" = "Drupal\Core\Entity\EntityDeleteForm", | |
| * "duplicate" = "Drupal\responsive_image\ResponsiveImageStyleForm" | |
| * } | |
| * }, | |
| * admin_permission = "administer responsive images", | |
| * config_prefix = "styles", | |
| * entity_keys = { | |
| * "id" = "id", | |
| * "label" = "label" | |
| * }, | |
| * links = { | |
| * "edit-form" = "/admin/config/media/responsive-image-style/{responsive_image_style}", | |
| * "duplicate-form" = "/admin/config/media/responsive-image-style/{responsive_image_style}/duplicate", | |
| * "delete-form" = "/admin/config/media/responsive-image-style/{responsive_image_style}/delete", | |
| * "collection" = "/admin/config/media/responsive-image-style", | |
| * } | |
| * ) | |
| */ | |
| class ResponsiveImageStyle extends ConfigEntityBase implements ResponsiveImageStyleInterface { | |
| /** | |
| * The responsive image ID (machine name). | |
| * | |
| * @var string | |
| */ | |
| protected $id; | |
| /** | |
| * The responsive image label. | |
| * | |
| * @var string | |
| */ | |
| protected $label; | |
| /** | |
| * The image style mappings. | |
| * | |
| * Each image style mapping array contains the following keys: | |
| * - image_mapping_type: Either 'image_style' or 'sizes'. | |
| * - image_mapping: | |
| * - If image_mapping_type is 'image_style', the image style ID (a | |
| * string). | |
| * - If image_mapping_type is 'sizes', an array with following keys: | |
| * - sizes: The value for the 'sizes' attribute. | |
| * - sizes_image_styles: The image styles to use for the 'srcset' | |
| * attribute. | |
| * - breakpoint_id: The breakpoint ID for this image style mapping. | |
| * - multiplier: The multiplier for this image style mapping. | |
| * | |
| * @var array | |
| */ | |
| protected $image_style_mappings = array(); | |
| /** | |
| * @var array | |
| */ | |
| protected $keyedImageStyleMappings; | |
| /** | |
| * The responsive image breakpoint group. | |
| * | |
| * @var string | |
| */ | |
| protected $breakpoint_group = ''; | |
| /** | |
| * The fallback image style. | |
| * | |
| * @var string | |
| */ | |
| protected $fallback_image_style = ''; | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function __construct(array $values, $entity_type_id = 'responsive_image_style') { | |
| parent::__construct($values, $entity_type_id); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function addImageStyleMapping($breakpoint_id, $multiplier, array $image_style_mapping) { | |
| // If there is an existing mapping, overwrite it. | |
| foreach ($this->image_style_mappings as &$mapping) { | |
| if ($mapping['breakpoint_id'] === $breakpoint_id && $mapping['multiplier'] === $multiplier) { | |
| $mapping = array( | |
| 'breakpoint_id' => $breakpoint_id, | |
| 'multiplier' => $multiplier, | |
| ) + $image_style_mapping; | |
| $this->keyedImageStyleMappings = NULL; | |
| return $this; | |
| } | |
| } | |
| $this->image_style_mappings[] = array( | |
| 'breakpoint_id' => $breakpoint_id, | |
| 'multiplier' => $multiplier, | |
| ) + $image_style_mapping; | |
| $this->keyedImageStyleMappings = NULL; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function hasImageStyleMappings() { | |
| $mappings = $this->getKeyedImageStyleMappings(); | |
| return !empty($mappings); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getKeyedImageStyleMappings() { | |
| if (!$this->keyedImageStyleMappings) { | |
| $this->keyedImageStyleMappings = array(); | |
| foreach($this->image_style_mappings as $mapping) { | |
| if (!static::isEmptyImageStyleMapping($mapping)) { | |
| $this->keyedImageStyleMappings[$mapping['breakpoint_id']][$mapping['multiplier']] = $mapping; | |
| } | |
| } | |
| } | |
| return $this->keyedImageStyleMappings; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getImageStyleMappings() { | |
| return $this->image_style_mappings; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setBreakpointGroup($breakpoint_group) { | |
| // If the breakpoint group is changed then the image style mappings are | |
| // invalid. | |
| if ($breakpoint_group !== $this->breakpoint_group) { | |
| $this->removeImageStyleMappings(); | |
| } | |
| $this->breakpoint_group = $breakpoint_group; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getBreakpointGroup() { | |
| return $this->breakpoint_group; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setFallbackImageStyle($fallback_image_style) { | |
| $this->fallback_image_style = $fallback_image_style; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getFallbackImageStyle() { | |
| return $this->fallback_image_style; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function removeImageStyleMappings() { | |
| $this->image_style_mappings = array(); | |
| $this->keyedImageStyleMappings = NULL; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function calculateDependencies() { | |
| parent::calculateDependencies(); | |
| $providers = \Drupal::service('breakpoint.manager')->getGroupProviders($this->breakpoint_group); | |
| foreach ($providers as $provider => $type) { | |
| $this->addDependency($type, $provider); | |
| } | |
| // Extract all the styles from the image style mappings. | |
| $styles = ImageStyle::loadMultiple($this->getImageStyleIds()); | |
| array_walk($styles, function ($style) { | |
| $this->addDependency('config', $style->getConfigDependencyName()); | |
| }); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public static function isEmptyImageStyleMapping(array $image_style_mapping) { | |
| if (!empty($image_style_mapping)) { | |
| switch ($image_style_mapping['image_mapping_type']) { | |
| case 'sizes': | |
| // The image style mapping must have a sizes attribute defined and one | |
| // or more image styles selected. | |
| if ($image_style_mapping['image_mapping']['sizes'] && $image_style_mapping['image_mapping']['sizes_image_styles']) { | |
| return FALSE; | |
| } | |
| break; | |
| case 'image_style': | |
| // The image style mapping must have an image style selected. | |
| if ($image_style_mapping['image_mapping']) { | |
| return FALSE; | |
| } | |
| break; | |
| } | |
| } | |
| return TRUE; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getImageStyleMapping($breakpoint_id, $multiplier) { | |
| $map = $this->getKeyedImageStyleMappings(); | |
| if (isset($map[$breakpoint_id][$multiplier])) { | |
| return $map[$breakpoint_id][$multiplier]; | |
| } | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getImageStyleIds() { | |
| $image_styles = [$this->getFallbackImageStyle()]; | |
| foreach ($this->getImageStyleMappings() as $image_style_mapping) { | |
| // Only image styles of non-empty mappings should be loaded. | |
| if (!$this::isEmptyImageStyleMapping($image_style_mapping)) { | |
| switch ($image_style_mapping['image_mapping_type']) { | |
| case 'image_style': | |
| $image_styles[] = $image_style_mapping['image_mapping']; | |
| break; | |
| case 'sizes': | |
| $image_styles = array_merge($image_styles, $image_style_mapping['image_mapping']['sizes_image_styles']); | |
| break; | |
| } | |
| } | |
| } | |
| return array_values(array_filter(array_unique($image_styles))); | |
| } | |
| } |