CRM-15970 - Convert A/B test option-groups to simple arrays (backend)
authorTim Otten <totten@civicrm.org>
Wed, 18 Feb 2015 01:06:29 +0000 (17:06 -0800)
committerTim Otten <totten@civicrm.org>
Wed, 18 Feb 2015 03:13:13 +0000 (19:13 -0800)
CRM/Mailing/PseudoConstant.php
CRM/Upgrade/Incremental/sql/4.6.alpha7.mysql.tpl
tests/phpunit/api/v3/MailingABTest.php
xml/schema/Mailing/MailingAB.xml
xml/templates/civicrm_data.tpl

index 12e48891420339e7e99b044f063689ddc9413911..dad74ca0c8b8527d53cadba07ea32a19ce3c9eef 100644 (file)
  */
 class CRM_Mailing_PseudoConstant extends CRM_Core_PseudoConstant {
 
+  /**
+   * Status options for A/B tests.
+   * @var array
+   */
+  private static $abStatus;
+
+  /**
+   * Test criteria for A/B tests.
+   * @var array
+   */
+  private static $abTestCriteria;
+
+  /**
+   * Winner criteria for A/B tests.
+   * @var array
+   */
+  private static $abWinnerCriteria;
+
   /**
    * Mailing templates
    * @var array
@@ -62,6 +80,48 @@ class CRM_Mailing_PseudoConstant extends CRM_Core_PseudoConstant {
    */
   private static $defaultComponent;
 
+  /**
+   * @return array
+   */
+  public static function abStatus() {
+    if (!is_array(self::$abStatus)) {
+      self::$abStatus = array(
+        'Draft' => ts('Draft'),
+        'Testing' => ts('Testing'),
+        'Final' => ts('Final'),
+      );
+    }
+    return self::$abStatus;
+  }
+
+  /**
+   * @return array
+   */
+  public static function abTestCriteria() {
+    if (!is_array(self::$abTestCriteria)) {
+      self::$abTestCriteria = array(
+        'subject' => ts('Test different "Subject" lines'),
+        'from' => ts('Test different "From" lines'),
+        'full_email' => ts('Test entirely different emails'),
+      );
+    }
+    return self::$abTestCriteria;
+  }
+
+  /**
+   * @return array
+   */
+  public static function abWinnerCriteria() {
+    if (!is_array(self::$abWinnerCriteria)) {
+      self::$abWinnerCriteria  = array(
+        'open' => ts('Open'),
+        'unique_click' => ts('Total Unique Clicks'),
+        'link_click' => ts('Total Clicks on a particular link'),
+      );
+    }
+    return self::$abWinnerCriteria;
+  }
+
   /**
    * Get all the mailing components of a particular type.
    *
index 3109a258861a444fafbc299db334e8bcc8f992ae..b915ce303aae41036720671edc84ba58b2c55517 100644 (file)
@@ -3,9 +3,23 @@
 -- location_type_id should have default NULL, not invalid id 0
 ALTER TABLE civicrm_mailing CHANGE `location_type_id` `location_type_id` int(10) unsigned DEFAULT NULL COMMENT 'With email_selection_method, determines which email address to use';
 
-
 -- CRM-15970 - Track authorship of of A/B tests
 ALTER TABLE civicrm_mailing_abtest
   ADD COLUMN `created_id` int unsigned    COMMENT 'FK to Contact ID',
   ADD COLUMN `created_date` datetime    COMMENT 'When was this item created',
+  ADD COLUMN `testing_criteria` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
+  ADD COLUMN `winner_criteria` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
   ADD CONSTRAINT FK_civicrm_mailing_abtest_created_id FOREIGN KEY (`created_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE SET NULL;
+
+-- Move A/B test option-values into code
+DELETE FROM civicrm_option_group WHERE name IN ('mailing_ab_status', 'mailing_ab_testing_criteria', 'mailing_ab_winner_criteria');
+UPDATE civicrm_mailing_abtest SET testing_criteria = 'subject' WHERE testing_criteria_id = 1;
+UPDATE civicrm_mailing_abtest SET testing_criteria = 'from' WHERE testing_criteria_id = 2;
+UPDATE civicrm_mailing_abtest SET testing_criteria = 'full_email' WHERE testing_criteria_id = 3;
+UPDATE civicrm_mailing_abtest SET winner_criteria = 'open' WHERE winner_criteria_id = 1;
+UPDATE civicrm_mailing_abtest SET winner_criteria = 'unique_click' WHERE winner_criteria_id = 2;
+UPDATE civicrm_mailing_abtest SET winner_criteria = 'link_click' WHERE winner_criteria_id = 3;
+
+ALTER TABLE civicrm_mailing_abtest
+  DROP COLUMN `testing_criteria_id`,
+  DROP COLUMN `winner_criteria_id`;
index e317b60e47cf16bc0b394113d95e09a8e79beb63..17a81166cc5eed26ab67273af13df3f0ba464bd8 100755 (executable)
@@ -53,8 +53,8 @@ class api_v3_MailingABTest extends CiviUnitTestCase {
       'mailing_id_a' => $this->_mailingID_A,
       'mailing_id_b' => $this->_mailingID_B,
       'mailing_id_c' => $this->_mailingID_C,
-      'testing_criteria_id' => 1,
-      'winner_criteria_id' => 1,
+      'testing_criteria' => 'subject',
+      'winner_criteria' => 'open',
       'declare_winning_time' => '+2 days',
       'group_percentage' => 10,
     );
index e965535603aaeabb3e2171da40048e103c2c3cf3..8256aea135353b8f1bd4d2298c4170a8d30f976b 100644 (file)
@@ -31,8 +31,7 @@
     <title>Status</title>
     <comment>Status</comment>
     <pseudoconstant>
-      <optionGroupName>mailing_ab_status</optionGroupName>
-      <keyColumn>name</keyColumn>
+      <callback>CRM_Mailing_PseudoConstant::abStatus</callback>
     </pseudoconstant>
     <add>4.6</add>
   </field>
     <add>4.6</add>
   </field>
   <field>
-    <name>testing_criteria_id</name>
-    <type>int unsigned</type>
-    <title>Testing Criteria ID</title>
+    <name>testing_criteria</name>
+    <type>varchar</type>
+    <length>32</length>
+    <title>Testing Criteria</title>
     <pseudoconstant>
-      <optionGroupName>mailing_ab_testing_criteria</optionGroupName>
+      <callback>CRM_Mailing_PseudoConstant::abTestCriteria</callback>
     </pseudoconstant>
     <add>4.6</add>
   </field>
   <field>
-    <name>winner_criteria_id</name>
-    <type>int unsigned</type>
-    <title>Winner Criteria ID</title>
+    <name>winner_criteria</name>
+    <type>varchar</type>
+    <length>32</length>
+    <title>Winner Criteria</title>
     <pseudoconstant>
-      <optionGroupName>mailing_ab_winner_criteria</optionGroupName>
+      <callback>CRM_Mailing_PseudoConstant::abWinnerCriteria</callback>
     </pseudoconstant>
     <add>4.6</add>
   </field>
index def6d8e854db97b1edac271d194c6182ec20c28c..5bb218f0d445d9c723a30312568dbc2dd0d672a1 100644 (file)
@@ -208,10 +208,7 @@ VALUES
    ('name_badge'                    , '{ts escape="sql"}Name Badge Format{/ts}'                  , 1, 1, 0),
    ('communication_style'           , '{ts escape="sql"}Communication Style{/ts}'                , 1, 1, 0),
    ('msg_mode'                      , '{ts escape="sql"}Message Mode{/ts}'                       , 1, 1, 0),
-   ('contact_date_reminder_options' , '{ts escape="sql"}Contact Date Reminder Options{/ts}'      , 1, 1, 1),
-   ('mailing_ab_status'             , '{ts escape="sql"}Mailing A/B Status{/ts}'                 , 1, 1, 1),
-   ('mailing_ab_testing_criteria'   , '{ts escape="sql"}Mailing A/B Testing Criteria{/ts}'       , 1, 1, 1),
-   ('mailing_ab_winner_criteria'    , '{ts escape="sql"}Mailing A/B Testing Winner Criteria{/ts}', 1, 1, 1);
+   ('contact_date_reminder_options' , '{ts escape="sql"}Contact Date Reminder Options{/ts}'      , 1, 1, 1);
 
 SELECT @option_group_id_pcm            := max(id) from civicrm_option_group where name = 'preferred_communication_method';
 SELECT @option_group_id_act            := max(id) from civicrm_option_group where name = 'activity_type';
@@ -289,9 +286,6 @@ SELECT @option_group_id_name_badge := max(id) from civicrm_option_group where na
 SELECT @option_group_id_communication_style := max(id) from civicrm_option_group where name = 'communication_style';
 SELECT @option_group_id_msg_mode := max(id) from civicrm_option_group where name = 'msg_mode';
 SELECT @option_group_id_contactDateMode := max(id) from civicrm_option_group where name = 'contact_date_reminder_options';
-SELECT @option_group_id_mailingABStatus := max(id) from civicrm_option_group where name = 'mailing_ab_status';
-SELECT @option_group_id_mailingABCriteria := max(id) from civicrm_option_group where name = 'mailing_ab_testing_criteria';
-SELECT @option_group_id_mailingABWinnerCriteria := max(id) from civicrm_option_group where name = 'mailing_ab_winner_criteria';
 
 SELECT @contributeCompId := max(id) FROM civicrm_component where name = 'CiviContribute';
 SELECT @eventCompId      := max(id) FROM civicrm_component where name = 'CiviEvent';
@@ -951,22 +945,7 @@ VALUES
 
 -- Reminder Options for Contact Date Fields
 (@option_group_id_contactDateMode, '{ts escape="sql"}Actual date only{/ts}', '1', 'Actual date only', NULL, NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL),
-(@option_group_id_contactDateMode, '{ts escape="sql"}Each anniversary{/ts}', '2', 'Each anniversary', NULL, NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL),
-
--- Mailing A/B Status
-(@option_group_id_mailingABStatus, '{ts escape="sql"}Draft{/ts}', '1', 'Draft', NULL, NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL),
-(@option_group_id_mailingABStatus, '{ts escape="sql"}Testing{/ts}', '2', 'Testing', NULL, NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL),
-(@option_group_id_mailingABStatus, '{ts escape="sql"}Final{/ts}', '3', 'Final', NULL, NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL),
-
--- Mailing A/B Testing Winner Criteria
-(@option_group_id_mailingABWinnerCriteria, '{ts escape="sql"}Open{/ts}', '1', 'Open', NULL, NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL),
-(@option_group_id_mailingABWinnerCriteria, '{ts escape="sql"}Total Unique Clicks{/ts}', '2', 'Total Unique Clicks', NULL, NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL),
-(@option_group_id_mailingABWinnerCriteria, '{ts escape="sql"}Total Clicks on a particular link{/ts}', '3', 'Total Clicks on a particular link', NULL, NULL, 0, 3, NULL, 0, 1, 1, NULL, NULL),
-
--- Mailing A/B Testing Criteria
-(@option_group_id_mailingABCriteria, '{ts escape="sql"}Subject Lines {/ts}', '1', 'Subject Lines', NULL, NULL, 0, 1, NULL, 0, 1, 1, NULL, NULL),
-(@option_group_id_mailingABCriteria, '{ts escape="sql"}From Names {/ts}', '2', 'From Names', NULL, NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL),
-(@option_group_id_mailingABCriteria, '{ts escape="sql"}Two different Emails {/ts}', '3', 'Two different Emails ', NULL, NULL, 0, 3, NULL, 0, 1, 1, NULL, NULL);
+(@option_group_id_contactDateMode, '{ts escape="sql"}Each anniversary{/ts}', '2', 'Each anniversary', NULL, NULL, 0, 2, NULL, 0, 1, 1, NULL, NULL);
 
 -- financial accounts
 SELECT @opval := value FROM civicrm_option_value WHERE name = 'Revenue' and option_group_id = @option_group_id_fat;