move twig function in runtime

This commit is contained in:
Mathieu Jaumotte 2022-02-09 11:51:52 +01:00
parent ad46776164
commit f6e667700e
3 changed files with 33 additions and 33 deletions

View File

@ -11,8 +11,6 @@ declare(strict_types=1);
namespace Chill\DocStoreBundle\Templating;
use ChampsLibres\WopiLib\Contract\Service\Discovery\DiscoveryInterface;
use Chill\DocStoreBundle\Entity\StoredObject;
use Twig\Extension\AbstractExtension;
use Twig\TwigFilter;
use Twig\TwigFunction;
@ -20,13 +18,6 @@ use Twig\TwigFunction;
class WopiEditTwigExtension extends AbstractExtension
{
private DiscoveryInterface $discovery;
public function __construct(DiscoveryInterface $discovery)
{
$this->discovery = $discovery;
}
public function getFilters(): array
{
return [
@ -40,22 +31,11 @@ class WopiEditTwigExtension extends AbstractExtension
public function getFunctions(): array
{
return [
new TwigFunction('chill_document_is_editable', [$this, 'isEditable']),
new TwigFunction('chill_document_is_editable', [WopiEditTwigExtensionRuntime::class, 'isEditable'], [
'needs_environment' => true,
'is_safe' => ['html'],
]),
];
}
public function isEditable(StoredObject $document): bool
{
$mime = $this->discovery->discoverMimeType($document->getType());
// TO CHECk is it better condition ?
if (array_key_exists('default', $mime[0])
&& $mime[0]['default'] === 'true'
) {
return true;
}
//dump($document, $mime);
return false;
}
}

View File

@ -11,6 +11,7 @@ declare(strict_types=1);
namespace Chill\DocStoreBundle\Templating;
use ChampsLibres\WopiLib\Contract\Service\Discovery\DiscoveryInterface;
use Chill\DocStoreBundle\Entity\StoredObject;
use Twig\Environment;
use Twig\Extension\RuntimeExtensionInterface;
@ -20,6 +21,13 @@ class WopiEditTwigExtensionRuntime implements RuntimeExtensionInterface
public const TEMPLATE = '@ChillDocStore/Button/wopi_edit_document.html.twig';
private DiscoveryInterface $discovery;
public function __construct(DiscoveryInterface $discovery)
{
$this->discovery = $discovery;
}
public function renderEditButton(Environment $environment, StoredObject $document, ?Array $options = null): string
{
return $environment->render(self::TEMPLATE, [
@ -27,4 +35,21 @@ class WopiEditTwigExtensionRuntime implements RuntimeExtensionInterface
'options' => $options
]);
}
public function isEditable(Environment $environment, StoredObject $document): bool
{
$mime_type = $this->discovery->discoverMimeType($document->getType());
if (empty($mime_type)) {
return false;
}
if (array_key_exists('default', $mime_type[0])
&& $mime_type[0]['default'] === 'true'
) {
return true;
}
return false;
}
}

View File

@ -1,11 +1,6 @@
services:
Chill\DocStoreBundle\Templating\WopiEditTwigExtension:
arguments:
$discovery: '@ChampsLibres\WopiLib\Contract\Service\Discovery\DiscoveryInterface'
tags:
- { name: twig.extension }
Chill\DocStoreBundle\Templating\WopiEditTwigExtensionRuntime:
tags:
- { name: twig.runtime }
Chill\DocStoreBundle\Templating\:
resource: ../../Templating
autoconfigure: true
autowire: true