dev/core#1622 Fix unsubscribe when loading the unsubscribe form on a different locale...
authorSeamus Lee <seamuslee001@gmail.com>
Wed, 26 Feb 2020 21:00:57 +0000 (08:00 +1100)
committerSeamus Lee <seamuslee001@gmail.com>
Thu, 27 Feb 2020 06:23:44 +0000 (17:23 +1100)
Add in comments as per request from Eileen

CRM/Mailing/Event/BAO/Unsubscribe.php
tests/phpunit/CRM/Mailing/MailingSystemTest.php

index 3b80d14980d27b631d0e89b036ca581b29190278..90c9601dcd484cbe386fdcd9c33cabfd5495e06f 100644 (file)
@@ -128,10 +128,8 @@ WHERE  email = %2
     $mailing_type = CRM_Core_DAO::getFieldValue('CRM_Mailing_DAO_Mailing', $mailing_id, 'mailing_type', 'id');
 
     $groupObject = new CRM_Contact_BAO_Group();
-    $groupTableName = $groupObject->getTableName();
 
     $mailingObject = new CRM_Mailing_BAO_Mailing();
-    $mailingTableName = $mailingObject->getTableName();
 
     // We need a mailing id that points to the mailing that defined the recipients.
     // This is usually just the passed-in mailing_id, however in the case of AB
@@ -175,7 +173,8 @@ WHERE  email = %2
     $mailings = [];
 
     while ($do->fetch()) {
-      if ($do->entity_table === $groupTableName) {
+      // @todo this is should be a temporary measure until we stop storing the translated table name in the database
+      if (substr($do->entity_table, 0, 13) === 'civicrm_group') {
         if ($do->group_type == 'Base') {
           $base_groups[$do->entity_id] = NULL;
         }
@@ -183,7 +182,8 @@ WHERE  email = %2
           $groups[$do->entity_id] = NULL;
         }
       }
-      elseif ($do->entity_table === $mailingTableName) {
+      elseif (substr($do->entity_table, 0, 15) === 'civicrm_mailing') {
+        // @todo this is should be a temporary measure until we stop storing the translated table name in the database
         $mailings[] = $do->entity_id;
       }
     }
@@ -202,10 +202,12 @@ WHERE  email = %2
       $mailings = [];
 
       while ($do->fetch()) {
-        if ($do->entity_table === $groupTableName) {
+        // @todo this is should be a temporary measure until we stop storing the translated table name in the database
+        if (substr($do->entity_table, 0, 13) === 'civicrm_group') {
           $groups[$do->entity_id] = TRUE;
         }
-        elseif ($do->entity_table === $mailing) {
+        elseif (substr($do->entity_table, 0, 15) === 'civicrm_mailing') {
+          // @todo this is should be a temporary measure until we stop storing the translated table name in the database
           $mailings[] = $do->entity_id;
         }
       }
index d13347ee018bdfc17b552ac05a259d9745c505cb..b1846cee7eea0c572106079a4e193aa39d5852ab 100644 (file)
@@ -160,6 +160,7 @@ class CRM_Mailing_MailingSystemTest extends CRM_Mailing_BaseMailingSystemTest {
     // (If this behaviour ever changes we throw an exception.)
     if ($isMultiLingual) {
       $this->enableMultilingual();
+      CRM_Core_I18n_Schema::addLocale('fr_FR', 'en_US');
     }
     $max_group_id = CRM_Core_DAO::singleValueQuery("SELECT MAX(id) FROM civicrm_group");
     $max_mailing_id = 0;
@@ -295,6 +296,31 @@ class CRM_Mailing_MailingSystemTest extends CRM_Mailing_BaseMailingSystemTest {
     $this->assertNotEmpty($groups, "We should have received an array.");
     $this->assertEquals([$group_1], array_keys($groups),
       "We should have received an array with our group 1 in it.");
+
+    if ($isMultiLingual) {
+      global $dbLocale;
+      $dbLocale = '_fr_FR';
+      // Now test unsubscribe groups.
+      $groups = CRM_Mailing_Event_BAO_Unsubscribe::unsub_from_mailing(
+        $matches[1],
+        $matches[2],
+        $matches[3],
+        TRUE
+      );
+
+      // We expect that our group_1 was found.
+      $this->assertEquals(['groups' => [$group_1], 'baseGroups' => []], $found);
+
+      // We *should* get an array with just our $group_1 since this is the only group
+      // that we have included.
+      // $group_2 was only used to exclude people.
+      // $group_3 has nothing to do with this mailing and should not be there.
+      $this->assertNotEmpty($groups, "We should have received an array.");
+      $this->assertEquals([$group_1], array_keys($groups),
+        "We should have received an array with our group 1 in it.");
+      global $dbLocale;
+      $dbLocale = '_en_US';
+    }
   }
 
 }