Browse Source

Fix bug saving Mailchimp integration settings in wagtail admin (#444)

Vince Salvino 3 years ago
parent
commit
e100cff506

+ 5 - 10
coderedcms/models/integration_models.py

@@ -66,7 +66,7 @@ class MailchimpSubscriberIntegrationWidget(Input):
         return json.dumps({})
 
     def get_selectable_mailchimp_lists(self, library):
-        selectable_lists = [('', 'Please select one of your Mailchimp Lists.')]
+        selectable_lists = [('', '--- Select a Mailchimp List ---')]
         for k, v in library.items():
             selectable_lists.append((k, v['name']))
 
@@ -110,16 +110,10 @@ class MailchimpSubscriberIntegration(models.Model):
     def integration_operation(self, instance, **kwargs):
         mailchimp = MailchimpApi()
         if mailchimp.is_active:
-            rendered_dictionary = self.render_dictionary(
-                self.format_form_submission(kwargs['form_submission']))
+            submission_dict = kwargs['form_submission'].get_data()
+            rendered_dictionary = self.render_dictionary(submission_dict)
             mailchimp.add_user_to_list(list_id=self.get_list_id(), data=rendered_dictionary)
 
-    def format_form_submission(self, form_submission):
-        formatted_form_data = {}
-        for k, v in literal_eval(form_submission.form_data).items():
-            formatted_form_data[k.replace('-', '_')] = v
-        return formatted_form_data
-
     def get_data(self):
         return json.loads(self.subscriber_json_data)
 
@@ -148,7 +142,8 @@ class MailchimpSubscriberIntegration(models.Model):
                     'interests': self.combine_interest_categories(),
                     'status': 'subscribed',
                 }
-            ]
+            ],
+            'update_existing': True
         })
 
         rendered_dictionary = Template(

+ 9 - 5
coderedcms/templates/coderedcms/formfields/mailchimp/subscriber_integration_js.html

@@ -18,7 +18,7 @@
         if(list_id_as_str != ""){
 
             if(mailchimp_master_library[list_id_as_str]['merge_fields'].length > 0){
-                merge_field_html = '<br /><div><strong>MERGE FIELDS</h3></div>';
+                merge_field_html = '<br /><h3>MERGE FIELDS</h3>';
             }
 
             for(var i=0; i < mailchimp_master_library[list_id_as_str]['merge_fields'].length; i++){
@@ -27,7 +27,7 @@
                 if(subscriber_data['merge_fields'].hasOwnProperty(merge_field['tag'])){
                     merge_field_html += '<div class="input"><input type="text" name="' + merge_field['tag'] + '"" value="' + subscriber_data['merge_fields'][merge_field['tag']] + '"></div>';
                 } else {
-                    merge_field_html += '<div class="input"><input type="text" name="' + merge_field['tag'] + '"" value=""></div>';                
+                    merge_field_html += '<div class="input"><input type="text" name="' + merge_field['tag'] + '"" value=""></div>';
                 }
                 merge_field_html += "<br />";
             }
@@ -50,7 +50,7 @@
                     if(interest_category_library[interest_category_id]['interests'].hasOwnProperty(interest_id)){
                         return interest_category_library[interest_category_id]['interests'][interest_id]
                     }
-                } 
+                }
             }
             return false;
         }
@@ -59,7 +59,7 @@
 
         if(list_id_as_str != ""){
             if(mailchimp_master_library[list_id_as_str]['interest_categories'].length > 0){
-                interest_category_field_html += '<br /><div><strong>GROUPS</strong></div>';
+                interest_category_field_html += '<h3>GROUPS</h3><p>Add subscriber to these groups:</p>';
             }
 
             for(var i in mailchimp_master_library[list_id_as_str]['interest_categories']){
@@ -89,7 +89,11 @@
     }
 
     $("select[name='list-selection-{{ widget_name }}']").change(function(){
-        populate_fields_for_{{ widget_js_name }}($(this).val());
+        var list_id = $(this).val();
+        populate_fields_for_{{ widget_js_name }}(list_id);
+        var subscriber_data = get_subscriber_json_data_for_{{ widget_js_name }}();
+        subscriber_data['list_id'] = list_id
+        set_subscriber_json_data_for_{{ widget_js_name }}(subscriber_data);
     });
 
     $("div[name='merge-fields-{{ widget_name }}']").on('input', 'input', function(){

+ 1 - 0
docs/releases/index.rst

@@ -18,6 +18,7 @@ CodeRed CMS follows the ``[major].[minor].[maintenance]`` versioning scheme.
     :maxdepth: 1
 
     v0.23.0
+    v0.22.1
     v0.22.0
     v0.21.1
     v0.21.0

+ 11 - 0
docs/releases/v0.22.1.rst

@@ -0,0 +1,11 @@
+v0.22.1 release notes
+=====================
+
+
+Bug fixes
+---------
+
+* Fix issue saving Mailchimp integration settings in the Wagtail Admin.
+
+* Always update Mailchimp subscriber information when subscriber already exists
+  on list.