X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FDedupe%2FMerger.php;h=4c273c795c258ea0a4842c95680808808979ef59;hb=db551313046d894dd1e7669f664ca7caac35f6fe;hp=6186aa06c0168360fd521e3f7e59e8c8b220e533;hpb=297a863f59a7392add8d08dc88eee9207f509f35;p=civicrm-core.git diff --git a/CRM/Dedupe/Merger.php b/CRM/Dedupe/Merger.php index 6186aa06c0..4c273c795c 100644 --- a/CRM/Dedupe/Merger.php +++ b/CRM/Dedupe/Merger.php @@ -37,6 +37,9 @@ class CRM_Dedupe_Merger { // FIXME: consider creating a common structure with cidRefs() and eidRefs() // FIXME: the sub-pages references by the URLs should // be loaded dynamically on the merge form instead + /** + * @return array + */ static function relTables() { static $relTables; @@ -288,7 +291,7 @@ WHERE } /** - * return payment related table. + * Return payment related table. */ static function paymentTables() { static $tables; @@ -300,7 +303,7 @@ WHERE } /** - * return payment update Query. + * Return payment update Query. */ static function paymentSql($tableName, $mainContactId, $otherContactId) { $sqls = array(); @@ -345,6 +348,15 @@ INNER JOIN civicrm_participant participant ON ( participant.id = payment.partic return $sqls; } + /** + * @param int $mainId + * @param int $otherId + * @param string $tableName + * @param array $tableOperations + * @param string $mode + * + * @return array + */ static function operationSql($mainId, $otherId, $tableName, $tableOperations = array(), $mode = 'add') { $sqls = array(); if (!$tableName || !$mainId || !$otherId) { @@ -447,11 +459,13 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m foreach ($cidRefs[$table] as $field) { // carry related contributions CRM-5359 if (in_array($table, $paymentTables)) { - $payOprSqls = self::operationSql($mainId, $otherId, $table, $tableOperations, 'payment'); - $sqls = array_merge($sqls, $payOprSqls); - $paymentSqls = self::paymentSql($table, $mainId, $otherId); $sqls = array_merge($sqls, $paymentSqls); + + if (!empty($tables) && !in_array('civicrm_contribution', $tables)) { + $payOprSqls = self::operationSql($mainId, $otherId, $table, $tableOperations, 'payment'); + $sqls = array_merge($sqls, $payOprSqls); + } } $preOperationSqls = self::operationSql($mainId, $otherId, $table, $tableOperations); @@ -523,7 +537,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m } /** - * Function to batch merge a set of contacts based on rule-group and group. + * Batch merge a set of contacts based on rule-group and group. * * @param int $rgid rule group id * @param int $gid group id @@ -531,13 +545,9 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * A 'safe' value skips the merge if there are any un-resolved conflicts. * Does a force merge otherwise. * @param boolean $autoFlip wether to let api decide which contact to retain and which to delete. - * - * * @param bool $redirectForPerformance * * @return array|bool - * @internal param array $cacheParams prev-next-cache params based on which next pair of contacts are computed. - * Generally used with batch-merge. * @static * @access public */ @@ -569,7 +579,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m } /** - * Function to merge given set of contacts. Performs core operation. + * Merge given set of contacts. Performs core operation. * * @param array $dupePairs set of pair of contacts for whom merge is to be done. * @param array $cacheParams prev-next-cache params based on which next pair of contacts are computed. @@ -586,8 +596,7 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m * @static * @access public */ - static function merge($dupePairs = array( - ), $cacheParams = array(), $mode = 'safe', + static function merge($dupePairs = array(), $cacheParams = array(), $mode = 'safe', $autoFlip = TRUE, $redirectForPerformance = FALSE ) { $cacheKeyString = CRM_Utils_Array::value('cache_key_string', $cacheParams); @@ -802,6 +811,9 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m CRM_Core_DAO::freeResult(); } + // get all contact subtypes + $contactSubTypes = CRM_Contact_BAO_ContactType::subTypePairs(NULL, TRUE, ''); + // FIXME: there must be a better way foreach (array('main', 'other') as $moniker) { $contact = &$$moniker; @@ -809,6 +821,8 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m $value = empty($preferred_communication_method) ? array() : $preferred_communication_method; $specialValues[$moniker] = array( 'preferred_communication_method' => $value, + 'contact_sub_type' => $value, + 'communication_style_id' => $value, ); if (!empty($contact['preferred_communication_method'])){ @@ -826,6 +840,21 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m ), ); CRM_Core_OptionGroup::lookupValues($specialValues[$moniker], $names); + + if (!empty($contact['contact_sub_type'])) { + $specialValues[$moniker]['contact_sub_type'] = implode(CRM_Core_DAO::VALUE_SEPARATOR, $contact['contact_sub_type']); + + // fix contact sub type label for contact with sub type + $subtypes = array(); + foreach ($contact['contact_sub_type'] as $key => $value) { + $subtypes[] = CRM_Utils_Array::retrieveValueRecursive($contactSubTypes, $value); + } + $contact['contact_sub_type_display'] = $specialValues[$moniker]['contact_sub_type_display'] = implode(', ', $subtypes); + } + + if (!empty($contact['communication_style'])) { + $specialValues[$moniker]['communication_style_id_display'] = $contact['communication_style']; + } } static $optionValueFields = array(); @@ -1332,6 +1361,9 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m foreach ($submitted as $key => $value) { if (substr($key, 0, 7) == 'custom_') { $fid = (int) substr($key, 7); + if (empty($cFields[$fid])) { + continue; + } $htmlType = $cFields[$fid]['attributes']['html_type']; switch ($htmlType) { case 'File': @@ -1574,4 +1606,3 @@ INNER JOIN civicrm_membership membership2 ON membership1.membership_type_id = m } } } -