Merge pull request #2792 from deepak-srivastava/dedupe-hooks
[civicrm-core.git] / Civi / Core / Container.php
index e6fbc55bfbfdbda4c8b1652d8055707f609db0d7..e251f2adf9e8f1739d18e4dfbebec8423a96966a 100644 (file)
@@ -64,9 +64,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');
 
@@ -85,15 +90,30 @@ class Container {
    * @param \Symfony\Component\EventDispatcher\EventDispatcher $dispatcher
    * @return \Civi\API\Kernel
    */
-  public function createApiKernel($dispatcher) {
+  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());
-    $dispatcher->addListener(\Civi\API\Events::AUTHORIZE, function($event) {
-      // dummy placeholder
-      $event->authorize();
-    });
-    $kernel = new \Civi\API\Kernel($dispatcher, array());
+    $kernel = new \Civi\API\Kernel($dispatcher);
+
+    $reflectionProvider = new \Civi\API\Provider\ReflectionProvider($kernel);
+    $dispatcher->addSubscriber($reflectionProvider);
+
+    $kernel->setApiProviders(array(
+      $reflectionProvider,
+      $magicFunctionProvider,
+    ));
+
     return $kernel;
   }
 }