}
//Pass the groups to be unsubscribed from through a hook.
- $group_ids = array_keys($groups);
- $base_group_ids = array_keys($base_groups);
- CRM_Utils_Hook::unsubscribeGroups('unsubscribe', $mailing_id, $contact_id, $group_ids, $base_group_ids);
+ $groupIds = array_keys($groups);
+ //include child groups if any
+ $groupIds = array_merge($groupIds, CRM_Contact_BAO_Group::getChildGroupIds($groupIds));
+
+ $baseGroupIds = array_keys($base_groups);
+ CRM_Utils_Hook::unsubscribeGroups('unsubscribe', $mailing_id, $contact_id, $groupIds, $baseGroupIds);
// Now we have a complete list of recipient groups. Filter out all
// those except smart groups, those that the contact belongs to and
// base groups from search based mailings.
-
$baseGroupClause = '';
- if (!empty($base_group_ids)) {
- $baseGroupClause = "OR $group.id IN(" . implode(', ', $base_group_ids) . ")";
+ if (!empty($baseGroupIds)) {
+ $baseGroupClause = "OR $group.id IN(" . implode(', ', $baseGroupIds) . ")";
}
$groupIdClause = '';
- if ($group_ids || $base_group_ids) {
- $groupIdClause = "AND $group.id IN (" . implode(', ', array_merge($group_ids, $base_group_ids)) . ")";
+ if ($groupIds || $baseGroupIds) {
+ $groupIdClause = "AND $group.id IN (" . implode(', ', array_merge($groupIds, $baseGroupIds)) . ")";
}
$do->query("
SELECT $group.id as group_id,
foreach ($groups as $group_id => $group_name) {
$notremoved = FALSE;
if ($group_name) {
- if (in_array($group_id, $base_group_ids)) {
+ if (in_array($group_id, $baseGroupIds)) {
list($total, $removed, $notremoved) = CRM_Contact_BAO_GroupContact::addContactsToGroup($contacts, $group_id, 'Email', 'Removed');
}
else {
if (array_key_exists('fields', $table)) {
foreach ($table['fields'] as $fieldName => $field) {
if (!empty($field['required']) || !empty($this->_params['fields'][$fieldName])) {
- if ($tableName == 'civicrm_email') {
+ if ($tableName == 'civicrm_email' || in_array('email', CRM_Utils_Array::collect('column', $this->_params['order_bys']))) {
$this->_emailField = TRUE;
}
if ($tableName == 'civicrm_phone') {
LEFT JOIN civicrm_case_contact
ON civicrm_case_contact.case_id = civicrm_case.id ";
- if ($this->_emailField) {
- $this->_from .= "
- LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
- ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id AND
- {$this->_aliases['civicrm_email']}.is_primary = 1 ";
- }
-
if ($this->_phoneField) {
$this->_from .= "
LEFT JOIN civicrm_phone {$this->_aliases['civicrm_phone']}
ON target_activity.contact_id = contact_civireport.id
{$this->_aclFrom}";
}
+
+ if ($this->_emailField) {
+ $this->_from .= "
+ LEFT JOIN civicrm_email {$this->_aliases['civicrm_email']}
+ ON {$this->_aliases['civicrm_contact']}.id = {$this->_aliases['civicrm_email']}.contact_id AND
+ {$this->_aliases['civicrm_email']}.is_primary = 1 ";
+ }
}
/**
$input = $ids = array();
civicrm_api3_verify_one_mandatory($params, NULL, array('contribution_recur_id', 'original_contribution_id'));
if (empty($params['original_contribution_id'])) {
+ // CRM-19873 call with test mode.
$params['original_contribution_id'] = civicrm_api3('contribution', 'getvalue', array(
'return' => 'id',
'contribution_recur_id' => $params['contribution_recur_id'],
+ 'contribution_test' => CRM_Core_DAO::getFieldValue('CRM_Contribute_DAO_ContributionRecur', $params['contribution_recur_id'], 'is_test'),
'options' => array('limit' => 1, 'sort' => 'id DESC'),
));
}
$this->quickCleanUpFinancialEntities();
}
+ /**
+ * CRM-19873 Test repattransaction if contribution_recur_id is a test.
+ */
+ public function testRepeatTransactionTestRecurId() {
+ $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array(
+ 'contact_id' => $this->_individualId,
+ 'frequency_interval' => '1',
+ 'amount' => '1.00',
+ 'contribution_status_id' => 1,
+ 'start_date' => '2017-01-01 00:00:00',
+ 'currency' => 'USD',
+ 'frequency_unit' => 'month',
+ 'payment_processor_id' => $this->paymentProcessorID,
+ 'is_test' => 1,
+ ));
+ $this->callAPISuccess('contribution', 'create', array_merge(
+ $this->_params,
+ array(
+ 'contribution_recur_id' => $contributionRecur['id'],
+ 'is_test' => 1,
+ ))
+ );
+
+ $repeatedContribution = $this->callAPISuccess('contribution', 'repeattransaction', array(
+ 'contribution_recur_id' => $contributionRecur['id'],
+ 'contribution_status_id' => 'Completed',
+ 'trxn_id' => uniqid(),
+ ));
+
+ $this->assertEquals($contributionRecur['values'][1]['is_test'], $repeatedContribution['values'][2]['is_test']);
+ $this->quickCleanUpFinancialEntities();
+ }
+
/**
* CRM-16397 test appropriate action if total amount has changed for single line items.
*/