Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions src/bundle/DependencyInjection/EzEnhancedImageAssetExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,5 +84,34 @@ public function prepend(ContainerBuilder $container): void
$container->prependExtensionConfig($extensionName, $config);
$container->addResource(new FileResource($configFile));
}

$configs = $container->getExtensionConfig('ezpublish');
$newConfig = [];
foreach ($configs as $config) {
if (!isset($config['system'])) {
continue;
}

foreach ($config['system'] as $system => $systemConfig) {
if (!isset($systemConfig['image_variations'])) {
continue;
}

foreach (array_keys($systemConfig['image_variations']) as $imageVariation) {
if (false !== strpos($imageVariation, '_retina')) {
$webpVariationName = preg_replace('/^(.+)(_retina)$/', '$1_webp$2', $imageVariation);
} else {
$webpVariationName = $imageVariation.'_webp';
}
$newConfig['system'][$system]['image_variations'][$webpVariationName] = [
'reference' => $imageVariation,
'filters' => [
['name' => 'toFormat', 'params' => ['format' => 'webp']],
],
];
}
}
}
$container->prependExtensionConfig('ezpublish', $newConfig);
}
}
14 changes: 10 additions & 4 deletions src/bundle/Resources/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ services:

Novactive\EzEnhancedImageAsset\Imagine\Filter\Loader\FocusedThumbnailFilterLoader:
tags:
- {name: 'liip_imagine.filter.loader', loader: 'focusedThumbnail'}
- { name: 'liip_imagine.filter.loader', loader: 'focusedThumbnail' }

Novactive\EzEnhancedImageAsset\Imagine\Filter\Loader\PlaceholderFilterLoader:
tags:
Expand All @@ -38,6 +38,11 @@ services:
tags:
- { name: "liip_imagine.filter.loader", loader: 'webOptimization' }

Novactive\EzEnhancedImageAsset\Imagine\Filter\Loader\ToFormatFilterLoader:
tags:
- { name: "liip_imagine.filter.loader", loader: 'toFormat' }


Novactive\EzEnhancedImageAsset\Imagine\FocusedImageAliasGenerator:

ezpublish.image_alias.imagine.alias_generator:
Expand All @@ -51,9 +56,7 @@ services:
decorates: 'liip_imagine.filter.configuration'
arguments:
$filterConfiguration: '@Novactive\EzEnhancedImageAsset\Imagine\Filter\FilterConfiguration.inner'
calls:
- [setDefaultPostProcessors, ['$image_default_post_processors;ez_enhanced_image_asset$']]
- [setDefaultConfig, ['$image_default_config;ez_enhanced_image_asset$']]


Novactive\EzEnhancedImageAsset\FieldValueConverter\ChainFieldValueConverter:
arguments:
Expand All @@ -70,3 +73,6 @@ services:
Novactive\EzEnhancedImageAsset\Imagine\PlaceholderProvider\RemoteProvider:
tags:
- { name: 'ezpublish.placeholder_provider', type: 'enhanced_remote' }

