You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

118 lines
4.7 KiB

"""Views for emencia.django.newsletter Mailing List"""
from django.template import RequestContext
from django.shortcuts import get_object_or_404
from django.shortcuts import render_to_response
from django.contrib import messages
from django.http import HttpResponseRedirect
from django.views.generic import DetailView
from emencia.django.newsletter.utils.tokens import untokenize
from emencia.django.newsletter.models import Newsletter, MailingList, ContactMailingStatus, Contact, ContactSettings
from emencia.django.newsletter.forms import SubscribeSettingsForm
def view_mailinglist_unsubscribe(request, slug, uidb36, token):
"""hard Unsubscribe a contact to a mailing list"""
# todo: 111
newsletter = get_object_or_404(Newsletter, slug=slug)
contact = untokenize(uidb36, token)
already_unsubscribed = contact in newsletter.mailing_list.unsubscribers.all()
if not already_unsubscribed:
newsletter.mailing_list.unsubscribers.add(contact)
newsletter.mailing_list.save()
already_unsubscribed = True
ContactMailingStatus.objects.create(newsletter=newsletter, contact=contact,
status=ContactMailingStatus.UNSUBSCRIPTION)
"""
if request.POST.get('email') and not already_unsubscribed:
newsletter.mailing_list.unsubscribers.add(contact)
newsletter.mailing_list.save()
already_unsubscribed = True
ContactMailingStatus.objects.create(newsletter=newsletter, contact=contact,
status=ContactMailingStatus.UNSUBSCRIPTION)
"""
return render_to_response('newsletter/mailing_list_unsubscribe.html',
{'email': contact.email,
'already_unsubscribed': already_unsubscribed},
context_instance=RequestContext(request))
def view_mailinglist_subscribe(request, form_class, mailing_list_id=None):
"""
A simple view that shows a form for subscription
for a mailing list(s).
"""
subscribed = False
mailing_list = None
if mailing_list_id:
mailing_list = get_object_or_404(MailingList, id=mailing_list_id)
if request.POST and not subscribed:
form = form_class(request.POST)
if form.is_valid():
form.save(mailing_list)
subscribed = True
else:
form = form_class()
return render_to_response('newsletter/mailing_list_subscribe.html',
{'subscribed': subscribed,
'mailing_list': mailing_list,
'form': form},
context_instance=RequestContext(request))
class UnsubscribeView(DetailView):
model = Newsletter
template_name = 'client/newsletters/unsubscribe_form.html'
def get_object(self, queryset=None):
return get_object_or_404(Newsletter, slug=self.kwargs.get('slug'))
def get_announce_form(self):
contact = untokenize(self.kwargs.get('uidb36'), self.kwargs.get('token'))
setting = contact.contactsettings
initial = {'email': contact.email}
initial['city'] = ','.join(['%s:%s'%(item.id, item.name) for item in set(setting.city.all())])
if setting.exponent_practicum or setting.organiser_practicum or setting.theme.exists():
initial['get_announce'] = True
# north america check
if setting.area.filter(id=SubscribeSettingsForm.NA_ID).exists():
initial['na_expo'] = True
# asia check
if setting.area.filter(id=SubscribeSettingsForm.ASIA_ID).exists():
initial['asia_expo'] = True
# europe check
if setting.area.filter(id=SubscribeSettingsForm.EUROPE_ID).exists():
initial['europe_expo'] = True
form = SubscribeSettingsForm(instance=setting, initial=initial)
return form
def get_context_data(self, **kwargs):
context = super(UnsubscribeView, self).get_context_data(**kwargs)
context['subscribe'] = self.get_announce_form()
return context
def unsubscription_handle(request):
if request.POST:
email = request.POST.get('email')
contact = get_object_or_404(Contact, email=email)
setting = contact.contactsettings
form = SubscribeSettingsForm(request.POST, instance=setting)
if form.is_valid():
setting = form.save(commit=False)
setting.contact = contact
setting.save()
form.save_m2m()
form.save_additional_fields(setting)
messages.add_message(request, messages.INFO, u'Настройки вашой подписки успешно сохранены')
return HttpResponseRedirect('/')