From aa3a113bdb0a221afee8093244d0e2a15e224ee9 Mon Sep 17 00:00:00 2001 From: eileen Date: Fri, 27 Jul 2018 01:40:30 +1200 Subject: [PATCH] Extract getSqlColumnDefinition off to processor class. Note that I wrote test coverage that was pretty extensive on the output of this function earlier --- CRM/Export/BAO/Export.php | 109 +---------------------------- CRM/Export/BAO/ExportProcessor.php | 108 ++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 108 deletions(-) diff --git a/CRM/Export/BAO/Export.php b/CRM/Export/BAO/Export.php index 8822076944..dc000248d7 100644 --- a/CRM/Export/BAO/Export.php +++ b/CRM/Export/BAO/Export.php @@ -795,120 +795,13 @@ INSERT INTO {$componentTable} SELECT distinct gc.contact_id FROM civicrm_group_c if (substr($field, -4) == '_a_b' || substr($field, -4) == '_b_a') { return; } - $queryFields = $processor->getQueryFields(); $fieldName = CRM_Utils_String::munge(strtolower($field), '_', 64); if ($fieldName == 'id') { $fieldName = 'civicrm_primary_id'; } - // early exit for master_id, CRM-12100 - // in the DB it is an ID, but in the export, we retrive the display_name of the master record - // also for current_employer, CRM-16939 - if ($fieldName == 'master_id' || $fieldName == 'current_employer') { - $sqlColumns[$fieldName] = "$fieldName varchar(128)"; - return; - } - - if (substr($fieldName, -11) == 'campaign_id') { - // CRM-14398 - $sqlColumns[$fieldName] = "$fieldName varchar(128)"; - return; - } - - $lookUp = array('prefix_id', 'suffix_id'); - // set the sql columns - if (isset($queryFields[$field]['type'])) { - switch ($queryFields[$field]['type']) { - case CRM_Utils_Type::T_INT: - case CRM_Utils_Type::T_BOOLEAN: - if (in_array($field, $lookUp)) { - $sqlColumns[$fieldName] = "$fieldName varchar(255)"; - } - else { - $sqlColumns[$fieldName] = "$fieldName varchar(16)"; - } - break; - - case CRM_Utils_Type::T_STRING: - if (isset($queryFields[$field]['maxlength'])) { - $sqlColumns[$fieldName] = "$fieldName varchar({$queryFields[$field]['maxlength']})"; - } - else { - $sqlColumns[$fieldName] = "$fieldName varchar(255)"; - } - break; - - case CRM_Utils_Type::T_TEXT: - case CRM_Utils_Type::T_LONGTEXT: - case CRM_Utils_Type::T_BLOB: - case CRM_Utils_Type::T_MEDIUMBLOB: - $sqlColumns[$fieldName] = "$fieldName longtext"; - break; - - case CRM_Utils_Type::T_FLOAT: - case CRM_Utils_Type::T_ENUM: - case CRM_Utils_Type::T_DATE: - case CRM_Utils_Type::T_TIME: - case CRM_Utils_Type::T_TIMESTAMP: - case CRM_Utils_Type::T_MONEY: - case CRM_Utils_Type::T_EMAIL: - case CRM_Utils_Type::T_URL: - case CRM_Utils_Type::T_CCNUM: - default: - $sqlColumns[$fieldName] = "$fieldName varchar(32)"; - break; - } - } - else { - if (substr($fieldName, -3, 3) == '_id') { - $sqlColumns[$fieldName] = "$fieldName varchar(255)"; - } - elseif (substr($fieldName, -5, 5) == '_note') { - $sqlColumns[$fieldName] = "$fieldName text"; - } - else { - $changeFields = array( - 'groups', - 'tags', - 'notes', - ); - - if (in_array($fieldName, $changeFields)) { - $sqlColumns[$fieldName] = "$fieldName text"; - } - else { - // set the sql columns for custom data - if (isset($queryFields[$field]['data_type'])) { - - switch ($queryFields[$field]['data_type']) { - case 'String': - // May be option labels, which could be up to 512 characters - $length = max(512, CRM_Utils_Array::value('text_length', $queryFields[$field])); - $sqlColumns[$fieldName] = "$fieldName varchar($length)"; - break; - - case 'Country': - case 'StateProvince': - case 'Link': - $sqlColumns[$fieldName] = "$fieldName varchar(255)"; - break; - - case 'Memo': - $sqlColumns[$fieldName] = "$fieldName text"; - break; - - default: - $sqlColumns[$fieldName] = "$fieldName varchar(255)"; - break; - } - } - else { - $sqlColumns[$fieldName] = "$fieldName text"; - } - } - } - } + $sqlColumns[$fieldName] = $processor->getSqlColumnDefinition($field, $fieldName); } /** diff --git a/CRM/Export/BAO/ExportProcessor.php b/CRM/Export/BAO/ExportProcessor.php index 8efc710255..deea2d9e81 100644 --- a/CRM/Export/BAO/ExportProcessor.php +++ b/CRM/Export/BAO/ExportProcessor.php @@ -437,4 +437,112 @@ class CRM_Export_BAO_ExportProcessor { ]; } + /** + * @param $field + * @param $fieldName + * + * @return mixed + */ + public function getSqlColumnDefinition($field, $fieldName) { + + // early exit for master_id, CRM-12100 + // in the DB it is an ID, but in the export, we retrive the display_name of the master record + // also for current_employer, CRM-16939 + if ($fieldName == 'master_id' || $fieldName == 'current_employer') { + return "$fieldName varchar(128)"; + } + + if (substr($fieldName, -11) == 'campaign_id') { + // CRM-14398 + return "$fieldName varchar(128)"; + } + + $queryFields = $this->getQueryFields(); + $lookUp = ['prefix_id', 'suffix_id']; + // set the sql columns + if (isset($queryFields[$field]['type'])) { + switch ($queryFields[$field]['type']) { + case CRM_Utils_Type::T_INT: + case CRM_Utils_Type::T_BOOLEAN: + if (in_array($field, $lookUp)) { + return "$fieldName varchar(255)"; + } + else { + return "$fieldName varchar(16)"; + } + + case CRM_Utils_Type::T_STRING: + if (isset($queryFields[$field]['maxlength'])) { + return "$fieldName varchar({$queryFields[$field]['maxlength']})"; + } + else { + return "$fieldName varchar(255)"; + } + + case CRM_Utils_Type::T_TEXT: + case CRM_Utils_Type::T_LONGTEXT: + case CRM_Utils_Type::T_BLOB: + case CRM_Utils_Type::T_MEDIUMBLOB: + return "$fieldName longtext"; + + case CRM_Utils_Type::T_FLOAT: + case CRM_Utils_Type::T_ENUM: + case CRM_Utils_Type::T_DATE: + case CRM_Utils_Type::T_TIME: + case CRM_Utils_Type::T_TIMESTAMP: + case CRM_Utils_Type::T_MONEY: + case CRM_Utils_Type::T_EMAIL: + case CRM_Utils_Type::T_URL: + case CRM_Utils_Type::T_CCNUM: + default: + return "$fieldName varchar(32)"; + } + } + else { + if (substr($fieldName, -3, 3) == '_id') { + return "$fieldName varchar(255)"; + } + elseif (substr($fieldName, -5, 5) == '_note') { + return "$fieldName text"; + } + else { + $changeFields = [ + 'groups', + 'tags', + 'notes', + ]; + + if (in_array($fieldName, $changeFields)) { + return "$fieldName text"; + } + else { + // set the sql columns for custom data + if (isset($queryFields[$field]['data_type'])) { + + switch ($queryFields[$field]['data_type']) { + case 'String': + // May be option labels, which could be up to 512 characters + $length = max(512, CRM_Utils_Array::value('text_length', $queryFields[$field])); + return "$fieldName varchar($length)"; + + case 'Country': + case 'StateProvince': + case 'Link': + return "$fieldName varchar(255)"; + + case 'Memo': + return "$fieldName text"; + + default: + return "$fieldName varchar(255)"; + } + } + else { + return "$fieldName text"; + } + } + } + } + } + } -- 2.25.1