}
}
else {
- if (!array_key_exists($key, $params) || empty($params[$key])) {
+ // Disallow empty values except for the number zero.
+ // TODO: create a utility for this since it's needed in many places
+ if (!array_key_exists($key, $params) || (empty($params[$key]) && $params[$key] !== 0 && $params[$key] !== '0')) {
$unmatched[] = $key;
}
}
// len ('civicrm_api3_') == 13
$name = substr($name, 13, $last - 13);
}
+
+ $name = _civicrm_api_get_camel_name($name, 3);
- if (strtolower($name) == 'individual' || strtolower($name) == 'household' || strtolower($name) == 'organization') {
+ if ($name == 'Individual' || $name == 'Household' || $name == 'Organization') {
$name = 'Contact';
}
- //hack to deal with incorrectly named BAO/DAO - see CRM-10859 -
- // several of these have been removed but am not confident mailing_recipients is
- // tests so have not tackled.
- // correct approach for im is unclear
- if($name == 'mailing_recipients' || $name == 'MailingRecipients'){
- return 'CRM_Mailing_BAO_Recipients';
+ // hack to deal with incorrectly named BAO/DAO - see CRM-10859
+
+ // FIXME: DAO should be renamed CRM_Mailing_DAO_MailingRecipients
+ // but am not confident mailing_recipients is tested so have not tackled.
+ if ($name == 'MailingRecipients') {
+ return 'CRM_Mailing_DAO_Recipients';
+ }
+ // FIXME: DAO should be renamed CRM_Mailing_DAO_MailingComponent
+ if ($name == 'MailingComponent') {
+ return 'CRM_Mailing_DAO_Component';
+ }
+ // FIXME: DAO should be renamed CRM_ACL_DAO_AclRole
+ if ($name == 'AclRole') {
+ return 'CRM_ACL_DAO_EntityRole';
+ }
+ // FIXME: DAO should be renamed CRM_SMS_DAO_SmsProvider
+ // But this would impact SMS extensions so need to coordinate
+ // Probably best approach is to migrate them to use the api and decouple them from core BAOs
+ if ($name == 'SmsProvider') {
+ return 'CRM_SMS_DAO_Provider';
}
- if(strtolower($name) == 'im'){
- return 'CRM_Core_BAO_IM';
+ // FIXME: DAO names should follow CamelCase convention
+ if ($name == 'Im' || $name == 'Acl') {
+ $name = strtoupper($name);
}
- return CRM_Core_DAO_AllCoreTables::getFullName(_civicrm_api_get_camel_name($name, 3));
+ return CRM_Core_DAO_AllCoreTables::getFullName($name);
}
/**
* @return mixed
*/
function _civicrm_api3_get_BAO($name) {
+ // FIXME: DAO should be renamed CRM_Badge_DAO_BadgeLayout
+ if ($name == 'PrintLabel') {
+ return 'CRM_Badge_BAO_Layout';
+ }
$dao = _civicrm_api3_get_DAO($name);
if (!$dao) {
return NULL;
}
}
- $skipPermissions = CRM_Utils_Array::value('check_permissions', $params)? 0 :1;
+ $skipPermissions = !empty($params['check_permissions']) ? 0 :1;
list($entities, $options) = CRM_Contact_BAO_Query::apiQuery(
$newParams,
if (is_null($bao)) {
return civicrm_api3_create_error('Entity not created (' . $fct_name . ')');
}
+ elseif (is_a($bao, 'CRM_Core_Error')) {
+ //some wierd circular thing means the error takes itself as an argument
+ $msg = $bao->getMessages($bao);
+ // the api deals with entities on a one-by-one basis. However, the contribution bao pushes entities
+ // onto the error object - presumably because the contribution import is not handling multiple errors correctly
+ // so we need to reset the error object here to avoid getting concatenated errors
+ //@todo - the mulitple error handling should be moved out of the contribution object to the import / multiple entity processes
+ CRM_Core_Error::singleton()->reset();
+ throw new API_Exception($msg);
+ }
else {
$values = array();
_civicrm_api3_object_to_array($bao, $values[$bao->id]);
* @return CRM_Core_DAO|NULL an instance of the BAO
*/
function _civicrm_api3_basic_create_fallback($bao_name, &$params) {
- $entityName = CRM_Core_DAO_AllCoreTables::getBriefName(get_parent_class($bao_name));
+ $dao_name = get_parent_class($bao_name);
+ if ($dao_name === 'CRM_Core_DAO' || !$dao_name) {
+ $dao_name = $bao_name;
+ }
+ $entityName = CRM_Core_DAO_AllCoreTables::getBriefName($dao_name);
if (empty($entityName)) {
throw new API_Exception("Class \"$bao_name\" does not map to an entity name", "unmapped_class_to_entity", array(
'class_name' => $bao_name,
$hook = empty($params['id']) ? 'create' : 'edit';
CRM_Utils_Hook::pre($hook, $entityName, CRM_Utils_Array::value('id', $params), $params);
- $instance = new $bao_name();
+ $instance = new $dao_name();
$instance->copyValues($params);
$instance->save();
CRM_Utils_Hook::post($hook, $entityName, $instance->id, $instance);