Skip to content

Commit

Permalink
Mark admin extensions as internal
Browse files Browse the repository at this point in the history
  • Loading branch information
franmomu committed Sep 21, 2021
1 parent 9b23237 commit 5a22cb1
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 71 deletions.
30 changes: 8 additions & 22 deletions src/Admin/Extension/AbstractTranslatableAdminExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@
use Sonata\AdminBundle\Admin\AbstractAdminExtension;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\TranslationBundle\Checker\TranslatableChecker;
use Sonata\TranslationBundle\Model\TranslatableInterface;
use Sonata\TranslationBundle\Provider\LocaleProviderInterface;

/**
* @author Nicolas Bastien <nbastien.pro@gmail.com>
*
* @phpstan-extends AbstractAdminExtension<TranslatableInterface>
* @phpstan-template T of object
* @phpstan-extends AbstractAdminExtension<T>
*
* @internal
*/
Expand Down Expand Up @@ -54,42 +54,28 @@ public function __construct(TranslatableChecker $translatableChecker, LocaleProv
$this->localeProvider = $localeProvider;
}

public function setTranslatableChecker(TranslatableChecker $translatableChecker): void
public function configurePersistentParameters(AdminInterface $admin, array $parameters): array
{
$this->translatableChecker = $translatableChecker;
$parameters[self::TRANSLATABLE_LOCALE_PARAMETER] = $this->getTranslatableLocale();

return $parameters;
}

public function getTranslatableChecker(): TranslatableChecker
final protected function getTranslatableChecker(): TranslatableChecker
{
return $this->translatableChecker;
}

/**
* Return current translatable locale
* ie: the locale used to load object translations != current request locale.
*
* @phpstan-param AdminInterface<TranslatableInterface> $admin
*/
public function getTranslatableLocale(): string
final protected function getTranslatableLocale(): string
{
if (null === $this->translatableLocale) {
$this->translatableLocale = $this->localeProvider->get();
}

return $this->translatableLocale;
}

public function configurePersistentParameters(AdminInterface $admin, array $parameters): array
{
$parameters[self::TRANSLATABLE_LOCALE_PARAMETER] = $this->getTranslatableLocale();

return $parameters;
}

public function alterNewInstance(AdminInterface $admin, object $object): void
{
if (null === $object->getLocale()) {
$object->setLocale($this->getTranslatableLocale());
}
}
}
18 changes: 15 additions & 3 deletions src/Admin/Extension/Gedmo/TranslatableAdminExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,15 @@
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Sonata\TranslationBundle\Admin\Extension\AbstractTranslatableAdminExtension;
use Sonata\TranslationBundle\Checker\TranslatableChecker;
use Sonata\TranslationBundle\Model\Gedmo\TranslatableInterface;
use Sonata\TranslationBundle\Provider\LocaleProviderInterface;

/**
* @author Nicolas Bastien <nbastien.pro@gmail.com>
*
* @phpstan-extends AbstractTranslatableAdminExtension<TranslatableInterface>
*
* @internal
*/
final class TranslatableAdminExtension extends AbstractTranslatableAdminExtension
{
Expand All @@ -49,24 +54,31 @@ public function __construct(
$this->managerRegistry = $managerRegistry;
}

public function alterNewInstance(AdminInterface $admin, object $object): void
{
if (null === $object->getLocale()) {
$object->setLocale($this->getTranslatableLocale());
}
}

public function alterObject(AdminInterface $admin, object $object): void
{
if ($this->getTranslatableChecker()->isTranslatable($object)) {
$this->translatableListener->setTranslatableLocale($this->getTranslatableLocale($admin));
$this->translatableListener->setTranslatableLocale($this->getTranslatableLocale());
$this->translatableListener->setTranslationFallback(false);

$objectManager = $this->managerRegistry->getManagerForClass(\get_class($object));

\assert($objectManager instanceof ObjectManager);

$objectManager->refresh($object);
$object->setLocale($this->getTranslatableLocale($admin));
$object->setLocale($this->getTranslatableLocale());
}
}

public function configureQuery(AdminInterface $admin, ProxyQueryInterface $query): void
{
$this->translatableListener->setTranslatableLocale($this->getTranslatableLocale($admin));
$this->translatableListener->setTranslatableLocale($this->getTranslatableLocale());
$this->translatableListener->setTranslationFallback(false);
}
}
17 changes: 13 additions & 4 deletions src/Admin/Extension/Knplabs/TranslatableAdminExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,35 +13,44 @@

namespace Sonata\TranslationBundle\Admin\Extension\Knplabs;

