|
|
|
|
@ -1,11 +1,15 @@
|
|
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
from django.utils.translation import ugettext_lazy as _, get_language
|
|
|
|
|
import hashlib
|
|
|
|
|
from django import forms
|
|
|
|
|
from django.conf import settings
|
|
|
|
|
from mailchimp3 import MailChimp
|
|
|
|
|
|
|
|
|
|
client = MailChimp(settings.MAILCHIMP_USERNAME, settings.MAILCHIMP_API_KEY)
|
|
|
|
|
field_names = [_('First Name'), _('Last Name')]
|
|
|
|
|
newsletter_client = MailChimp(settings.MAILCHIMP_API_KEY, settings.MAILCHIMP_USERNAME)
|
|
|
|
|
newsletter_field_names = {
|
|
|
|
|
'FNAME': _('Vorname'),
|
|
|
|
|
'LNAME': _('Nachname'),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class NewsletterSubscriptionForm(forms.Form):
|
|
|
|
|
@ -14,13 +18,13 @@ class NewsletterSubscriptionForm(forms.Form):
|
|
|
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
|
super(NewsletterSubscriptionForm, self).__init__(*args, **kwargs)
|
|
|
|
|
merge_fields = client.lists.merge_fields.all(list_id=settings.MAILCHIMP_LIST_ID, get_all=True)
|
|
|
|
|
merge_fields = newsletter_client.lists.merge_fields.all(list_id=settings.MAILCHIMP_LIST_ID, get_all=True)
|
|
|
|
|
for field in merge_fields['merge_fields']:
|
|
|
|
|
if field['type'] == 'text':
|
|
|
|
|
self.fields[field['tag']] = forms.CharField(
|
|
|
|
|
label=field['name'], required=field['required'],
|
|
|
|
|
widget=forms.TextInput(
|
|
|
|
|
attrs={'placeholder': _(field['name'])}
|
|
|
|
|
attrs={'placeholder': newsletter_field_names[field['tag']]}
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
@ -31,12 +35,17 @@ class NewsletterSubscriptionForm(forms.Form):
|
|
|
|
|
merge_data.pop('email')
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
client.lists.members.create(settings.MAILCHIMP_LIST_ID, {
|
|
|
|
|
'email_address': cleaned_data['email'],
|
|
|
|
|
'language': get_language(),
|
|
|
|
|
'status': 'subscribed',
|
|
|
|
|
'merge_fields': merge_data,
|
|
|
|
|
})
|
|
|
|
|
newsletter_client.lists.members.create_or_update(
|
|
|
|
|
settings.MAILCHIMP_LIST_ID,
|
|
|
|
|
hashlib.md5(cleaned_data['email'].lower().encode('utf-8')).hexdigest(),
|
|
|
|
|
{
|
|
|
|
|
'email_address': cleaned_data['email'],
|
|
|
|
|
'language': get_language(),
|
|
|
|
|
'status_if_new': 'pending',
|
|
|
|
|
'status': 'pending',
|
|
|
|
|
'merge_fields': merge_data,
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
except Exception as err:
|
|
|
|
|
json_err = err.response.json()
|
|
|
|
|
if json_err['title'] == 'Member Exists':
|
|
|
|
|
|