civicrm_api3_create_error - Simplify
authorTim Otten <totten@civicrm.org>
Wed, 26 Mar 2014 06:09:19 +0000 (23:09 -0700)
committerTim Otten <totten@civicrm.org>
Sun, 6 Apr 2014 04:16:17 +0000 (21:16 -0700)
Civi/API/Kernel.php
api/v3/Activity.php
api/v3/utils.php

index 974046657430b40a061c4727b8567a98777d8bff..69f96b8da960d9788462a0f02cd56c1d8e0dd761 100644 (file)
@@ -241,7 +241,7 @@ class Kernel {
     if (!empty($apiRequest['params']['debug'])) {
       $data['trace'] = $e->getTraceAsString();
     }
-    return civicrm_api3_create_error($e->getMessage(), $data, $apiRequest, $e->getCode());
+    return $this->createError($e->getMessage(), $data, $apiRequest, $e->getCode());
   }
 
   /**
@@ -260,7 +260,7 @@ class Kernel {
       $data['trace'] = $e->getTraceAsString();
     }
 
-    return civicrm_api3_create_error($e->getMessage(), $data, $apiRequest, $e->getCode());
+    return $this->createError($e->getMessage(), $data, $apiRequest, $e->getCode());
   }
 
   /**
@@ -288,7 +288,37 @@ class Kernel {
       $data['tip'] = "add debug=1 to your API call to have more info about the error";
     }
 
-    return civicrm_api3_create_error($e->getMessage(), $data, $apiRequest);
+    return $this->createError($e->getMessage(), $data, $apiRequest);
+  }
+
+  /**
+   *
+   * @param <type> $data
+   * @param array $data
+   * @param object $apiRequest DAO / BAO object to be freed here
+   *
+   * @throws API_Exception
+   * @return array <type>
+   */
+  function createError($msg, $data, $apiRequest, $code = NULL) {
+    // FIXME what to do with $code?
+    if ($msg == 'DB Error: constraint violation' || substr($msg, 0, 9) == 'DB Error:' || $msg == 'DB Error: already exists') {
+      try {
+        $fields = _civicrm_api3_api_getfields($apiRequest);
+        _civicrm_api3_validate_fields($apiRequest['entity'], $apiRequest['action'], $apiRequest['params'], $fields, TRUE);
+      } catch (Exception $e) {
+        $msg = $e->getMessage();
+      }
+    }
+
+    $data = civicrm_api3_create_error($msg, $data);
+
+    if (isset($apiRequest['params']) && is_array($apiRequest['params']) && !empty($apiRequest['params']['api.has_parent'])) {
+      $errorCode = empty($data['error_code']) ? 'chained_api_failed' : $data['error_code'];
+      throw new \API_Exception('Error in call to ' . $apiRequest['entity'] . '_' . $apiRequest['action'] . ' : ' . $msg, $errorCode, $data);
+    }
+
+    return $data;
   }
 
   /**
index 88b2a7a274914b3b76bcea90830eb5f381914448..ddade215981e22a9501646cee18c7a1d76510725 100644 (file)
@@ -114,7 +114,7 @@ function civicrm_api3_activity_create($params) {
           if (is_object($activityDAO)) {
             $activityDAO->free();
           }
-          return civicrm_api3_create_error(ts("Unable to revision existing case activity."), NULL, $activityDAO);
+          return civicrm_api3_create_error(ts("Unable to revision existing case activity."));
         }
         $createRevision = TRUE;
       }
index 860668a1b60c35594fbe2261385e96aa3129bd7f..657011b4b52ca66bb25482ac5c5448cba60921e7 100644 (file)
@@ -131,36 +131,20 @@ function civicrm_api3_verify_mandatory($params, $daoName = NULL, $keys = array()
  *
  * @param <type> $data
  * @param array $data
- * @param array $dao (misnomer) apiRequest which led to this error (with keys "entity", "action", etc)
  *
  * @throws API_Exception
  * @return array <type>
  */
-function civicrm_api3_create_error($msg, $data = array(), &$dao = NULL) {
-  if (is_array($dao)) {
-    if ($msg == 'DB Error: constraint violation' || substr($msg, 0,9)  == 'DB Error:' || $msg == 'DB Error: already exists') {
-      try {
-        $fields = _civicrm_api3_api_getfields($dao);
-        _civicrm_api3_validate_fields($dao['entity'], $dao['action'], $dao['params'], $fields, TRUE);
-      }
-      catch(Exception $e) {
-        $msg = $e->getMessage();
-      }
-    }
-  }
+function civicrm_api3_create_error($msg, $data = array()) {
   $data['is_error'] = 1;
   $data['error_message'] = $msg;
-  // we will show sql to privelledged user only (not sure of a specific
-  // security hole here but seems sensible - perhaps should apply to the trace as well?
+  // we will show sql to privileged user only (not sure of a specific
+  // security hole here but seems sensible - perhaps should apply to the trace as well?)
   if(isset($data['sql']) && CRM_Core_Permission::check('Administer CiviCRM')) {
     $data['debug_information'] = $data['sql']; // Isn't this redundant?
   } else {
     unset($data['sql']);
   }
-  if (is_array($dao) && isset($dao['params']) && is_array($dao['params']) && !empty($dao['params']['api.has_parent'])) {
-    $errorCode = empty($data['error_code']) ? 'chained_api_failed' : $data['error_code'];
-    throw new API_Exception('Error in call to ' . $dao['entity'] . '_' . $dao['action'] . ' : ' . $msg, $errorCode, $data);
-  }
   return $data;
 }