use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\TranslationBundle\Admin\Extension\AbstractTranslatableAdminExtension;

/**
* @author Alfonso Machado <email@alfonsomachado.com>
*
* @phpstan-extends AbstractTranslatableAdminExtension<TranslatableInterface>
*
* @internal
*/
final class TranslatableAdminExtension extends AbstractTranslatableAdminExtension
{
public function alterNewInstance(AdminInterface $admin, object $object): void
{
if ($this->getTranslatableChecker()->isTranslatable($object)) {
$object->setCurrentLocale($this->getTranslatableLocale($admin));
$object->setCurrentLocale($this->getTranslatableLocale());
}
}

public function alterObject(AdminInterface $admin, object $object): void
{
if ($this->getTranslatableChecker()->isTranslatable($object)) {
$object->setCurrentLocale($this->getTranslatableLocale($admin));
$object->setCurrentLocale($this->getTranslatableLocale());
}
}

public function preUpdate(AdminInterface $admin, object $object): void
{
$object->mergeNewTranslations();
if ($this->getTranslatableChecker()->isTranslatable($object)) {
$object->mergeNewTranslations();
}
}

public function prePersist(AdminInterface $admin, object $object): void
{
$object->mergeNewTranslations();
if ($this->getTranslatableChecker()->isTranslatable($object)) {
$object->mergeNewTranslations();
}
}
}
3 changes: 0 additions & 3 deletions src/DependencyInjection/SonataTranslationExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
use Gedmo\Translatable\TranslatableListener;
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface as KNPTranslatableInterface;
use Sonata\TranslationBundle\Model\Gedmo\TranslatableInterface as GedmoTranslatableInterface;
use Sonata\TranslationBundle\Model\TranslatableInterface as SonataTranslatableInterface;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
Expand Down Expand Up @@ -88,8 +87,6 @@ public function load(array $configs, ContainerBuilder $container): void
*/
$listOfInterfaces = array_merge(
[
// NEXT_MAJOR: Remove next line.
SonataTranslatableInterface::class,
KNPTranslatableInterface::class,

],
Expand Down
13 changes: 10 additions & 3 deletions tests/Admin/Extension/AbstractTranslatableAdminExtensionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
namespace Sonata\TranslationBundle\Tests\Admin\Extension;

use PHPUnit\Framework\TestCase;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\TranslationBundle\Admin\Extension\AbstractTranslatableAdminExtension;
use Sonata\TranslationBundle\Checker\TranslatableChecker;
use Sonata\TranslationBundle\Model\TranslatableInterface;
Expand All @@ -22,7 +23,7 @@
final class AbstractTranslatableAdminExtensionTest extends TestCase
{
/**
* @var AbstractTranslatableAdminExtension
* @var AbstractTranslatableAdminExtension<object>
*/
private $extension;

Expand All @@ -48,7 +49,13 @@ public function get(): string
}
};

$this->extension = new class($this->translatableChecker, $localeProvider) extends AbstractTranslatableAdminExtension {
};
$this->extension = new class($this->translatableChecker, $localeProvider) extends AbstractTranslatableAdminExtension {};
}

public function testSetsPersistentParameters(): void
{
$parameters = $this->extension->configurePersistentParameters($this->createStub(AdminInterface::class), []);

static::assertSame(['tl' => 'es'], $parameters);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
use Sonata\TranslationBundle\Admin\Extension\AbstractTranslatableAdminExtension;
use Sonata\TranslationBundle\Admin\Extension\Gedmo\TranslatableAdminExtension;
use Sonata\TranslationBundle\Checker\TranslatableChecker;
use Sonata\TranslationBundle\Model\TranslatableInterface;
use Sonata\TranslationBundle\Model\Gedmo\TranslatableInterface;
use Sonata\TranslationBundle\Provider\LocaleProviderInterface;
use Sonata\TranslationBundle\Tests\Fixtures\Model\ModelTranslatable;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@

namespace Sonata\TranslationBundle\Tests\Admin\Extension\Knplabs;

use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface as KnpTranslatableInterface;
use PHPUnit\Framework\MockObject\Stub;
use Sonata\AdminBundle\Admin\AdminInterface;
use Sonata\TranslationBundle\Admin\Extension\AbstractTranslatableAdminExtension;
use Sonata\TranslationBundle\Admin\Extension\Knplabs\TranslatableAdminExtension;
use Sonata\TranslationBundle\Checker\TranslatableChecker;
use Sonata\TranslationBundle\Model\TranslatableInterface;
use Sonata\TranslationBundle\Provider\LocaleProviderInterface;
use Sonata\TranslationBundle\Tests\Fixtures\Model\Knplabs\TranslatableEntity;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
Expand Down Expand Up @@ -74,15 +74,13 @@ public function get(): string

public function testSetLocaleForTranslatableObject(): void
{
// @phpstan-ignore-next-line
$this->extension->alterNewInstance($this->admin, $this->object);

static::assertSame('es', $this->object->getCurrentLocale());
}

public function testAlterObjectForTranslatableObject(): void
{
// @phpstan-ignore-next-line
$this->extension->alterObject($this->admin, $this->object);

static::assertSame('es', $this->object->getCurrentLocale());
Expand All @@ -93,7 +91,6 @@ public function testPreUpdate(): void
$object = $this->createMock(TranslatableEntity::class);
$object->expects(static::once())->method('mergeNewTranslations');

// @phpstan-ignore-next-line
$this->extension->preUpdate($this->admin, $object);
}

Expand All @@ -102,7 +99,6 @@ public function testPrePersist(): void
$object = $this->createMock(TranslatableEntity::class);
$object->expects(static::once())->method('mergeNewTranslations');

// @phpstan-ignore-next-line
$this->extension->prePersist($this->admin, $object);
}
}
3 changes: 3 additions & 0 deletions tests/App/Entity/KnpCategory.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

