From 627a08321ed6f11bcebca634af5c236a07178ef1 Mon Sep 17 00:00:00 2001 From: Tobias Feijten Date: Wed, 18 Nov 2020 20:14:28 +0100 Subject: [PATCH] Update to accommodate Vich uploader bundle without public services keeping BC --- .../AdmingeneratorFormExtensionsExtension.php | 30 ++++++ Resources/config/services.xml | 4 - Twig/Extension/ImageAssetsExtension.php | 95 ++++++------------- 3 files changed, 60 insertions(+), 69 deletions(-) diff --git a/DependencyInjection/AdmingeneratorFormExtensionsExtension.php b/DependencyInjection/AdmingeneratorFormExtensionsExtension.php index cdc81d1..583d093 100644 --- a/DependencyInjection/AdmingeneratorFormExtensionsExtension.php +++ b/DependencyInjection/AdmingeneratorFormExtensionsExtension.php @@ -7,6 +7,7 @@ use Admingenerator\FormExtensionsBundle\Form\Extension\HelpMessageExtension; use Admingenerator\FormExtensionsBundle\Form\Extension\NoValidateExtension; use Admingenerator\FormExtensionsBundle\Form\Extension\SingleUploadExtension; +use Admingenerator\FormExtensionsBundle\Twig\Extension\ImageAssetsExtension; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader; @@ -43,6 +44,8 @@ public function load(array $configs, ContainerBuilder $container) $container->setParameter('admingenerator.form.include_blueimp', $config['include_blueimp']); $container->setParameter('admingenerator.form.include_gmaps', $config['include_gmaps']); + $this->configureAssetsExtension($container, $config['upload_manager'], $config['image_manipulator']); + $this->configureExtensions($config['extensions'], $container); $this->loadUploadCollectionListener($config['upload_collection'], $container); @@ -113,4 +116,31 @@ private function registerExtension(ContainerBuilder $container, string $serviceI ]); $container->setDefinition($serviceId, $extensionDefinition); } + + private function configureAssetsExtension(ContainerBuilder $container, string $uploadManager, string $imageManipulator) { + $uploaderHelperDefinition = null; + $imageExtensionDefinition = null; + if ('vich_uploader' === $uploadManager) { + if ($container->hasDefinition('vich_uploader.templating.helper.uploader_helper') || $container->hasAlias('vich_uploader.templating.helper.uploader_helper')) { + $uploaderHelperDefinition = $container->findDefinition('vich_uploader.templating.helper.uploader_helper'); + } else { + $uploaderHelperDefinition = new Reference('Vich\UploaderBundle\Twig\Extension\UploaderExtension'); + } + } + if ('liip_imagine' === $imageManipulator) { + if (class_exists('\Liip\ImagineBundle\Templating\ImagineExtension')) { + $imageExtensionDefinition = new Reference('liip_imagine.twig.extension'); + } else { + $imageExtensionDefinition = new Reference('liip_imagine.templating.filter_extension'); + } + } else if ('avalanche_imagine' === $imageManipulator) { + $imageExtensionDefinition = new Reference('imagine.twig.extension'); + } + + $assetsExtensionDefinition = new Definition(ImageAssetsExtension::class); + $assetsExtensionDefinition->setArgument('$uploaderExtension', $uploaderHelperDefinition); + $assetsExtensionDefinition->setArgument('$filterExtension', $imageExtensionDefinition); + $assetsExtensionDefinition->addTag('twig.extension'); + $container->setDefinition('admingenerator.twig.extension.image_assets', $assetsExtensionDefinition); + } } diff --git a/Resources/config/services.xml b/Resources/config/services.xml index ec58f95..eb5f98a 100644 --- a/Resources/config/services.xml +++ b/Resources/config/services.xml @@ -114,10 +114,6 @@ - - - - diff --git a/Twig/Extension/ImageAssetsExtension.php b/Twig/Extension/ImageAssetsExtension.php index eda49b5..28b24e8 100644 --- a/Twig/Extension/ImageAssetsExtension.php +++ b/Twig/Extension/ImageAssetsExtension.php @@ -2,28 +2,28 @@ namespace Admingenerator\FormExtensionsBundle\Twig\Extension; -use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\DependencyInjection\Container; - /** - * This extension adds common twig function for various upload manager - * bundles and common twig filter image manipulation bundles. - * - * Depending on %admingenerator.form.upload_manager% setting a diffrent + * This extension adds common twig function for various upload manager + * bundles and common twig filter image manipulation bundles. + * + * Depending on %admingenerator.form.upload_manager% setting a diffrent * upload manager bundle is used. - * - * Depending on %admingenerator.form.image_manipulator% setting a diffrent + * + * Depending on %admingenerator.form.image_manipulator% setting a diffrent * image manipulation bundle is used. - * + * * @author Piotr Gołębiewski */ class ImageAssetsExtension extends \Twig_Extension { - protected $container; + protected $uploaderExtension; + + protected $filterExtension; - public function __construct(ContainerInterface $container) + public function __construct($uploaderExtension, $filterExtension) { - $this->container = $container; + $this->uploaderExtension = $uploaderExtension; + $this->filterExtension = $filterExtension; } /** @@ -45,7 +45,7 @@ public function getFilters() 'image_filter' => new \Twig_SimpleFilter('image_filter', array($this, 'filter')), ); } - + /** * Gets the browser path for the image and filter to apply. * @@ -54,20 +54,16 @@ public function getFilters() public function asset($object, $field) { $params = func_get_args(); - - if ('vich_uploader' === $this->getUploadManager()) { - // Note: requires v0.13.0 or higher - $ext = new \Vich\UploaderBundle\Twig\Extension\UploaderExtension( - $this->container->get('vich_uploader.templating.helper.uploader_helper') - ); - - return call_user_func_array(array($ext, "asset"), $params); + + if ($this->uploaderExtension instanceof \Vich\UploaderBundle\Templating\Helper\UploaderHelper + || $this->uploaderExtension instanceof \Vich\UploaderBundle\Twig\Extension\UploaderExtension) { + return call_user_func_array(array($this->uploaderExtension, "asset"), $params); } - + // In case no upload manager is used we expect object to have // a special method returning file's path $getter = "get".Container::Camelize($field)."WebPath"; - + return $object->$getter(); } @@ -80,54 +76,23 @@ public function filter() { $params = func_get_args(); $path = $params[0]; - - if ('liip_imagine' === $this->getImageManipulator()) { - if(class_exists('\Liip\ImagineBundle\Templating\ImagineExtension')) { - $ext = new \Liip\ImagineBundle\Templating\ImagineExtension( - $this->container->get('liip_imagine.cache.manager') - ); - } else { - $ext = new \Liip\ImagineBundle\Templating\FilterExtension( - $this->container->get('liip_imagine.cache.manager') - ); - } - - return call_user_func_array(array($ext, "filter"), $params); + + if (($this->filterExtension instanceof \Liip\ImagineBundle\Templating\ImagineExtension) + || ($this->filterExtension instanceof \Liip\ImagineBundle\Templating\FilterExtension)) { + + return call_user_func_array(array($this->filterExtension, "filter"), $params); } - - if ('avalanche_imagine' === $this->getImageManipulator()) { - $ext = new \Avalanche\Bundle\ImagineBundle\Templating\ImagineExtension( - $this->container->get('imagine.cache.path.resolver') - ); - - return call_user_func_array(array($ext, "applyFilter"), $params); + + if ($this->filterExtension instanceof \Avalanche\Bundle\ImagineBundle\Templating\ImagineExtension) { + + return call_user_func_array(array($this->filterExtension, "applyFilter"), $params); } - + // In case no image manipulator is used we // return the unmodified path return $path; } - /** - * Get upload manager name - * - * @return string|null Parameter value - */ - public function getUploadManager() - { - return $this->container->getParameter('admingenerator.form.upload_manager'); - } - - /** - * Get image manipulator name - * - * @return string|null Parameter value - */ - public function getImageManipulator() - { - return $this->container->getParameter('admingenerator.form.image_manipulator'); - } - /** * Returns the name of the extension. *