*/
class CRM_Contact_Import_Form_MapField extends CRM_Import_Form_MapField {
+ use CRM_Contact_Import_MetadataTrait;
/**
* An array of all contact fields with
/**
* Build the form object.
+ *
+ * @throws \CiviCRM_API3_Exception
*/
public function buildQuickForm() {
+ $savedMappingID = (int) $this->get('savedMapping');
//to save the current mappings
- if (!$this->get('savedMapping')) {
+ if (!$savedMappingID) {
$saveDetailsName = ts('Save this field mapping');
$this->applyFilter('saveMappingName', 'trim');
$this->add('text', 'saveMappingName', ts('Name'));
else {
$savedMapping = $this->get('savedMapping');
- list($mappingName, $mappingContactType, $mappingLocation, $mappingPhoneType, $mappingImProvider, $mappingRelation, $mappingOperator, $mappingValue, $mappingWebsiteType) = CRM_Core_BAO_Mapping::getMappingFields($savedMapping, TRUE);
+ list($mappingName) = CRM_Core_BAO_Mapping::getMappingFields($savedMapping, TRUE);
//get loaded Mapping Fields
$mappingName = CRM_Utils_Array::value(1, $mappingName);
- $mappingLocation = CRM_Utils_Array::value(1, $mappingLocation);
- $mappingPhoneType = CRM_Utils_Array::value(1, $mappingPhoneType);
- $mappingImProvider = CRM_Utils_Array::value(1, $mappingImProvider);
- $mappingRelation = CRM_Utils_Array::value(1, $mappingRelation);
- $mappingWebsiteType = CRM_Utils_Array::value(1, $mappingWebsiteType);
$this->assign('loadedMapping', $savedMapping);
$this->set('loadedMapping', $savedMapping);
$formName = 'document.forms.' . $this->_name;
//used to warn for mismatch column count or mismatch mapping
CRM_Core_Session::singleton()->setStatus(NULL);
+ $processor = new CRM_Import_ImportProcessor();
+ $processor->setMappingID($savedMappingID);
+ $processor->setFormName($formName);
+ $processor->setMetadata($this->getContactImportMetadata());
+ $processor->setContactTypeByConstant($this->get('contactType'));
for ($i = 0; $i < $this->_columnCount; $i++) {
$sel = &$this->addElement('hierselect', "mapper[$i]", ts('Mapper for Field %1', [1 => $i]), NULL);
if ($this->get('savedMapping')) {
- list($mappingName, $defaults, $js) = $this->loadSavedMapping($mappingName, $i, $mappingRelation, $mappingWebsiteType, $mappingLocation, $mappingPhoneType, $mappingImProvider, $defaults, $formName, $js, $hasColumnNames, $dataPatterns, $columnPatterns);
+ list($defaults, $js) = $this->loadSavedMapping($processor, $mappingName, $i, $defaults, $js, $hasColumnNames, $dataPatterns, $columnPatterns);
}
else {
$js .= "swapOptions($formName, 'mapper[$i]', 0, 3, 'hs_mapper_0_');\n";
}
/**
+ * @param \CRM_Import_ImportProcessor $processor
* @param $mappingName
* @param int $i
- * @param $mappingRelation
- * @param $mappingWebsiteType
- * @param $mappingLocation
- * @param $mappingPhoneType
- * @param $mappingImProvider
* @param array $defaults
- * @param string $formName
* @param string $js
* @param bool $hasColumnNames
* @param array $dataPatterns
* @param array $columnPatterns
*
* @return array
+ * @throws \CiviCRM_API3_Exception
*/
- protected function loadSavedMapping($mappingName, $i, $mappingRelation, $mappingWebsiteType, $mappingLocation, $mappingPhoneType, $mappingImProvider, $defaults, $formName, $js, $hasColumnNames, $dataPatterns, $columnPatterns) {
+ public function loadSavedMapping($processor, $mappingName, $i, $defaults, $js, $hasColumnNames, $dataPatterns, $columnPatterns) {
$jsSet = FALSE;
+ $formName = $processor->getFormName();
if (isset($mappingName[$i])) {
if ($mappingName[$i] != ts('- do not import -')) {
- if (isset($mappingRelation[$i])) {
- // relationship mapping
- switch ($this->get('contactType')) {
- case CRM_Import_Parser::CONTACT_INDIVIDUAL:
- $contactType = 'Individual';
- break;
-
- case CRM_Import_Parser::CONTACT_HOUSEHOLD:
- $contactType = 'Household';
- break;
-
- case CRM_Import_Parser::CONTACT_ORGANIZATION:
- $contactType = 'Organization';
- }
+ if ($processor->getRelationshipKey($i)) {
+ $contactType = $processor->getContactType();
//CRM-5125
$contactSubType = NULL;
if ($this->get('contactSubType')) {
);
foreach ($relations as $key => $var) {
- if ($key == $mappingRelation[$i]) {
- $relation = $key;
+ if ($processor->getValidRelationshipKey($i)) {
+ $relation = $processor->getValidRelationshipKey($i);
break;
}
}
$contactDetails = strtolower(str_replace(" ", "_", $mappingName[$i]));
- $websiteTypeId = isset($mappingWebsiteType[$i]) ? $mappingWebsiteType[$i] : NULL;
- $locationId = isset($mappingLocation[$i]) ? $mappingLocation[$i] : 0;
- $phoneType = isset($mappingPhoneType[$i]) ? $mappingPhoneType[$i] : NULL;
- //get provider id from saved mappings
- $imProvider = isset($mappingImProvider[$i]) ? $mappingImProvider[$i] : NULL;
+ $websiteTypeId = $processor->getWebsiteTypeID($i);
+ $locationId = $processor->getLocationTypeID($i);
+ $phoneType = $processor->getPhoneTypeID($i);
+ $imProvider = $processor->getIMProviderID($i);
+ $typeId = $processor->getPhoneOrIMTypeID($i);
if ($websiteTypeId) {
$defaults["mapper[$i]"] = [$relation, $contactDetails, $websiteTypeId];
- if (!$websiteTypeId) {
- $js .= "{$formName}['mapper[$i][2]'].style.display = 'none';\n";
- }
}
else {
- // default for IM/phone when mapping with relation is true
- $typeId = NULL;
- if (isset($phoneType)) {
- $typeId = $phoneType;
- }
- elseif (isset($imProvider)) {
- $typeId = $imProvider;
- }
+
$defaults["mapper[$i]"] = [$relation, $contactDetails, $locationId, $typeId];
if (!$locationId) {
$js .= "{$formName}['mapper[$i][2]'].style.display = 'none';\n";
$jsSet = TRUE;
}
else {
- $mappingHeader = array_keys($this->_mapperFields, $mappingName[$i]);
- $websiteTypeId = isset($mappingWebsiteType[$i]) ? $mappingWebsiteType[$i] : NULL;
- $locationId = isset($mappingLocation[$i]) ? $mappingLocation[$i] : 0;
- $phoneType = isset($mappingPhoneType[$i]) ? $mappingPhoneType[$i] : NULL;
- // get IM service provider id
- $imProvider = isset($mappingImProvider[$i]) ? $mappingImProvider[$i] : NULL;
+ $mappingHeader = $processor->getFieldName($i);
+ $websiteTypeId = $processor->getWebsiteTypeID($i);
+ $locationId = $processor->getLocationTypeID($i);
+ $typeId = $processor->getPhoneOrIMTypeID($i);
if ($websiteTypeId) {
- $defaults["mapper[$i]"] = [$mappingHeader[0], $websiteTypeId];
+ $defaults["mapper[$i]"] = [$mappingHeader, $websiteTypeId];
}
else {
- if (!$locationId) {
- $js .= "{$formName}['mapper[$i][1]'].style.display = 'none';\n";
- }
//default for IM/phone without related contact
- $typeId = NULL;
- if (isset($phoneType)) {
- $typeId = $phoneType;
- }
- elseif (isset($imProvider)) {
- $typeId = $imProvider;
- }
- $defaults["mapper[$i]"] = [$mappingHeader[0] ?? '', $locationId, $typeId];
- }
-
- if ((!$phoneType) && (!$imProvider)) {
- $js .= "{$formName}['mapper[$i][2]'].style.display = 'none';\n";
+ $defaults["mapper[$i]"] = [$mappingHeader ?? '', $locationId, $typeId];
}
- $js .= "{$formName}['mapper[$i][3]'].style.display = 'none';\n";
+ $js .= $processor->getQuickFormJSForField($i);
$jsSet = TRUE;
}
$defaults["mapper[$i]"] = [$this->defaultFromData($dataPatterns, $i)];
}
}
- return [$mappingName, $defaults, $js];
+ return [$defaults, $js];
}
}