From c914d4dd4c2f04de07a2041cf53f77ca5aaaa6cd Mon Sep 17 00:00:00 2001 From: eileen Date: Tue, 2 Jul 2019 13:07:36 +1200 Subject: [PATCH] [REF] simple extraction of prepareCreateParams --- CRM/Core/BAO/CustomField.php | 119 +++++++++++++++++++---------------- 1 file changed, 65 insertions(+), 54 deletions(-) diff --git a/CRM/Core/BAO/CustomField.php b/CRM/Core/BAO/CustomField.php index d41a71e1a0..fdec76edf6 100644 --- a/CRM/Core/BAO/CustomField.php +++ b/CRM/Core/BAO/CustomField.php @@ -1682,60 +1682,7 @@ SELECT $columnName * @param bool $triggerRebuild */ public static function createField($field, $operation, $indexExist = FALSE, $triggerRebuild = TRUE) { - $tableName = CRM_Core_DAO::getFieldValue( - 'CRM_Core_DAO_CustomGroup', - $field->custom_group_id, - 'table_name' - ); - - $params = array( - 'table_name' => $tableName, - 'operation' => $operation, - 'name' => $field->column_name, - 'type' => CRM_Core_BAO_CustomValueTable::fieldToSQLType( - $field->data_type, - $field->text_length - ), - 'required' => $field->is_required, - 'searchable' => $field->is_searchable, - ); - - if ($operation == 'delete') { - $fkName = "{$tableName}_{$field->column_name}"; - if (strlen($fkName) >= 48) { - $fkName = substr($fkName, 0, 32) . '_' . substr(md5($fkName), 0, 16); - } - $params['fkName'] = $fkName; - } - if ($field->data_type == 'Country' && $field->html_type == 'Select Country') { - $params['fk_table_name'] = 'civicrm_country'; - $params['fk_field_name'] = 'id'; - $params['fk_attributes'] = 'ON DELETE SET NULL'; - } - elseif ($field->data_type == 'Country' && $field->html_type == 'Multi-Select Country') { - $params['type'] = 'varchar(255)'; - } - elseif ($field->data_type == 'StateProvince' && $field->html_type == 'Select State/Province') { - $params['fk_table_name'] = 'civicrm_state_province'; - $params['fk_field_name'] = 'id'; - $params['fk_attributes'] = 'ON DELETE SET NULL'; - } - elseif ($field->data_type == 'StateProvince' && $field->html_type == 'Multi-Select State/Province') { - $params['type'] = 'varchar(255)'; - } - elseif ($field->data_type == 'File') { - $params['fk_table_name'] = 'civicrm_file'; - $params['fk_field_name'] = 'id'; - $params['fk_attributes'] = 'ON DELETE SET NULL'; - } - elseif ($field->data_type == 'ContactReference') { - $params['fk_table_name'] = 'civicrm_contact'; - $params['fk_field_name'] = 'id'; - $params['fk_attributes'] = 'ON DELETE SET NULL'; - } - if (isset($field->default_value)) { - $params['default'] = "'{$field->default_value}'"; - } + $params = self::prepareCreateParams($field, $operation); CRM_Core_BAO_SchemaHandler::alterFieldSQL($params, $indexExist, $triggerRebuild); } @@ -2625,4 +2572,68 @@ WHERE cf.id = %1 AND cg.is_multiple = 1"; } } + /** + * @param CRM_Core_DAO_CustomField $field + * @param 'add|modify' $operation + * + * @return array + */ + protected static function prepareCreateParams($field, $operation) { + $tableName = CRM_Core_DAO::getFieldValue( + 'CRM_Core_DAO_CustomGroup', + $field->custom_group_id, + 'table_name' + ); + + $params = [ + 'table_name' => $tableName, + 'operation' => $operation, + 'name' => $field->column_name, + 'type' => CRM_Core_BAO_CustomValueTable::fieldToSQLType( + $field->data_type, + $field->text_length + ), + 'required' => $field->is_required, + 'searchable' => $field->is_searchable, + ]; + + if ($operation == 'delete') { + $fkName = "{$tableName}_{$field->column_name}"; + if (strlen($fkName) >= 48) { + $fkName = substr($fkName, 0, 32) . '_' . substr(md5($fkName), 0, 16); + } + $params['fkName'] = $fkName; + } + if ($field->data_type == 'Country' && $field->html_type == 'Select Country') { + $params['fk_table_name'] = 'civicrm_country'; + $params['fk_field_name'] = 'id'; + $params['fk_attributes'] = 'ON DELETE SET NULL'; + } + elseif ($field->data_type == 'Country' && $field->html_type == 'Multi-Select Country') { + $params['type'] = 'varchar(255)'; + } + elseif ($field->data_type == 'StateProvince' && $field->html_type == 'Select State/Province') { + $params['fk_table_name'] = 'civicrm_state_province'; + $params['fk_field_name'] = 'id'; + $params['fk_attributes'] = 'ON DELETE SET NULL'; + } + elseif ($field->data_type == 'StateProvince' && $field->html_type == 'Multi-Select State/Province') { + $params['type'] = 'varchar(255)'; + } + elseif ($field->data_type == 'File') { + $params['fk_table_name'] = 'civicrm_file'; + $params['fk_field_name'] = 'id'; + $params['fk_attributes'] = 'ON DELETE SET NULL'; + } + elseif ($field->data_type == 'ContactReference') { + $params['fk_table_name'] = 'civicrm_contact'; + $params['fk_field_name'] = 'id'; + $params['fk_attributes'] = 'ON DELETE SET NULL'; + } + if (isset($field->default_value)) { + $params['default'] = "'{$field->default_value}'"; + } + return $params; + } + } -- 2.25.1