Civi\API\Subscriber\ChainSubscriber - Reuse the inputted kernel, not the global kernel.
authorTim Otten <totten@civicrm.org>
Sat, 28 Mar 2015 03:25:24 +0000 (20:25 -0700)
committerTim Otten <totten@civicrm.org>
Tue, 14 Jul 2015 04:00:05 +0000 (21:00 -0700)
Civi/API/Subscriber/ChainSubscriber.php

index a44a4be3a26c5c4717339424fcc2721fdad6b008..944dc71fa01cd1f181a080a0c6fcc789f041aa61 100644 (file)
@@ -69,7 +69,7 @@ class ChainSubscriber implements EventSubscriberInterface {
     $apiRequest = $event->getApiRequest();
     $result = $event->getResponse();
     if (\CRM_Utils_Array::value('is_error', $result, 0) == 0) {
-      $this->callNestedApi($apiRequest['params'], $result, $apiRequest['action'], $apiRequest['entity'], $apiRequest['version']);
+      $this->callNestedApi($event->getApiKernel(), $apiRequest['params'], $result, $apiRequest['action'], $apiRequest['entity'], $apiRequest['version']);
       $event->setResponse($result);
     }
   }
@@ -78,6 +78,7 @@ class ChainSubscriber implements EventSubscriberInterface {
    * Call any nested api calls.
    *
    * TODO: We don't really need this to be a separate function.
+   * @param \Civi\API\Kernel $apiKernel
    * @param $params
    * @param $result
    * @param $action
@@ -85,7 +86,7 @@ class ChainSubscriber implements EventSubscriberInterface {
    * @param $version
    * @throws \Exception
    */
-  protected function callNestedApi(&$params, &$result, $action, $entity, $version) {
+  protected function callNestedApi($apiKernel, &$params, &$result, $action, $entity, $version) {
     $lowercase_entity = _civicrm_api_get_entity_name_from_camel($entity);
 
     // We don't need to worry about nested api in the getfields/getoptions
@@ -182,7 +183,7 @@ class ChainSubscriber implements EventSubscriberInterface {
             foreach ($newparams as $entityparams) {
               $subParams = array_merge($genericParams, $entityparams);
               _civicrm_api_replace_variables($subParams, $result['values'][$idIndex], $separator);
-              $result['values'][$result['id']][$field][] = civicrm_api($subEntity, $subaction, $subParams);
+              $result['values'][$result['id']][$field][] = $apiKernel->run($subEntity, $subaction, $subParams);
               if ($result['is_error'] === 1) {
                 throw new \Exception($subEntity . ' ' . $subaction . 'call failed with' . $result['error_message']);
               }
@@ -192,7 +193,7 @@ class ChainSubscriber implements EventSubscriberInterface {
 
             $subParams = array_merge($subParams, $newparams);
             _civicrm_api_replace_variables($subParams, $result['values'][$idIndex], $separator);
-            $result['values'][$idIndex][$field] = civicrm_api($subEntity, $subaction, $subParams);
+            $result['values'][$idIndex][$field] = $apiKernel->run($subEntity, $subaction, $subParams);
             if (!empty($result['is_error'])) {
               throw new \Exception($subEntity . ' ' . $subaction . 'call failed with' . $result['error_message']);
             }