From 71af4a0d1ea179aa812afbe93ee3ff9f5bce5ebc Mon Sep 17 00:00:00 2001 From: Nazar Kotjuk Date: Tue, 20 Oct 2015 11:56:24 +0300 Subject: [PATCH] unsubscribe --- accounts/views.py | 10 +- emencia/django/newsletter/mailer.py | 8 +- .../newsletter_link_unsubscribe.html | 2 +- .../django/newsletter/urls/mailing_list.py | 17 +- .../django/newsletter/views/mailing_list.py | 65 +++++++- .../client/newsletters/unsubscribe_form.html | 150 ++++++++++++++++++ 6 files changed, 236 insertions(+), 16 deletions(-) create mode 100644 templates/client/newsletters/unsubscribe_form.html diff --git a/accounts/views.py b/accounts/views.py index b7191dbc..739e65e8 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -3,6 +3,7 @@ import dateutil.relativedelta as rdelta import json, datetime import calendar as python_calendar from django.shortcuts import get_object_or_404 +from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect, HttpResponse, Http404, HttpResponseForbidden from django.contrib.auth.decorators import login_required from django.utils.translation import ugettext as _, get_language @@ -10,14 +11,14 @@ from django_messages.forms import SendForm from django.views.generic import TemplateView, FormView from functions.custom_views import ListView from sorl.thumbnail import get_thumbnail -from .forms import ChangePasswordForm, EmailAnnouncementForm, FeedFilterForm +from .forms import ChangePasswordForm, FeedFilterForm from company.forms import CreateCompanyForm from .models import User from .edit_forms import AvatarForm, NameForm, HomeForm, WorkForm, AboutCompanyForm, PhoneForm, EmailForm,\ WebPageForm, SocialForm, AboutForm from emencia.django.newsletter.forms import SubscribeSettingsForm from emencia.django.newsletter.models import Contact - +from meta.views import MetadataMixin class SettingsView(TemplateView): @@ -65,7 +66,7 @@ class SettingsView(TemplateView): return context -from django.core.urlresolvers import reverse + def save_announce_settings(request): if request.POST: @@ -87,6 +88,7 @@ def save_announce_settings(request): form.save_additional_fields(setting) else: errors = form.errors + # todo: subscribe settings error handle not_valid return HttpResponseRedirect(reverse('accounts_settings')) @@ -270,8 +272,6 @@ class ProfileCompanyView(TemplateView): - -from meta.views import MetadataMixin class UserView(MetadataMixin, TemplateView): """ display user information for another users diff --git a/emencia/django/newsletter/mailer.py b/emencia/django/newsletter/mailer.py index 53be1f93..3ec5f944 100644 --- a/emencia/django/newsletter/mailer.py +++ b/emencia/django/newsletter/mailer.py @@ -143,7 +143,7 @@ class NewsLetterSender(object): message[header] = value uidb36, token = tokenize(contact) - unsubscribe_link = 'http://' + Site.objects.get_current().domain + reverse('newsletter_mailinglist_unsubscribe', args=[self.newsletter.slug, uidb36, token]) + unsubscribe_link = 'http://' + Site.objects.get_current().domain + reverse('newsletter_mailinglist_unsubscribe_hard', args=[self.newsletter.slug, uidb36, token]) message['List-Unsubscribe'] = '<' + unsubscribe_link + '>' message['List-Id'] = str(self.newsletter.id) @@ -376,12 +376,14 @@ class Mailer(NewsLetterSender): send = False else: announce_context = None - try: - if send: + + if send: message = self.build_message(contact, announce_context) self.smtp.sendmail(self.newsletter.header_sender, contact.email, message.as_string()) + try: + pass except Exception, e: exception = e else: diff --git a/emencia/django/newsletter/templates/newsletter/newsletter_link_unsubscribe.html b/emencia/django/newsletter/templates/newsletter/newsletter_link_unsubscribe.html index b1a281a0..8cfc1522 100644 --- a/emencia/django/newsletter/templates/newsletter/newsletter_link_unsubscribe.html +++ b/emencia/django/newsletter/templates/newsletter/newsletter_link_unsubscribe.html @@ -4,7 +4,7 @@ Чтобы отписаться от этой рассылки, перейдите по ссылке. - © 2018 — 2013 Expomap.ru + © 2008 — 2015 Expomap.ru diff --git a/emencia/django/newsletter/urls/mailing_list.py b/emencia/django/newsletter/urls/mailing_list.py index 8508df92..f0716c82 100644 --- a/emencia/django/newsletter/urls/mailing_list.py +++ b/emencia/django/newsletter/urls/mailing_list.py @@ -1,14 +1,25 @@ """Urls for the emencia.django.newsletter Mailing List""" -from django.conf.urls.defaults import url -from django.conf.urls.defaults import patterns +from django.conf.urls import url +from django.conf.urls import patterns +from emencia.django.newsletter.views.mailing_list import UnsubscribeView from emencia.django.newsletter.forms import MailingListSubscriptionForm from emencia.django.newsletter.forms import AllMailingListSubscriptionForm urlpatterns = patterns('emencia.django.newsletter.views.mailing_list', - url(r'^unsubscribe/(?P[-\w]+)/(?P[0-9A-Za-z]+)-(?P.+)/$', + + url(r'^unsubscribe/hard/(?P[-\w]+)/(?P[0-9A-Za-z]+)-(?P.+)/$', 'view_mailinglist_unsubscribe', + name='newsletter_mailinglist_unsubscribe_hard'), + + url(r'^unsubscribe/(?P[-\w]+)/(?P[0-9A-Za-z]+)-(?P.+)/$', + UnsubscribeView.as_view(), name='newsletter_mailinglist_unsubscribe'), + + url(r'^unsubscribe/handle/$', + 'unsubscription_handle', + name='newsletter_mailinglist_unsubscribe_handle'), + url(r'^subscribe/(?P\d+)/', 'view_mailinglist_subscribe', {'form_class': MailingListSubscriptionForm}, diff --git a/emencia/django/newsletter/views/mailing_list.py b/emencia/django/newsletter/views/mailing_list.py index e8d2d323..8b4bbf29 100644 --- a/emencia/django/newsletter/views/mailing_list.py +++ b/emencia/django/newsletter/views/mailing_list.py @@ -2,15 +2,18 @@ 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 -from emencia.django.newsletter.models import MailingList -from emencia.django.newsletter.models import ContactMailingStatus +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): - """Unsubscribe a contact to a mailing list""" + """hard Unsubscribe a contact to a mailing list""" + # todo: 111 newsletter = get_object_or_404(Newsletter, slug=slug) contact = untokenize(uidb36, token) @@ -59,3 +62,57 @@ def view_mailinglist_subscribe(request, form_class, mailing_list_id=None): '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('/') \ No newline at end of file diff --git a/templates/client/newsletters/unsubscribe_form.html b/templates/client/newsletters/unsubscribe_form.html new file mode 100644 index 00000000..d900b00b --- /dev/null +++ b/templates/client/newsletters/unsubscribe_form.html @@ -0,0 +1,150 @@ +{% extends 'client/base_catalog.html' %} +{% load static %} +{% load i18n %} + + +{% block page_title %} +
+

{% trans 'Отписаться' %}

+
+{% endblock %} + +{% block content_list %} + + + + {% block scripts %} + + {% endblock %} +{% endblock %} \ No newline at end of file