// TODO use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
+/**
+ * Class Container
+ * @package Civi\Core
+ */
class Container {
const SELF = 'civi_container_factory';
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();
}
/**
* @var ContainerBuilder
+ * @return \Symfony\Component\DependencyInjection\ContainerBuilder
*/
public function createContainer() {
$civicrm_base_path = dirname(dirname(__DIR__));
))
->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');
/**
* @param \Symfony\Component\EventDispatcher\EventDispatcher $dispatcher
+ * @param $magicFunctionProvider
+ *
* @return \Civi\API\Kernel
*/
- public function createApiKernel($dispatcher) {
- $dispatcher->addListener(\Civi\API\Events::AUTHORIZE, function($event) {
- // dummy placeholder
- $event->authorize();
- });
- $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;
}
}