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.
 
 
 
 
 
 

119 lines
4.8 KiB

# -*- coding: utf-8 -*-
"""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, TemplateView
from django.core.urlresolvers import reverse_lazy
from django.utils.translation import ugettext as _
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"""
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)
return HttpResponseRedirect(reverse_lazy('newsletter_mailinglist_unsubscribe_success'))
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'))
self.contact= contact
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()
#
ContactMailingStatus.objects.create(newsletter=self.object, contact=self.contact,
status=ContactMailingStatus.UNSUBSCRIPTION)
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)
if form.cleaned_data.get('get_announce'):
messages.add_message(request, messages.INFO, _(u'Настройки вашой подписки успешно сохранены'))
else:
contact.subscriber = False
contact.save()
return HttpResponseRedirect(reverse_lazy('newsletter_mailinglist_unsubscribe_success'))
class UnsubscriptionSuccess(TemplateView):
template_name = 'client/newsletters/unsubscribe_success.html'