Merge pull request #9767 from monishdeb/CRM-19957
authorEileen McNaughton <eileen@mcnaughty.com>
Fri, 3 Feb 2017 01:25:10 +0000 (14:25 +1300)
committerGitHub <noreply@github.com>
Fri, 3 Feb 2017 01:25:10 +0000 (14:25 +1300)
CRM-19957: DB Syntax Error on all Search Form submission

CRM/Mailing/Event/BAO/Unsubscribe.php
CRM/Report/Form/ActivitySummary.php
api/v3/Contribution.php
tests/phpunit/api/v3/ContributionTest.php

index 461ba9bd78b6fe947339c365fc35e975ad62efbb..01ab5a1751242ca2a820cadafdb7a9c08c014b97 100644 (file)
@@ -216,21 +216,23 @@ WHERE  email = %2
     }
 
     //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,
@@ -267,7 +269,7 @@ WHERE  email = %2
     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 {
index e1a1049a90777b522a4579026fd9ecf26098ea57..4ce9fb3fc8b31b5db295fe6971c3a47f92485137 100644 (file)
@@ -251,7 +251,7 @@ class CRM_Report_Form_ActivitySummary extends CRM_Report_Form {
       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') {
@@ -337,13 +337,6 @@ class CRM_Report_Form_ActivitySummary extends CRM_Report_Form {
                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']}
@@ -361,6 +354,13 @@ class CRM_Report_Form_ActivitySummary extends CRM_Report_Form {
                      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 ";
+    }
   }
 
   /**
index 8f1363bb4055e4ac3db24d288a2e2c7c53ba148d..897fb019993ce7eb7fc543bc84e44f96494a5c3c 100644 (file)
@@ -602,9 +602,11 @@ function civicrm_api3_contribution_repeattransaction(&$params) {
   $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'),
     ));
   }
index 7d7795f73d14d2f6948e65e66f2d4fc1ceddd4d6..2320f688c9fb1931a2df84c1a008b9171ad941cb 100644 (file)
@@ -2062,6 +2062,39 @@ class api_v3_ContributionTest extends CiviUnitTestCase {
     $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.
    */