Update
This commit is contained in:
parent
a37785b391
commit
33458b2ca3
9915 changed files with 1247019 additions and 0 deletions
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace Stof\DoctrineExtensionsBundle\DependencyInjection\Compiler;
|
||||
|
||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
|
||||
class SecurityContextPass implements CompilerPassInterface
|
||||
{
|
||||
public function process(ContainerBuilder $container)
|
||||
{
|
||||
if ($container->has('security.token_storage')) {
|
||||
$args = array(new Reference('security.token_storage'), new Reference('security.authorization_checker'));
|
||||
} elseif ($container->has('security.context')) {
|
||||
$args = array(new Reference('security.context'));
|
||||
} else {
|
||||
return; // SecurityBundle is not configured
|
||||
}
|
||||
|
||||
$defs = array(
|
||||
$container->findDefinition('stof_doctrine_extensions.event_listener.blame'),
|
||||
$container->findDefinition('stof_doctrine_extensions.event_listener.logger'),
|
||||
);
|
||||
|
||||
foreach ($defs as $def) {
|
||||
foreach ($args as $argument) {
|
||||
$def->addArgument($argument);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
<?php
|
||||
|
||||
namespace Stof\DoctrineExtensionsBundle\DependencyInjection\Compiler;
|
||||
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
|
||||
|
||||
class ValidateExtensionConfigurationPass implements CompilerPassInterface
|
||||
{
|
||||
/**
|
||||
* Validate the DoctrineExtensions DIC extension config.
|
||||
*
|
||||
* This validation runs in a discrete compiler pass because it depends on
|
||||
* DBAL and ODM services, which aren't available during the config merge
|
||||
* compiler pass.
|
||||
*
|
||||
* @param ContainerBuilder $container
|
||||
*/
|
||||
public function process(ContainerBuilder $container)
|
||||
{
|
||||
$container->getExtension('stof_doctrine_extensions')->configValidate($container);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
<?php
|
||||
|
||||
namespace Stof\DoctrineExtensionsBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
|
||||
use Symfony\Component\Config\Definition\ConfigurationInterface;
|
||||
|
||||
class Configuration implements ConfigurationInterface
|
||||
{
|
||||
/**
|
||||
* Generates the configuration tree.
|
||||
*
|
||||
* @return TreeBuilder
|
||||
*/
|
||||
public function getConfigTreeBuilder()
|
||||
{
|
||||
$treeBuilder = new TreeBuilder();
|
||||
$rootNode = $treeBuilder->root('stof_doctrine_extensions');
|
||||
|
||||
$rootNode
|
||||
->append($this->getVendorNode('orm'))
|
||||
->append($this->getVendorNode('mongodb'))
|
||||
->append($this->getClassNode())
|
||||
->append($this->getUploadableNode())
|
||||
->children()
|
||||
->scalarNode('default_locale')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('en')
|
||||
->end()
|
||||
->booleanNode('translation_fallback')->defaultFalse()->end()
|
||||
->booleanNode('persist_default_translation')->defaultFalse()->end()
|
||||
->booleanNode('skip_translation_on_load')->defaultFalse()->end()
|
||||
->end()
|
||||
;
|
||||
|
||||
return $treeBuilder;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
*/
|
||||
private function getVendorNode($name)
|
||||
{
|
||||
$treeBuilder = new TreeBuilder();
|
||||
$node = $treeBuilder->root($name);
|
||||
|
||||
$node
|
||||
->useAttributeAsKey('id')
|
||||
->prototype('array')
|
||||
->children()
|
||||
->scalarNode('translatable')->defaultFalse()->end()
|
||||
->scalarNode('timestampable')->defaultFalse()->end()
|
||||
->scalarNode('blameable')->defaultFalse()->end()
|
||||
->scalarNode('sluggable')->defaultFalse()->end()
|
||||
->scalarNode('tree')->defaultFalse()->end()
|
||||
->scalarNode('loggable')->defaultFalse()->end()
|
||||
->scalarNode('sortable')->defaultFalse()->end()
|
||||
->scalarNode('softdeleteable')->defaultFalse()->end()
|
||||
->scalarNode('uploadable')->defaultFalse()->end()
|
||||
->scalarNode('reference_integrity')->defaultFalse()->end()
|
||||
->end()
|
||||
->end()
|
||||
;
|
||||
|
||||
return $node;
|
||||
}
|
||||
|
||||
private function getClassNode()
|
||||
{
|
||||
$treeBuilder = new TreeBuilder();
|
||||
$node = $treeBuilder->root('class');
|
||||
|
||||
$node
|
||||
->addDefaultsIfNotSet()
|
||||
->children()
|
||||
->scalarNode('translatable')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Gedmo\Translatable\TranslatableListener')
|
||||
->end()
|
||||
->scalarNode('timestampable')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Gedmo\\Timestampable\\TimestampableListener')
|
||||
->end()
|
||||
->scalarNode('blameable')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Gedmo\\Blameable\\BlameableListener')
|
||||
->end()
|
||||
->scalarNode('sluggable')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Gedmo\\Sluggable\\SluggableListener')
|
||||
->end()
|
||||
->scalarNode('tree')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Gedmo\\Tree\\TreeListener')
|
||||
->end()
|
||||
->scalarNode('loggable')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Gedmo\Loggable\LoggableListener')
|
||||
->end()
|
||||
->scalarNode('sortable')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Gedmo\\Sortable\\SortableListener')
|
||||
->end()
|
||||
->scalarNode('softdeleteable')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Gedmo\\SoftDeleteable\\SoftDeleteableListener')
|
||||
->end()
|
||||
->scalarNode('uploadable')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Gedmo\\Uploadable\\UploadableListener')
|
||||
->end()
|
||||
->scalarNode('reference_integrity')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Gedmo\\ReferenceIntegrity\\ReferenceIntegrityListener')
|
||||
->end()
|
||||
->end()
|
||||
;
|
||||
|
||||
return $node;
|
||||
}
|
||||
|
||||
private function getUploadableNode()
|
||||
{
|
||||
$treeBuilder = new TreeBuilder();
|
||||
$node = $treeBuilder->root('uploadable');
|
||||
|
||||
$node
|
||||
->addDefaultsIfNotSet()
|
||||
->children()
|
||||
->scalarNode('default_file_path')
|
||||
->cannotBeEmpty()
|
||||
->defaultNull()
|
||||
->end()
|
||||
->scalarNode('mime_type_guesser_class')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Stof\\DoctrineExtensionsBundle\\Uploadable\\MimeTypeGuesserAdapter')
|
||||
->end()
|
||||
->scalarNode('default_file_info_class')
|
||||
->cannotBeEmpty()
|
||||
->defaultValue('Stof\\DoctrineExtensionsBundle\\Uploadable\\UploadedFileInfo')
|
||||
->end()
|
||||
->booleanNode('validate_writable_directory')->defaultTrue()->end()
|
||||
->end()
|
||||
;
|
||||
|
||||
return $node;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,144 @@
|
|||
<?php
|
||||
|
||||
namespace Stof\DoctrineExtensionsBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||
use Symfony\Component\Config\Definition\Processor;
|
||||
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
|
||||
class StofDoctrineExtensionsExtension extends Extension
|
||||
{
|
||||
private $entityManagers = array();
|
||||
private $documentManagers = array();
|
||||
|
||||
public function load(array $configs, ContainerBuilder $container)
|
||||
{
|
||||
$processor = new Processor();
|
||||
$configuration = new Configuration();
|
||||
|
||||
$config = $processor->processConfiguration($configuration, $configs);
|
||||
|
||||
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
|
||||
$loader->load('listeners.xml');
|
||||
|
||||
$uploadableConfig = $config['uploadable'];
|
||||
|
||||
$container->setParameter('stof_doctrine_extensions.default_locale', $config['default_locale']);
|
||||
$container->setParameter('stof_doctrine_extensions.default_file_path', $uploadableConfig['default_file_path']);
|
||||
$container->setParameter('stof_doctrine_extensions.translation_fallback', $config['translation_fallback']);
|
||||
$container->setParameter('stof_doctrine_extensions.persist_default_translation', $config['persist_default_translation']);
|
||||
$container->setParameter('stof_doctrine_extensions.skip_translation_on_load', $config['skip_translation_on_load']);
|
||||
|
||||
$useTranslatable = false;
|
||||
$useLoggable = false;
|
||||
$useBlameable = false;
|
||||
|
||||
foreach ($config['orm'] as $name => $listeners) {
|
||||
foreach ($listeners as $ext => $enabled) {
|
||||
$listener = sprintf('stof_doctrine_extensions.listener.%s', $ext);
|
||||
if ($enabled && $container->hasDefinition($listener)) {
|
||||
$attributes = array('connection' => $name);
|
||||
if ('translatable' === $ext) {
|
||||
$useTranslatable = true;
|
||||
// the translatable listener must be registered after others to work with them properly
|
||||
$attributes['priority'] = -10;
|
||||
} elseif ('loggable' === $ext) {
|
||||
$useLoggable = true;
|
||||
} elseif ('blameable' === $ext) {
|
||||
$useBlameable = true;
|
||||
} elseif ('uploadable' === $ext) {
|
||||
$attributes['priority'] = -5;
|
||||
}
|
||||
$definition = $container->getDefinition($listener);
|
||||
$definition->addTag('doctrine.event_subscriber', $attributes);
|
||||
}
|
||||
}
|
||||
|
||||
$this->entityManagers[$name] = $listeners;
|
||||
}
|
||||
|
||||
foreach ($config['mongodb'] as $name => $listeners) {
|
||||
foreach ($listeners as $ext => $enabled) {
|
||||
$listener = sprintf('stof_doctrine_extensions.listener.%s', $ext);
|
||||
if ($enabled && $container->hasDefinition($listener)) {
|
||||
$attributes = array('connection' => $name);
|
||||
if ('translatable' === $ext) {
|
||||
$useTranslatable = true;
|
||||
// the translatable listener must be registered after others to work with them properly
|
||||
$attributes['priority'] = -10;
|
||||
} elseif ('loggable' === $ext) {
|
||||
$useLoggable = true;
|
||||
} elseif ('blameable' === $ext) {
|
||||
$useBlameable = true;
|
||||
}
|
||||
$definition = $container->getDefinition($listener);
|
||||
$definition->addTag('doctrine_mongodb.odm.event_subscriber', $attributes);
|
||||
}
|
||||
}
|
||||
$this->documentManagers[$name] = $listeners;
|
||||
}
|
||||
|
||||
if ($useTranslatable) {
|
||||
$container->getDefinition('stof_doctrine_extensions.event_listener.locale')
|
||||
->setPublic(true)
|
||||
->addTag('kernel.event_subscriber');
|
||||
}
|
||||
if ($useLoggable) {
|
||||
$container->getDefinition('stof_doctrine_extensions.event_listener.logger')
|
||||
->setPublic(true)
|
||||
->addTag('kernel.event_subscriber');
|
||||
}
|
||||
if ($useBlameable) {
|
||||
$container->getDefinition('stof_doctrine_extensions.event_listener.blame')
|
||||
->setPublic(true)
|
||||
->addTag('kernel.event_subscriber');
|
||||
}
|
||||
|
||||
if ($uploadableConfig['default_file_path']) {
|
||||
$container->getDefinition('stof_doctrine_extensions.listener.uploadable')
|
||||
->addMethodCall('setDefaultPath', array($uploadableConfig['default_file_path']));
|
||||
}
|
||||
|
||||
// Default FileInfoInterface class
|
||||
$container->setParameter('stof_doctrine_extensions.uploadable.default_file_info.class', $uploadableConfig['default_file_info_class']);
|
||||
|
||||
$container->setParameter(
|
||||
'stof_doctrine_extensions.uploadable.validate_writable_directory',
|
||||
$uploadableConfig['validate_writable_directory']
|
||||
);
|
||||
|
||||
if ($uploadableConfig['mime_type_guesser_class']) {
|
||||
if (!class_exists($uploadableConfig['mime_type_guesser_class'])) {
|
||||
$msg = 'Class "%s" configured to use as the mime type guesser in the Uploadable extension does not exist.';
|
||||
|
||||
throw new \InvalidArgumentException(sprintf($msg, $uploadableConfig['mime_type_guesser_class']));
|
||||
}
|
||||
|
||||
$container->setParameter(
|
||||
'stof_doctrine_extensions.uploadable.mime_type_guesser.class',
|
||||
$uploadableConfig['mime_type_guesser_class']
|
||||
);
|
||||
}
|
||||
|
||||
foreach ($config['class'] as $listener => $class) {
|
||||
$container->setParameter(sprintf('stof_doctrine_extensions.listener.%s.class', $listener), $class);
|
||||
}
|
||||
}
|
||||
|
||||
public function configValidate(ContainerBuilder $container)
|
||||
{
|
||||
foreach (array_keys($this->entityManagers) as $name) {
|
||||
if (!$container->hasDefinition(sprintf('doctrine.dbal.%s_connection', $name))) {
|
||||
throw new \InvalidArgumentException(sprintf('Invalid %s config: DBAL connection "%s" not found', $this->getAlias(), $name));
|
||||
}
|
||||
}
|
||||
|
||||
foreach (array_keys($this->documentManagers) as $name) {
|
||||
if (!$container->hasDefinition(sprintf('doctrine_mongodb.odm.%s_document_manager', $name))) {
|
||||
throw new \InvalidArgumentException(sprintf('Invalid %s config: document manager "%s" not found', $this->getAlias(), $name));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue