From: Matthew Wire Date: Tue, 13 Dec 2022 11:48:41 +0000 (+0000) Subject: Add datasource selector to generic import (so it can be used eg. with contribution... X-Git-Url: https://vcs.fsf.org/?a=commitdiff_plain;h=1e847f6615cf044daed9b3c648903a54ad9ae396;p=civicrm-core.git Add datasource selector to generic import (so it can be used eg. with contribution import) --- diff --git a/CRM/Contact/Import/Form/DataSource.php b/CRM/Contact/Import/Form/DataSource.php index ee4b414e7e..3a0d52336e 100644 --- a/CRM/Contact/Import/Form/DataSource.php +++ b/CRM/Contact/Import/Form/DataSource.php @@ -121,13 +121,9 @@ class CRM_Contact_Import_Form_DataSource extends CRM_Import_Form_DataSource { * reference to the array of default values */ public function setDefaultValues() { - $defaults = [ - 'dataSource' => $this->getDefaultDataSource(), - 'onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP, - 'contactType' => 'Individual', - 'fieldSeparator' => CRM_Core_Config::singleton()->fieldSeparator, - 'disableUSPS' => TRUE, - ]; + $defaults = parent::setDefaultValues(); + $defaults['contactType'] = 'Individual'; + $defaults['disableUSPS'] = TRUE; if ($this->get('loadedMapping')) { $defaults['savedMapping'] = $this->get('loadedMapping'); diff --git a/CRM/Contribute/Import/Form/DataSource.php b/CRM/Contribute/Import/Form/DataSource.php index 6de2b35a8d..c161cc6529 100644 --- a/CRM/Contribute/Import/Form/DataSource.php +++ b/CRM/Contribute/Import/Form/DataSource.php @@ -44,8 +44,6 @@ class CRM_Contribute_Import_Form_DataSource extends CRM_Import_Form_DataSource { CRM_Import_Parser::DUPLICATE_UPDATE => ts('Update existing contributions'), ]); - $this->setDefaults(['onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP]); - $this->addElement('xbutton', 'loadMapping', ts('Load Mapping'), [ 'type' => 'submit', 'onclick' => 'checkSelect()', diff --git a/CRM/Custom/Import/Form/DataSource.php b/CRM/Custom/Import/Form/DataSource.php index 326a759a1c..4f780de882 100644 --- a/CRM/Custom/Import/Form/DataSource.php +++ b/CRM/Custom/Import/Form/DataSource.php @@ -99,13 +99,10 @@ class CRM_Custom_Import_Form_DataSource extends CRM_Import_Form_DataSource { * @throws \CRM_Core_Exception */ public function setDefaultValues(): array { - $config = CRM_Core_Config::singleton(); - $defaults = [ - 'contactType' => 'Individual', - 'fieldSeparator' => $config->fieldSeparator, - // Perhaps never used, but permits url passing of the group. - 'multipleCustomData' => CRM_Utils_Request::retrieve('id', 'Positive', $this), - ]; + parent::setDefaultValues(); + $defaults['contactType'] = 'Individual'; + // Perhaps never used, but permits url passing of the group. + $defaults['multipleCustomData'] = CRM_Utils_Request::retrieve('id', 'Positive', $this); $loadedMapping = $this->get('loadedMapping'); if ($loadedMapping) { diff --git a/CRM/Event/Import/Form/DataSource.php b/CRM/Event/Import/Form/DataSource.php index 70d9fb68fd..4817f05400 100644 --- a/CRM/Event/Import/Form/DataSource.php +++ b/CRM/Event/Import/Form/DataSource.php @@ -46,7 +46,6 @@ class CRM_Event_Import_Form_DataSource extends CRM_Import_Form_DataSource { CRM_Import_Parser::DUPLICATE_UPDATE => ts('Update'), CRM_Import_Parser::DUPLICATE_NOCHECK => ts('No Duplicate Checking'), ]); - $this->setDefaults(['onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP]); $this->addContactTypeSelector(); } diff --git a/CRM/Import/Form/DataSource.php b/CRM/Import/Form/DataSource.php index 63fce727a4..36d6bb4bd8 100644 --- a/CRM/Import/Form/DataSource.php +++ b/CRM/Import/Form/DataSource.php @@ -59,33 +59,14 @@ abstract class CRM_Import_Form_DataSource extends CRM_Import_Forms { public function buildQuickForm() { $this->assign('errorMessage', $this->getErrorMessage()); $config = CRM_Core_Config::singleton(); - // When we switch to using the DataSource.tpl used by Contact we can remove this in - // favour of the one used by Contact - I was trying to consolidate - // first & got stuck on https://github.com/civicrm/civicrm-core/pull/23458 - $this->add('hidden', 'hidden_dataSource', 'CRM_Import_DataSource_CSV'); - $uploadFileSize = CRM_Utils_Number::formatUnitSize($config->maxFileSize . 'm', TRUE); - - //Fetch uploadFileSize from php_ini when $config->maxFileSize is set to "no limit". - if (empty($uploadFileSize)) { - $uploadFileSize = CRM_Utils_Number::formatUnitSize(ini_get('upload_max_filesize'), TRUE); - } - $uploadSize = round(($uploadFileSize / (1024 * 1024)), 2); - - $this->assign('uploadSize', $uploadSize); - $this->add('File', 'uploadFile', ts('Import Data File'), NULL, TRUE); - $this->setMaxFileSize($uploadFileSize); - $this->addRule('uploadFile', ts('File size should be less than %1 MBytes (%2 bytes)', [ - 1 => $uploadSize, - 2 => $uploadFileSize, - ]), 'maxfilesize', $uploadFileSize); - $this->addRule('uploadFile', ts('A valid file must be uploaded.'), 'uploadedfile'); - $this->addRule('uploadFile', ts('Input file must be in CSV format'), 'utf8File'); + $this->assign('urlPath', 'civicrm/import/datasource'); + $this->assign('urlPathVar', 'snippet=4&user_job_id=' . $this->get('user_job_id')); - $this->addElement('checkbox', 'skipColumnHeader', ts('First row contains column headers')); + $this->add('select', 'dataSource', ts('Data Source'), $this->getDataSources(), TRUE, + ['onchange' => 'buildDataSourceFormBlock(this.value);'] + ); - $this->add('text', 'fieldSeparator', ts('Import Field Separator'), ['size' => 2], TRUE); - $this->setDefaults(['fieldSeparator' => $config->fieldSeparator]); $mappingArray = CRM_Core_BAO_Mapping::getCreateMappingValues('Import ' . static::IMPORT_ENTITY); $this->add('select', 'savedMapping', ts('Saved Field Mapping'), ['' => ts('- select -')] + $mappingArray); @@ -96,6 +77,8 @@ abstract class CRM_Import_Form_DataSource extends CRM_Import_Forms { //build date formats CRM_Core_Form_Date::buildAllowedDateFormats($this); + $this->buildDataSourceFields(); + $this->addButtons([ [ 'type' => 'upload', @@ -110,6 +93,15 @@ abstract class CRM_Import_Form_DataSource extends CRM_Import_Forms { ]); } + public function setDefaultValues() { + return [ + 'dataSource' => $this->getDefaultDataSource(), + 'onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP, + 'fieldSeparator' => CRM_Core_Config::singleton()->fieldSeparator, + ]; + + } + /** * Get an error message to assign to the template. * diff --git a/CRM/Member/Import/Form/DataSource.php b/CRM/Member/Import/Form/DataSource.php index 8eaabae047..d8a7da6d5a 100644 --- a/CRM/Member/Import/Form/DataSource.php +++ b/CRM/Member/Import/Form/DataSource.php @@ -45,9 +45,6 @@ class CRM_Member_Import_Form_DataSource extends CRM_Import_Form_DataSource { CRM_Import_Parser::DUPLICATE_SKIP => ts('Insert new Membership'), CRM_Import_Parser::DUPLICATE_UPDATE => ts('Update existing Membership'), ]); - $this->setDefaults([ - 'onDuplicate' => CRM_Import_Parser::DUPLICATE_SKIP, - ]); $this->addContactTypeSelector(); } diff --git a/templates/CRM/Import/Form/DataSource.tpl b/templates/CRM/Import/Form/DataSource.tpl index 23fdcb965a..7aef23417d 100644 --- a/templates/CRM/Import/Form/DataSource.tpl +++ b/templates/CRM/Import/Form/DataSource.tpl @@ -24,21 +24,20 @@
{include file="CRM/common/formButtons.tpl" location="top"}
- - - - +
+

{ts}Choose Data Source{/ts}

+
{$form.uploadFile.label} {$form.uploadFile.html}
- {ts}File format must be comma-separated-values (CSV).{/ts} -
{ts 1=$uploadSize}Maximum Upload File Size: %1 MB{/ts} -
+ + + - - - +
{$form.dataSource.label}{$form.dataSource.html} {help id='data-source-selection'}
{$form.skipColumnHeader.html}{$form.skipColumnHeader.label}
- - {ts}Check this box if the first row of your file consists of field names (Example: 'Contact ID', 'Amount').{/ts} - -
+ + + {* Data source form pane is injected here when the data source is selected. *} +
+
+ {if array_key_exists('contactType', $form)} @@ -79,5 +78,30 @@
{include file="CRM/common/formButtons.tpl" location="bottom"}
+{literal} + +{/literal}
{$form.contactType.label}