Novactive\EzEnhancedImageAsset\Imagine\AliasDirectoryVariationPathGenerator:
decorates: 'ezpublish.image_alias.variation_path_generator.alias_directory'
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,29 @@
{% block enhancedimage_field %}
{% spaceless %}
{% set lazyLoad = parameters.lazyLoad is defined ? parameters.lazyLoad : lazy_load_images %}
{% set alias = parameters.alias|default( 'original' ) %}
{% set alternativeAliasList = parameters.alternativeAlias|default( [] ) %}
{% if not ez_is_field_empty( content, field ) %}
{% set imageAttrs = ez_image_attrs( field, versionInfo, parameters.alias|default( 'original' ), {
{% set imageAttrs = ez_image_attrs( field, versionInfo, alias, {
lazyLoad: lazyLoad,
retina: parameters.retina|default( enable_retina_variations ),
attrs: {
'class': parameters.class|default('') ~ ' enhancedimage--img',
'alt': parameters.alternativeText|default(field.value.alternativeText)
}
}) %}
{% set alternativeAliasList = parameters.alternativeAlias|default( [] ) %}

{% set attr = attr|merge({
'class': (attr.class|default('') ~ ' enhancedimage--wrapper enhancedimage--focused-img--wrapper')|trim,
}) %}
{% set alternativeAliasList = alternativeAliasList|merge([{'alias': alias ~ '_webp'}]) %}
<picture {{ block( 'field_attributes' ) }}>
{% for alternativeAlias in alternativeAliasList %}
{% set alternativeImageAttrs = ez_image_attrs( field, versionInfo, alternativeAlias.alias, {
lazyLoad: lazyLoad,
retina: parameters.retina|default( enable_retina_variations ),
attrs: {
'media': alternativeAlias.media,
'media': alternativeAlias.media|default,
'data-name': alternativeAlias.alias,
}
}) %}
Expand All @@ -35,7 +37,7 @@

{% if lazyLoad %}
{% set placeholderAlias = ez_image_alias(field, versionInfo, 'placeholder') %}
<img src="{{ placeholderAlias.uri }}" class="placeholder" width="{{ imageAttrs['data-width'] }}" height="{{ imageAttrs['data-height'] }}" alt=""/>
<img src="{{ placeholderAlias.uri }}" class="placeholder" width="{{ imageAttrs['data-width'] }}" height="{{ imageAttrs['data-height'] }}" alt="{{ field.value.alternativeText }}"/>
{% endif %}
</picture>
{% endif %}
Expand All @@ -45,27 +47,29 @@
{% block ezimage_field %}
{% spaceless %}
{% set lazyLoad = parameters.lazyLoad is defined ? parameters.lazyLoad : lazy_load_images %}
{% set alias = parameters.alias|default( 'original' ) %}
{% set alternativeAliasList = parameters.alternativeAlias|default( [] ) %}
{% if not ez_is_field_empty( content, field ) %}
{% set imageAttrs = ez_image_attrs( field, versionInfo, parameters.alias|default( 'original' ), {
{% set imageAttrs = ez_image_attrs( field, versionInfo, alias, {
lazyLoad: lazyLoad,
retina: parameters.retina|default( enable_retina_variations ),
attrs: {
'class': parameters.class|default('') ~ ' enhancedimage--img',
'alt': parameters.alternativeText|default(field.value.alternativeText)
}
}) %}
{% set alternativeAliasList = parameters.alternativeAlias|default( [] ) %}

{% set attr = attr|merge({
'class': (attr.class|default('') ~ ' enhancedimage--wrapper')|trim,
}) %}
{% set alternativeAliasList = alternativeAliasList|merge([{'alias': alias ~ '_webp'}]) %}
<picture {{ block( 'field_attributes' ) }}>
{% for alternativeAlias in alternativeAliasList %}
{% set alternativeImageAttrs = ez_image_attrs( field, versionInfo, alternativeAlias.alias, {
lazyLoad: lazyLoad,
retina: parameters.retina|default( enable_retina_variations ),
attrs: {
'media': alternativeAlias.media,
'media': alternativeAlias.media|default,
'data-name': alternativeAlias.alias,
}
}) %}
Expand All @@ -77,7 +81,7 @@

{% if lazyLoad %}
{% set placeholderAlias = ez_image_alias(field, versionInfo, 'placeholder') %}
<img src="{{ placeholderAlias.uri }}" class="placeholder" width="{{ imageAttrs['data-width'] }}" height="{{ imageAttrs['data-height'] }}" alt=""/>
<img src="{{ placeholderAlias.uri }}" class="placeholder" width="{{ imageAttrs['data-width'] }}" height="{{ imageAttrs['data-height'] }}" alt="{{ field.value.alternativeText }}"/>
{% endif %}
</picture>
{% endif %}
Expand Down
47 changes: 47 additions & 0 deletions src/lib/Imagine/AliasDirectoryVariationPathGenerator.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php

/*
* Nova-eZPlatform-Bundles.
*
* @package Nova-eZPlatform-Bundles
*
* @author florian
* @copyright 2018 Novactive
* @license https://github.com/Novactive/NovaHtmlIntegrationBundle/blob/master/LICENSE
*/

declare(strict_types=1);

namespace Novactive\EzEnhancedImageAsset\Imagine;

use eZ\Bundle\EzPublishCoreBundle\Imagine\VariationPathGenerator;
use Liip\ImagineBundle\Imagine\Filter\FilterConfiguration;

class AliasDirectoryVariationPathGenerator implements VariationPathGenerator
{
/**
* @var FilterConfiguration
*/
protected $filterConfiguration;

public function __construct(FilterConfiguration $filterConfiguration)
{
$this->filterConfiguration = $filterConfiguration;
}

public function getVariationPath($originalPath, $filter)
{
$filterConfig = $this->filterConfiguration->get($filter);
$info = pathinfo($originalPath);

$variationExtension = $filterConfig['format'] ?? $info['extension'];

return sprintf(
'_aliases/%s/%s/%s%s',
$filter,
$info['dirname'],
$info['filename'],
empty($variationExtension) ? '' : '.' . $variationExtension
);
}
}
76 changes: 41 additions & 35 deletions src/lib/Imagine/Filter/FilterConfiguration.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

namespace Novactive\EzEnhancedImageAsset\Imagine\Filter;

use eZ\Publish\Core\MVC\ConfigResolverInterface;
use Liip\ImagineBundle\Imagine\Filter\FilterConfiguration as BaseFilterConfiguration;

/**
Expand All @@ -26,64 +27,69 @@ class FilterConfiguration extends BaseFilterConfiguration
/** @var BaseFilterConfiguration */
protected $filterConfiguration;

/**
* @var
*/
protected $defaultPostProcessors;

/**
* @var
*/
protected $defaultConfig;
/** @var ConfigResolverInterface */
protected $configResolver;

/**
* FilterConfiguration constructor.
*/
public function __construct(BaseFilterConfiguration $filterConfiguration)
public function __construct(BaseFilterConfiguration $filterConfiguration, ConfigResolverInterface $configResolver)
{
$this->filterConfiguration = $filterConfiguration;
}

/**
* @param $defaultPostProcessors
*/
public function setDefaultPostProcessors($defaultPostProcessors): void
{
$this->defaultPostProcessors = $defaultPostProcessors;
}

/**
* @param $defaultConfig
*/
public function setDefaultConfig($defaultConfig): void
{
$this->defaultConfig = $defaultConfig;
$this->configResolver = $configResolver;
parent::__construct();
}

/**
* @param string $filter
*/
public function get($filter): array
{
$defaultPostProcessors = $this->getDefaultPostProcessors();
$defaultConfig = $this->getDefaultConfig();
$config = $this->filterConfiguration->get($filter);

if (!isset($config['jpeg_quality'])) {
$config['jpeg_quality'] = 70;
$config = array_merge(
[
'quality' => 70,
'jpeg_quality' => 70,
'webp_quality' => 70,
'png_compression_level' => 6,
],
$config
);

if ($defaultPostProcessors && (!isset($config['post_processors']) || empty($config['post_processors']))) {
$config['post_processors'] = $defaultPostProcessors;
}
if (!isset($config['png_compression_level'])) {
$config['png_compression_level'] = 6;
}
if ($this->defaultPostProcessors && (!isset($config['post_processors']) || empty($config['post_processors']))) {
$config['post_processors'] = $this->defaultPostProcessors;

if ($defaultConfig) {
$config += $defaultConfig;
}

if ($this->defaultConfig) {
$config += $this->defaultConfig;
if (!isset($config['format']) && isset($config['filters']['toFormat'])) {
$config['format'] = $config['filters']['toFormat']['format'];
}

return $config;
}

public function getDefaultPostProcessors(): ?array
{
return $this->configResolver->getParameter(
'image_default_post_processors',
'ez_enhanced_image_asset'
);
}

public function getDefaultConfig(): ?array
{
return $this->configResolver->getParameter(
'image_default_config',
'ez_enhanced_image_asset'
);
}

/**
* Sets a configuration on the given filter.
*
Expand Down
34 changes: 34 additions & 0 deletions src/lib/Imagine/Filter/Loader/ToFormatFilterLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
<?php

/*
* NovaeZEnhancedImageAssetBundle.
*
* @package NovaeZEnhancedImageAssetBundle
*
* @author florian
* @copyright 2020 Novactive
* @license https://github.com/Novactive/NovaeZEnhancedImageAssetBundle/blob/master/LICENSE
*
*/

declare(strict_types=1);

namespace Novactive\EzEnhancedImageAsset\Imagine\Filter\Loader;

use Imagine\Image\ImageInterface;
use Liip\ImagineBundle\Imagine\Filter\Loader\LoaderInterface;
use Novactive\EzEnhancedImageAsset\Imagine\Filter\FilterConfiguration;

class ToFormatFilterLoader implements LoaderInterface
{
/**
* {@inheritDoc}
*/
public function load(ImageInterface $image, array $options = []): ImageInterface
{
/*
* Actual conversion is done using @see FilterConfiguration::get line 72
*/
return $image;
}
}
Loading