X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=Civi%2FCore%2FContainer.php;h=f70369ad150eb5a373ef5c162ea39e32e720bd70;hb=378e2654b9f389f315fcf6a0c51ce649e7866971;hp=b2388f4c3aca383b872bc327cd5725d1ffbb65ae;hpb=0f643fb2c7553ba4d6256b2ccc6ef1f7cb7d74cd;p=civicrm-core.git diff --git a/Civi/Core/Container.php b/Civi/Core/Container.php index b2388f4c3a..f70369ad15 100644 --- a/Civi/Core/Container.php +++ b/Civi/Core/Container.php @@ -13,6 +13,10 @@ use Symfony\Component\DependencyInjection\Reference; // TODO use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; +/** + * Class Container + * @package Civi\Core + */ class Container { const SELF = 'civi_container_factory'; @@ -23,10 +27,11 @@ class Container { private static $singleton; /** + * @param bool $reset whether to forcibly rebuild the entire container * @return \Symfony\Component\DependencyInjection\TaggedContainerInterface */ - public static function singleton() { - if (self::$singleton === NULL) { + public static function singleton($reset = FALSE) { + if ($reset || self::$singleton === NULL) { $c = new self(); self::$singleton = $c->createContainer(); } @@ -35,6 +40,7 @@ class Container { /** * @var ContainerBuilder + * @return \Symfony\Component\DependencyInjection\ContainerBuilder */ public function createContainer() { $civicrm_base_path = dirname(dirname(__DIR__)); @@ -64,9 +70,14 @@ class Container { )) ->setFactoryService(self::SELF)->setFactoryMethod('createEventDispatcher'); + $container->setDefinition('magic_function_provider', new Definition( + '\Civi\API\Provider\MagicFunctionProvider', + array() + )); + $container->setDefinition('civi_api_kernel', new Definition( '\Civi\API\Kernel', - array(new Reference('dispatcher')) + array(new Reference('dispatcher'), new Reference('magic_function_provider')) )) ->setFactoryService(self::SELF)->setFactoryMethod('createApiKernel'); @@ -83,10 +94,34 @@ class Container { /** * @param \Symfony\Component\EventDispatcher\EventDispatcher $dispatcher + * @param $magicFunctionProvider + * * @return \Civi\API\Kernel */ - public function createApiKernel($dispatcher) { - $kernel = new \Civi\API\Kernel($dispatcher, array()); + public function createApiKernel($dispatcher, $magicFunctionProvider) { + $dispatcher->addSubscriber(new \Civi\API\Subscriber\ChainSubscriber()); + $dispatcher->addSubscriber(new \Civi\API\Subscriber\TransactionSubscriber()); + $dispatcher->addSubscriber(new \Civi\API\Subscriber\I18nSubscriber()); + $dispatcher->addSubscriber($magicFunctionProvider); + $dispatcher->addSubscriber(new \Civi\API\Subscriber\PermissionCheck()); + $dispatcher->addSubscriber(new \Civi\API\Subscriber\APIv3SchemaAdapter()); + $dispatcher->addSubscriber(new \Civi\API\Subscriber\WrapperAdapter(array( + \CRM_Utils_API_HTMLInputCoder::singleton(), + \CRM_Utils_API_NullOutputCoder::singleton(), + \CRM_Utils_API_ReloadOption::singleton(), + \CRM_Utils_API_MatchOption::singleton(), + ))); + $dispatcher->addSubscriber(new \Civi\API\Subscriber\XDebugSubscriber()); + $kernel = new \Civi\API\Kernel($dispatcher); + + $reflectionProvider = new \Civi\API\Provider\ReflectionProvider($kernel); + $dispatcher->addSubscriber($reflectionProvider); + + $kernel->setApiProviders(array( + $reflectionProvider, + $magicFunctionProvider, + )); + return $kernel; } }