namespace Sonata\TranslationBundle\Tests\App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface;
use Knp\DoctrineBehaviors\Model\Translatable\TranslatableTrait;
Expand All @@ -34,6 +35,8 @@ class KnpCategory implements TranslatableInterface
public function __construct(string $id = '', string $name = '')
{
$this->id = $id;
$this->translations = new ArrayCollection();
$this->newTranslations = new ArrayCollection();
$this->setName($name);
}

Expand Down
40 changes: 13 additions & 27 deletions tests/App/config/services.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
*/

use Gedmo\Translatable\TranslatableListener;
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface as KnpTranslatableInterface;
use Sonata\TranslationBundle\Model\Gedmo\TranslatableInterface as GedmoTranslatableInterfaceAlias;
use Sonata\TranslationBundle\Tests\App\Admin\GedmoCategoryAdmin;
use Sonata\TranslationBundle\Tests\App\Admin\KnpCategoryAdmin;
use Sonata\TranslationBundle\Tests\App\Entity\GedmoCategory;
Expand All @@ -22,20 +20,8 @@
use Symfony\Component\DependencyInjection\Reference;

return static function (ContainerConfigurator $containerConfigurator): void {
// NEXT_MAJOR: Remove this parameter.
$containerConfigurator->parameters()
->set('sonata_translation.targets', [
'gedmo' => [
'implements' => [GedmoTranslatableInterfaceAlias::class],
'instanceof' => [],
],
'knplabs' => [
'implements' => [KnpTranslatableInterface::class],
'instanceof' => [],
],
]);
$containerConfigurator->services()

$services = $containerConfigurator->services()
->defaults()
->autowire()
->autoconfigure()
Expand All @@ -52,20 +38,20 @@
null,
])

->set(KnpCategoryAdmin::class)
->tag('sonata.admin', [
'manager_type' => 'orm',
'label' => 'Knp Category',
])
->args([
'',
KnpCategory::class,
null,
])

->set('app.gedmo.translation_listener', TranslatableListener::class)
->call('setAnnotationReader', [new Reference('annotation_reader')])
->call('setDefaultLocale', ['%locale%'])
->call('setTranslationFallback', [false])
->tag('doctrine.event_subscriber')

->set(KnpCategoryAdmin::class)
->tag('sonata.admin', [
'manager_type' => 'orm',
'label' => 'Knp Category',
])
->args([
'',
KnpCategory::class,
null,
]);
->tag('doctrine.event_subscriber');
};
3 changes: 0 additions & 3 deletions tests/Checker/TranslatableCheckerForKnpTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
use Knp\DoctrineBehaviors\Contract\Entity\TranslatableInterface as KnpTranslatableInterface;
use PHPUnit\Framework\TestCase;
use Sonata\TranslationBundle\Checker\TranslatableChecker;
use Sonata\TranslationBundle\Model\TranslatableInterface;
use Sonata\TranslationBundle\Tests\Fixtures\Model\Knplabs\TranslatableEntity;

/**
Expand All @@ -34,8 +33,6 @@ public function testIsTranslatableOnInterface(): void

$translatableChecker->setSupportedInterfaces([
KnpTranslatableInterface::class,
// NEXT_MAJOR: Remove next line.
TranslatableInterface::class,
]);

static::assertTrue($translatableChecker->isTranslatable($object));
Expand Down

0 comments on commit 5a22cb1

Please sign in to comment.