Skip to content
Merged
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
30 changes: 30 additions & 0 deletions DependencyInjection/AdmingeneratorFormExtensionsExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
}
}
4 changes: 0 additions & 4 deletions Resources/config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,6 @@
</service>

<!-- Twig extensions -->
<service id="admingenerator.twig.extension.image_assets" class="Admingenerator\FormExtensionsBundle\Twig\Extension\ImageAssetsExtension">
<tag name="twig.extension" />
<argument type="service" id="service_container" />
</service>

<service id="admingenerator.twig.extension.include_globals" class="Admingenerator\FormExtensionsBundle\Twig\Extension\IncludeGlobalsExtension">
<tag name="twig.extension" />
Expand Down
95 changes: 30 additions & 65 deletions Twig/Extension/ImageAssetsExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -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 <loostro@gmail.com>
*/
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;
}

/**
Expand All @@ -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.
*
Expand All @@ -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();
}

Expand All @@ -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.
*
Expand Down