X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FImport%2FForms.php;h=0b37ea76b221e8e4ffae146d797c176a319a77a0;hb=96d9c94a6d9c49a84cd38ab3b3d68167b3274d47;hp=76d9868a356483f4d583fb4ed15acd97b4f4ffd3;hpb=51ae64d92c18291070b32d7d6e2a02d8ba280b0a;p=civicrm-core.git diff --git a/CRM/Import/Forms.php b/CRM/Import/Forms.php index 76d9868a35..0b37ea76b2 100644 --- a/CRM/Import/Forms.php +++ b/CRM/Import/Forms.php @@ -63,6 +63,11 @@ class CRM_Import_Forms extends CRM_Core_Form { */ protected $userJob; + /** + * @var \CRM_Import_Parser + */ + protected $parser; + /** * Get User Job. * @@ -113,6 +118,7 @@ class CRM_Import_Forms extends CRM_Core_Form { 'onDuplicate' => 'DataSource', 'disableUSPS' => 'DataSource', 'doGeocodeAddress' => 'DataSource', + 'multipleCustomData' => 'DataSource', // Note we don't add the save mapping instructions for MapField here // (eg 'updateMapping') - as they really are an action for that form // rather than part of the mapping config. @@ -126,13 +132,15 @@ class CRM_Import_Forms extends CRM_Core_Form { * @param string $fieldName * * @return mixed|null - * @throws \CRM_Core_Exception */ public function getSubmittedValue(string $fieldName) { if ($fieldName === 'dataSource') { // Hard-coded handling for DataSource as it affects the contents of // getSubmittableFields and can cause a loop. - return $this->controller->exportValue('DataSource', 'dataSource'); + // Note that the non-contact imports are not currently sharing the DataSource.tpl + // that adds the CSV/SQL options & hence fall back on this hidden field. + // - todo - switch to the same DataSource.tpl for all. + return $this->controller->exportValue('DataSource', 'dataSource') ?? $this->controller->exportValue('DataSource', 'hidden_dataSource'); } $mappedValues = $this->getSubmittableFields(); if (array_key_exists($fieldName, $mappedValues)) { @@ -292,8 +300,6 @@ class CRM_Import_Forms extends CRM_Core_Form { * This is called as a snippet in DataSourceConfig and * also from DataSource::buildForm to add the fields such * that quick form picks them up. - * - * @throws \CRM_Core_Exception */ protected function getDataSourceFields(): array { $className = $this->getDataSourceClassName(); @@ -321,7 +327,6 @@ class CRM_Import_Forms extends CRM_Core_Form { * all forms. * * @return string[] - * @throws \CRM_Core_Exception */ protected function getSubmittableFields(): array { $dataSourceFields = array_fill_keys($this->getDataSourceFields(), 'DataSource'); @@ -368,7 +373,7 @@ class CRM_Import_Forms extends CRM_Core_Form { $id = UserJob::create(FALSE) ->setValues([ 'created_id' => CRM_Core_Session::getLoggedInContactID(), - 'type_id:name' => 'contact_import', + 'type_id:name' => $this->getUserJobType(), 'status_id:name' => 'draft', // This suggests the data could be cleaned up after this. 'expires_date' => '+ 1 week', @@ -550,9 +555,99 @@ class CRM_Import_Forms extends CRM_Core_Form { * @throws \API_Exception */ protected function getAvailableFields(): array { - $parser = new CRM_Contact_Import_Parser_Contact(); - $parser->setUserJobID($this->getUserJobID()); - return $parser->getAvailableFields(); + return $this->getParser()->getAvailableFields(); + } + + /** + * Get an instance of the parser class. + * + * @return \CRM_Contact_Import_Parser_Contact|\CRM_Contribute_Import_Parser_Contribution + */ + protected function getParser() { + return NULL; + } + + /** + * Get the mapped fields as an array of labels. + * + * e.g + * ['First Name', 'Employee Of - First Name', 'Home - Street Address'] + * + * @return array + * @throws \API_Exception + */ + protected function getMappedFieldLabels(): array { + $mapper = []; + $parser = $this->getParser(); + foreach ($this->getSubmittedValue('mapper') as $columnNumber => $mappedField) { + $mapper[$columnNumber] = $parser->getMappedFieldLabel($parser->getMappingFieldFromMapperInput($mappedField, 0, $columnNumber)); + } + return $mapper; + } + + /** + * Assign variables required for the MapField form. + * + * @throws \API_Exception + * @throws \CRM_Core_Exception + */ + protected function assignMapFieldVariables(): void { + $this->addExpectedSmartyVariable('highlightedRelFields'); + $this->_columnCount = $this->getNumberOfColumns(); + $this->_columnNames = $this->getColumnHeaders(); + $this->_dataValues = array_values($this->getDataRows([], 2)); + $this->assign('columnNames', $this->getColumnHeaders()); + $this->assign('highlightedFields', $this->getHighlightedFields()); + $this->assign('columnCount', $this->_columnCount); + $this->assign('dataValues', $this->_dataValues); + } + + /** + * Get the fields to be highlighted in the UI. + * + * The highlighted fields are those used to match + * to an existing entity. + * + * @return array + * + * @throws \CRM_Core_Exception + */ + protected function getHighlightedFields(): array { + return []; + } + + /** + * Get the data patterns to pattern match the incoming data. + * + * @return array + */ + public function getDataPatterns(): array { + return $this->getParser()->getDataPatterns(); + } + + /** + * Get the data patterns to pattern match the incoming data. + * + * @return array + */ + public function getHeaderPatterns(): array { + return $this->getParser()->getHeaderPatterns(); + } + + /** + * Has the user chosen to update existing records. + * @return bool + */ + protected function isUpdateExisting(): bool { + return ((int) $this->getSubmittedValue('onDuplicate')) === CRM_Import_Parser::DUPLICATE_UPDATE; + } + + /** + * Has the user chosen to update existing records. + * @return bool + */ + protected function isSkipExisting(): bool { + return ((int) $this->getSubmittedValue('onDuplicate')) === CRM_Import_Parser::DUPLICATE_SKIP; } }