Skip to content

Commit

Permalink
Make SonataEasyExtends optional
Browse files Browse the repository at this point in the history
  • Loading branch information
jordisala1991 committed Jun 14, 2020
1 parent d24b74e commit cef3c52
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 5 deletions.
3 changes: 1 addition & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@
"php": "^7.2",
"cocur/slugify": "^2.0 || ^3.0 || ^4.0",
"sonata-project/datagrid-bundle": "^2.3 || ^3.0",
"sonata-project/doctrine-extensions": "^1.6.0",
"sonata-project/easy-extends-bundle": "^2.5",
"sonata-project/doctrine-extensions": "^1.6",
"sonata-project/form-extensions": "^0.1.1 || ^1.4",
"symfony/config": "^4.3",
"symfony/console": "^4.3",
Expand Down
72 changes: 69 additions & 3 deletions src/DependencyInjection/SonataClassificationExtension.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,9 @@

namespace Sonata\ClassificationBundle\DependencyInjection;

use Sonata\EasyExtendsBundle\Mapper\DoctrineCollector;
use Sonata\Doctrine\Mapper\Builder\OptionsBuilder;
use Sonata\Doctrine\Mapper\DoctrineCollector;
use Sonata\EasyExtendsBundle\Mapper\DoctrineCollector as DeprecatedDoctrineCollector;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
Expand Down Expand Up @@ -52,7 +54,18 @@ public function load(array $configs, ContainerBuilder $container)
$loader->load('admin.xml');
}

$this->registerDoctrineMapping($config);
if (isset($bundles['SonataDoctrineBundle'])) {
$this->registerSonataDoctrineMapping($config);
} else {
// NEXT MAJOR: Throw error when not registering SonataDoctrineBundle
@trigger_error(
'Using SonataEasyExtendsBundle is deprecated since sonata-project/classification-bundle 3.x. Please register SonataDoctrineBundle as a bundle instead.',
E_USER_DEPRECATED
);

$this->registerDoctrineMapping($config);
}

$this->configureClass($config, $container);
$this->configureAdmin($config, $container);
}
Expand Down Expand Up @@ -105,7 +118,7 @@ public function registerDoctrineMapping(array $config)
}
}

$collector = DoctrineCollector::getInstance();
$collector = DeprecatedDoctrineCollector::getInstance();

$collector->addAssociation($config['class']['category'], 'mapOneToMany', [
'fieldName' => 'children',
Expand Down Expand Up @@ -234,4 +247,57 @@ public function registerDoctrineMapping(array $config)
]);
}
}

private function registerSonataDoctrineMapping(array $config): void
{
foreach ($config['class'] as $type => $class) {
if ('media' !== $type && !class_exists($class)) {
return;
}
}

$collector = DoctrineCollector::getInstance();

$childrenOptions = OptionsBuilder::createOneToMany('children', $config['class']['category'])
->cascade(['persist'])
->mappedBy('parent')
->orphanRemoval()
->addOrder('position', 'ASC');

$parentOptions = OptionsBuilder::createManyToOne('parent', $config['class']['category'])
->cascade(['persist', 'refresh', 'merge', 'detach', 'remove'])
->inversedBy('children')
->addJoin([
'name' => 'parent_id',
'referencedColumnName' => 'id',
]);

$contextOptions = OptionsBuilder::createManyToOne('context', $config['class']['context'])
->cascade(['persist'])
->addJoin([
'name' => 'context',
'referencedColumnName' => 'id',
]);

$collector->addAssociation($config['class']['category'], 'mapOneToMany', $childrenOptions);
$collector->addAssociation($config['class']['category'], 'mapManyToOne', $parentOptions);
$collector->addAssociation($config['class']['category'], 'mapManyToOne', $contextOptions);
$collector->addAssociation($config['class']['tag'], 'mapManyToOne', $contextOptions);
$collector->addAssociation($config['class']['collection'], 'mapManyToOne', $contextOptions);
$collector->addUnique($config['class']['tag'], 'tag_context', ['slug', 'context']);
$collector->addUnique($config['class']['collection'], 'tag_collection', ['slug', 'context']);

if (null !== $config['class']['media']) {
$mediaOptions = OptionsBuilder::createManyToOne('media', $config['class']['media'])
->cascade(['persist'])
->addJoin([
'name' => 'media_id',
'referencedColumnName' => 'id',
'onDelete' => 'SET NULL',
]);

$collector->addAssociation($config['class']['collection'], 'mapManyToOne', $mediaOptions);
$collector->addAssociation($config['class']['category'], 'mapManyToOne', $mediaOptions);
}
}
}

0 comments on commit cef3c52

Please sign in to comment.