This has a test CRM_Utils_Migrate_ImportExportTest although I had trouble running it without switching to
some hard-coding (at least in isolation). This switches the existing bulk create action over to use bulkCreate
public static function create($params) {
$customField = self::createCustomFieldRecord($params);
$op = empty($params['id']) ? 'add' : 'modify';
- self::createField($customField, $op, CRM_Utils_Array::value('triggerRebuild', $params, TRUE));
+ self::createField($customField, $op);
CRM_Utils_Hook::post(($op === 'add' ? 'create' : 'edit'), 'CustomField', $customField->id, $customField);
*
* @param CRM_Core_DAO_CustomField $field
* @param string $operation
- * @param bool $triggerRebuild
*/
- public static function createField($field, $operation, $triggerRebuild = TRUE) {
+ public static function createField($field, $operation) {
$sql = str_repeat(' ', 8);
$tableName = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_CustomGroup', $field->custom_group_id, 'table_name');
$sql .= "ALTER TABLE " . $tableName;
}
}
- if ($triggerRebuild) {
- Civi::service('sql_triggers')->rebuild($tableName, TRUE);
- }
-
+ Civi::service('sql_triggers')->rebuild($tableName, TRUE);
}
/**
}
/**
+ * @deprecated
+ *
* @param array $params
* @param bool $indexExist
* @param bool $triggerRebuild
}
}
foreach ($fields_indexed_by_group_id as $group_id => $fields) {
- $total = count($fields);
- $count = 0;
- foreach ($fields as $customFieldXML) {
- $count++;
- $customField = new CRM_Core_DAO_CustomField();
- $customField->custom_group_id = $group_id;
- $skipStore = FALSE;
- if (!$this->copyData($customField, $customFieldXML, FALSE, 'label')) {
- $skipStore = TRUE;
- }
-
- if (empty($customField->option_group_id) &&
- isset($customFieldXML->option_group_name)
- ) {
- $customField->option_group_id = $idMap['option_group'][(string ) $customFieldXML->option_group_name];
- }
- if ($skipStore) {
- continue;
- }
- $customField->save();
-
- // Only rebuild the table's trigger on the last field added to avoid un-necessary
- // and slow rebuilds when adding many fields at the same time.
- // @todo - call bulkSave instead.
- $triggerRebuild = FALSE;
- if ($count == $total) {
- $triggerRebuild = TRUE;
- }
- $indexExist = FALSE;
- CRM_Core_BAO_CustomField::createField($customField, 'add', $indexExist, $triggerRebuild);
- }
+ CRM_Core_BAO_CustomField::bulkSave(json_decode(json_encode($fields), TRUE), ['custom_group_id' => $group_id]);
}
}
// CustomGroup params
array(
'extends' => 'Activity',
- 'extends_entity_column_value' => array(array_search('Meeting', CRM_Core_PseudoConstant::activityType())),
+ 'extends_entity_column_value' => [1],
'title' => 'example',
),
// CustomField params