Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/master' into 404
Browse files Browse the repository at this point in the history
  • Loading branch information
Xavier Coureau committed Aug 5, 2014
2 parents 184052f + 6c514cb commit 5ec1bd2
Show file tree
Hide file tree
Showing 56 changed files with 3,736 additions and 2,763 deletions.
2 changes: 2 additions & 0 deletions .gitignore
@@ -1 +1,3 @@
vendor
.idea
composer.lock
1 change: 1 addition & 0 deletions .travis.yml
Expand Up @@ -7,6 +7,7 @@ php:
- hhvm

env:
- SYMFONY_VERSION=2.2.*
- SYMFONY_VERSION=2.3.*
- SYMFONY_VERSION=2.4.*
- SYMFONY_VERSION=dev-master
Expand Down
123 changes: 123 additions & 0 deletions DependencyInjection/Compiler/RegisterMappingsPass.php
@@ -0,0 +1,123 @@
<?php

/*
* This file is part of the FOSUserBundle package.
*
* (c) FriendsOfSymfony <http://friendsofsymfony.github.com/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Ekino\WordpressBundle\DependencyInjection\Compiler;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException;

/**
* Class EkinoWordpressExtension
*
* This is the bundle Symfony extension class
*
* @author Xavier Coureau <xav@takeatea.com>
* @author David Buchmann <david@liip.ch>
*/
class RegisterMappingsPass implements CompilerPassInterface
{
/**
* @var \Symfony\Component\DependencyInjection\Definition
*/
private $driver;

/**
* @var string
*/
private $driverPattern;

/**
* @var array
*/
private $namespaces;

/**
* @var string
*/
private $enabledParameter;

/**
* @var string
*/
private $fallbackManagerParameter;

/**
* @param Definition $driver
* @param string $driverPattern
* @param array $namespaces
* @param string $enabledParameter
* @param string $fallbackManagerParameter
*/
public function __construct($driver, $driverPattern, $namespaces, $enabledParameter, $fallbackManagerParameter)
{
$this->driver = $driver;
$this->driverPattern = $driverPattern;
$this->namespaces = $namespaces;
$this->enabledParameter = $enabledParameter;
$this->fallbackManagerParameter = $fallbackManagerParameter;
}

/**
* Register mappings with the metadata drivers.
*
* @param ContainerBuilder $container
*/
public function process(ContainerBuilder $container)
{
if (!$container->hasParameter($this->enabledParameter)) {
return;
}

$chainDriverDefService = $this->getChainDriverServiceName($container);
$chainDriverDef = $container->getDefinition($chainDriverDefService);

foreach ($this->namespaces as $namespace) {
$chainDriverDef->addMethodCall('addDriver', array($this->driver, $namespace));
}
}

/**
* @param ContainerBuilder $container
*
* @return string
*
* @throws \Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException
*/
protected function getChainDriverServiceName(ContainerBuilder $container)
{
foreach (array('ekino_wordpress.model_manager_name', $this->fallbackManagerParameter) as $param) {
if ($container->hasParameter($param)) {
$name = $container->getParameter($param);
if ($name) {
return sprintf($this->driverPattern, $name);
}
}
}

throw new ParameterNotFoundException('None of the managerParameters resulted in a valid name');
}

/**
* @param array $mappings
*
* @return RegisterMappingsPass
*/
public static function createOrmMappingDriver(array $mappings)
{
$arguments = array($mappings, '.orm.xml');
$locator = new Definition('Doctrine\Common\Persistence\Mapping\Driver\SymfonyFileLocator', $arguments);
$driver = new Definition('Doctrine\ORM\Mapping\Driver\XmlDriver', array($locator));

return new RegisterMappingsPass($driver, 'doctrine.orm.%s_metadata_driver', $mappings, 'ekino_wordpress.backend_type_orm', 'doctrine.default_entity_manager');
}
}
7 changes: 7 additions & 0 deletions DependencyInjection/EkinoWordpressExtension.php
Expand Up @@ -10,6 +10,7 @@

namespace Ekino\WordpressBundle\DependencyInjection;

use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
use Symfony\Component\DependencyInjection\Reference;
Expand Down Expand Up @@ -60,6 +61,8 @@ public function load(array $configs, ContainerBuilder $container)
$container->setParameter('ekino.wordpress.i18n_cookie_name', $config['i18n_cookie_name']);
$loader->load('i18n.xml');
}

$container->setParameter($this->getAlias() . '.backend_type_orm', true);
}

/**
Expand Down Expand Up @@ -94,6 +97,10 @@ protected function loadWordpressDirectory(ContainerBuilder $container, $director
$container->setDefinition($identifier, $serviceDefinition);
}

/**
* @param ContainerBuilder $container
* @param EntityManagerInterface $em
*/
protected function loadEntityManager(ContainerBuilder $container, $em)
{
$reference = new Reference(sprintf('doctrine.orm.%s_entity_manager', $em));
Expand Down
24 changes: 24 additions & 0 deletions EkinoWordpressBundle.php
Expand Up @@ -10,6 +10,9 @@

namespace Ekino\WordpressBundle;

use Ekino\WordpressBundle\DependencyInjection\Compiler\RegisterMappingsPass;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\HttpKernel\Bundle\Bundle;

/**
Expand All @@ -21,4 +24,25 @@
*/
class EkinoWordpressBundle extends Bundle
{
/**
* @param ContainerBuilder $container
*/
public function build(ContainerBuilder $container)
{
parent::build($container);

$this->addRegisterMappingPass($container);
}

/**
* @param ContainerBuilder $containerBuilder
*/
public function addRegisterMappingPass(ContainerBuilder $containerBuilder)
{
$mappings = array(
realpath(__DIR__ . '/Resources/config/doctrine/model') => 'Ekino\WordpressBundle\Model',
);

$containerBuilder->addCompilerPass(RegisterMappingsPass::createOrmMappingDriver($mappings));
}
}

0 comments on commit 5ec1bd2

Please sign in to comment.