Browse Source

[Backend] Lc liip & File

develop
Fab 3 years ago
parent
commit
65b9331179
6 changed files with 125 additions and 13 deletions
  1. +1
    -1
      Field/FileManagerField.php
  2. +1
    -1
      Form/Type/FileManagerType.php
  3. +7
    -6
      Model/Cms/File.php
  4. +2
    -2
      Resources/views/crud/field/image.html.twig
  5. +3
    -3
      Resources/views/crud/form_theme.html.twig
  6. +111
    -0
      Twig/TwigExtension.php

+ 1
- 1
Field/FileManagerField.php View File

@@ -23,7 +23,7 @@ final class FileManagerField implements FieldInterface
->setProperty($propertyName)
->setLabel($label)
->setTemplatePath('@LcAdmin/crud/field/image.html.twig')
->addJsFiles('bundles/lcadmin/js/form-type-collection.js')
->addJsFiles('bundles/lcadmin/js/form-type-file-manager.js')
->setFormType(FileManagerType::class)
->addCssClass('field-text')
->setCustomOption(self::OPTION_MAX_LENGTH, null)

+ 1
- 1
Form/Type/FileManagerType.php View File

@@ -25,7 +25,7 @@ class FileManagerType extends AbstractType implements DataTransformerInterface

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('image', HiddenType::class, array(
$builder->add('path', HiddenType::class, array(
'block_prefix' => 'file_manager_image',
'label' => false
));

+ 7
- 6
Model/Cms/File.php View File

@@ -32,7 +32,7 @@ abstract class File implements SortableInterface, BlameableInterface, Timestampa
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
protected $image;
protected $path;

/**
* @Gedmo\Translatable
@@ -42,21 +42,22 @@ abstract class File implements SortableInterface, BlameableInterface, Timestampa


public function __toString(){
return 'dfe';
return $this->getLegend();
}

public function getImage(): ?string
public function getPath(): ?string
{
return $this->image;
return $this->path;
}

public function setImage(?string $image): self
public function setPath(?string $path): self
{
$this->image = $image;
$this->path = $path;

return $this;
}


public function getLegend(): ?string
{
return $this->legend;

+ 2
- 2
Resources/views/crud/field/image.html.twig View File

@@ -4,10 +4,10 @@
{% set html_id = 'ea-lightbox-' ~ field.uniqueId %}
{% if field.value is not null %}
<a href="#" class="ea-lightbox-thumbnail" title="{{ field.value.legend }}" data-featherlight="#{{ html_id }}" data-featherlight-close-on-click="anywhere">
<img src="{{ asset(field.value.image) }}" class="img-fluid">
<img src="{{ asset(field.value.path) }}" class="img-fluid">
</a>

<div id="{{ html_id }}" class="ea-lightbox">
<img src="{{ asset(field.value.image) }}">
<img src="{{ asset(field.value.path) }}">
</div>
{% endif %}

+ 3
- 3
Resources/views/crud/form_theme.html.twig View File

@@ -69,18 +69,18 @@

<div class="lc-filemanager col-xs-12">
<div class="col-md-6 col-xs-12 nopadding" style="padding: 0px;">
<img style="width: 200px; height: 150px; object-fit: contain; background: #ddd; " src="{{ form.image.vars.value }}" class="lc-filemenager-preview" id="{{ form.image.vars.id }}_preview" alt="">
<img style="width: 200px; height: 150px; object-fit: contain; background: #ddd; " src="{{ form.path.vars.value }}" class="lc-filemenager-preview" id="{{ form.path.vars.id }}_preview" alt="">
</div>
<div class="input-group">
{{ form_widget(form) }}

<div class="input-group-append">
<button type="button" class="btn btn-sm lc-filemanager-open" data-id="{{ form.image.vars.id }}"
<button type="button" class="btn btn-sm lc-filemanager-open" data-id="{{ form.path.vars.id }}"
data-target="{{ path('file_manager', {module:1, conf:'default'})|raw }}">
<i class="fa fa-folder-open-o"></i>
</button>
{% if value %}
<button type="button" class="btn btn-sm lc-filemanager-delete" data-id="{{ form.image.vars.id }}">
<button type="button" class="btn btn-sm lc-filemanager-delete" data-id="{{ form.path.vars.id }}">
<i class="fa fa-trash-o"></i>
</button>
{% endif %}

+ 111
- 0
Twig/TwigExtension.php View File

@@ -0,0 +1,111 @@
<?php

namespace Lc\AdminBundle\Twig;


use App\Entity\Page;

use Doctrine\ORM\EntityManagerInterface;
use Liip\ImagineBundle\Imagine\Cache\CacheManager;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;

class TwigExtension extends AbstractExtension
{
protected $em;
protected $kernel;
protected $parameterBag;
protected $cacheManager;
protected $requestStack;
protected $router;

public function __construct(KernelInterface $kernel, ParameterBagInterface $parameterBag, CacheManager $cacheManager, EntityManagerInterface $entityManager, RequestStack $requestStack,UrlGeneratorInterface $router)
{
$this->kernel = $kernel;
$this->parameterBag = $parameterBag;
$this->cacheManager = $cacheManager;
$this->em = $entityManager;
$this->requestStack = $requestStack;
$this->router = $router;
}

public function getFunctions()
{
return array(
new TwigFunction('lc_liip', [$this, 'lcLiip']),
new TwigFunction('page_by_dev_alias', [$this, 'getPageByDevAlias']),
new TwigFunction('translated_urls', [$this, 'getTranslatedUrls'])
);
}


public function getFilters()
{
return [
new TwigFilter('lc_cache', [$this, 'lcCache']),
];
}

public function lcCache($file)
{
$cacheTime = filemtime($this->kernel->getProjectDir() . '/public' . $file);
if ($cacheTime) {
return $file . '?c=' . $cacheTime;
} else {
return $file . "?c=0";
}
}

public function lcLiip($path, $thumb = 'tile', $default = 'default.jpg')
{
if (substr($path, 0, 1) === '/') $path = substr($path, 1);

if ($path) {
$fileManagerFolder = substr($this->getFileManagerFolder(), 1) ;

if (strpos($path, $fileManagerFolder) === false) {
$path = $fileManagerFolder . '/' . $path;
}

if (file_exists($path)) {
return $this->cacheManager->getBrowserPath($path, $thumb);
}
}

return $this->cacheManager->getBrowserPath($this->getFileManagerFolder() . '/' . $default, $thumb);
}

function getTranslatedUrls()
{
$ret = array();
$langs = $this->parameterBag->get('app.locales');
$currentRoute = $this->requestStack->getCurrentRequest()->get('_route');

$params = array_merge((array)$this->requestStack->getCurrentRequest()->get('_route_params'), $_GET);

if ($currentRoute) {
foreach($langs as $lg) {
$ret[$lg] = $this->router->generate($currentRoute, array_merge($params, array('_locale'=>$lg)));
}
}

return $ret;
}

public function getFileManagerFolder()
{
return $this->parameterBag->get('app.path_uploads');
}

public function getPageByDevAlias($devAlias)
{

return $this->em->getRepository(Page::class)->findOneByDevAlias($devAlias);
}

}

Loading…
Cancel
Save