static function createField($field, $operation, $indexExist = false) { require_once 'CRM/Core/BAO/CustomValueTable.php'; $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'; } else { if ($field->data_type == 'Country' && $field->html_type == 'Multi-Select Country') { $params['type'] = 'varchar(255)'; } else { if ($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'; } else { if ($field->data_type == 'StateProvince' && $field->html_type == 'Multi-Select State/Province') { $params['type'] = 'varchar(255)'; } else { if ($field->data_type == 'File') { $params['fk_table_name'] = 'civicrm_file'; $params['fk_field_name'] = 'id'; $params['fk_attributes'] = 'ON DELETE SET NULL'; } else { if ($field->data_type == 'ContactReference') { $params['fk_table_name'] = 'civicrm_contact'; $params['fk_field_name'] = 'id'; $params['fk_attributes'] = 'ON DELETE SET NULL'; } } } } } } if ($field->default_value) { $params['default'] = "'{$field->default_value}'"; } require_once 'CRM/Core/BAO/SchemaHandler.php'; CRM_Core_BAO_SchemaHandler::alterFieldSQL($params, $indexExist); }