TranslatableAdminExtension::alterObject()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.9
c 0
b 0
f 0
cc 2
nc 2
nop 2
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Sonata Project package.
7
 *
8
 * (c) Thomas Rabaix <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Sonata\TranslationBundle\Admin\Extension\Gedmo;
15
16
use Gedmo\Translatable\TranslatableListener;
17
use Sonata\AdminBundle\Admin\AdminInterface;
18
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
19
use Sonata\TranslationBundle\Admin\Extension\AbstractTranslatableAdminExtension;
20
use Sonata\TranslationBundle\Checker\TranslatableChecker;
21
22
/**
23
 * @author Nicolas Bastien <[email protected]>
24
 */
25
class TranslatableAdminExtension extends AbstractTranslatableAdminExtension
26
{
27
    /**
28
     * @var TranslatableListener
29
     */
30
    protected $translatableListener;
31
32
    public function __construct(TranslatableChecker $translatableChecker, ?TranslatableListener $translatableListener = null)
33
    {
34
        parent::__construct($translatableChecker);
35
        $this->translatableListener = $translatableListener;
36
    }
37
38
    /**
39
     * {@inheritdoc}
40
     */
41
    public function alterObject(AdminInterface $admin, $object): void
42
    {
43
        if ($this->getTranslatableChecker()->isTranslatable($object)) {
44
            $translatableListener = $this->getTranslatableListener($admin);
45
            $translatableListener->setTranslatableLocale($this->getTranslatableLocale($admin));
46
            $translatableListener->setTranslationFallback(false);
47
48
            $this->getContainer($admin)->get('doctrine')->getManagerForClass(\get_class($object))->refresh($object);
49
            $object->setLocale($this->getTranslatableLocale($admin));
50
        }
51
    }
52
53
    /**
54
     * {@inheritdoc}
55
     */
56
    public function configureQuery(AdminInterface $admin, ProxyQueryInterface $query, $context = 'list'): void
57
    {
58
        $this->getTranslatableListener($admin)->setTranslatableLocale($this->getTranslatableLocale($admin));
59
        $this->getTranslatableListener($admin)->setTranslationFallback(false);
60
    }
61
62
    /**
63
     * @param AdminInterface $admin Deprecated, set TranslatableListener in the constructor instead
64
     *
65
     * @return TranslatableListener
66
     */
67
    protected function getTranslatableListener(AdminInterface $admin)
68
    {
69
        if (null === $this->translatableListener) {
70
            $this->translatableListener = $this->getContainer($admin)->get(
71
                'stof_doctrine_extensions.listener.translatable'
72
            );
73
        }
74
75
        return $this->translatableListener;
76
    }
77
}
78