"""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('/')