From 4b9c6daaca376b418d1a96a4c39b74b4b774a92c Mon Sep 17 00:00:00 2001 From: Nazar Kotjuk Date: Mon, 19 Oct 2015 17:09:52 +0300 Subject: [PATCH 1/4] add announce to profile settings --- accounts/urls.py | 3 +- accounts/views.py | 73 ++++++++++++++++++++---- emencia/django/newsletter/admin_forms.py | 1 + emencia/django/newsletter/forms.py | 67 ++++++++++++++++++---- emencia/django/newsletter/managers.py | 7 ++- templates/client/accounts/settings.html | 65 +++++++++++++++++++-- 6 files changed, 187 insertions(+), 29 deletions(-) diff --git a/accounts/urls.py b/accounts/urls.py index 2345511f..f3250df3 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -14,7 +14,7 @@ def test(request): urlpatterns = patterns('', url(r'^profile/$', login_required(ProfileView.as_view())), url(r'^profile/company/$', login_required(ProfileCompanyView.as_view())), - url(r'^profile/settings/$', login_required(SettingsView.as_view())), + url(r'^profile/settings/$', login_required(SettingsView.as_view()), name='accounts_settings'), url(r'^profile/calendar/remove/$', 'accounts.views.remove_from_calendar'), url(r'^profile/calendar/export/$', 'core.views.download_workbook'), url(r'^profile/calendar/$', login_required(CalendarView.as_view())), @@ -35,6 +35,7 @@ urlpatterns = patterns('', #url(r'^profile/messages/$', login_required(MessagesView.as_view())), # ajax + url(r'^profile/update/announce-settings/$', 'accounts.views.save_announce_settings', name='account_save_announce_settings'), url(r'^profile/update/name/$', login_required(NameView.as_view())), url(r'^profile/update/home/$', login_required(HomeView.as_view())), url(r'^profile/update/avatar/$', login_required(AvatarView.as_view())), diff --git a/accounts/views.py b/accounts/views.py index 87212446..b7191dbc 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -3,7 +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.http import HttpResponseRedirect, HttpResponse, Http404 +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 from django_messages.forms import SendForm @@ -27,21 +27,74 @@ class SettingsView(TemplateView): """ template_name = 'client/accounts/settings.html' - def get_context_data(self, **kwargs): - context = super(SettingsView, self).get_context_data(**kwargs) - context['change_password_form'] = ChangePasswordForm() + + def get_announce_form(self): user = self.request.user try: contact = user.contact_set.get(email=user.username) except Contact.DoesNotExist: contact = None + if not contact: + return SubscribeSettingsForm() + 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(SettingsView, self).get_context_data(**kwargs) + context['change_password_form'] = ChangePasswordForm() + context['subscribe'] = self.get_announce_form() - if contact: - context['subscribe'] = SubscribeSettingsForm(instance=contact.contactsettings) - else: - context['subscribe'] = SubscribeSettingsForm() return context + +from django.core.urlresolvers import reverse +def save_announce_settings(request): + + if request.POST: + user = request.user + email = request.POST.get('email') or user.username + + # check if setting subscription already exist + try: + contact, created = user.contact_set.get(email=email), False + except Contact.DoesNotExist: + contact, created = Contact.objects.create_contact(email, user, create_setting=True), True + 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) + else: + errors = form.errors + not_valid + + return HttpResponseRedirect(reverse('accounts_settings')) + + + + + def dates_range(date1, date2): delta = date2 - date1 dates = [] @@ -54,7 +107,7 @@ class CalendarView(TemplateView): display template with user calendar(one month) """ - template_name = 'accounts/calendar.html' + template_name = 'client/accounts/calendar.html' def get_context_data(self, **kwargs): """ @@ -155,7 +208,7 @@ class ProfileView(TemplateView): in template forms handles dynamically by ajax """ - template_name = 'accounts/new_profile.html' + template_name = 'client/accounts/new_profile.html' def get_context_data(self, **kwargs): context = super(ProfileView, self).get_context_data(**kwargs) diff --git a/emencia/django/newsletter/admin_forms.py b/emencia/django/newsletter/admin_forms.py index 9306c31b..7f4a50be 100644 --- a/emencia/django/newsletter/admin_forms.py +++ b/emencia/django/newsletter/admin_forms.py @@ -32,6 +32,7 @@ class ContactSettingsForm(forms.ModelForm): def save(self, commit=True): contactsettings = super(ContactSettingsForm, self).save(commit=False) + old_save_m2m = self.save_m2m if commit: contactsettings.save() contact = contactsettings.contact diff --git a/emencia/django/newsletter/forms.py b/emencia/django/newsletter/forms.py index 148336a0..8013c26a 100644 --- a/emencia/django/newsletter/forms.py +++ b/emencia/django/newsletter/forms.py @@ -249,12 +249,15 @@ class SubsribeAssideForm(AbstractSubscribeForm): class SubscribeSettingsForm(AbstractSubscribeForm): + NA_ID = 12 + ASIA_ID = 9 + EUROPE_ID = 4 city = forms.CharField( widget=forms.HiddenInput(attrs={'id': 'id_sub_set_city', 'placeholder': _(u'Город')}), required=False) get_announce = forms.BooleanField(required=False, label=_(u'Получать анонсы')) - moscow_expo = forms.BooleanField(required=False, label=_(u'Выставки Москвы')) - saint_expo = forms.BooleanField(required=False, label=_(u'Выставки Санкт-Петербурга')) + na_expo = forms.BooleanField(required=False, label=_(u'Выставки Северной Америки')) + asia_expo = forms.BooleanField(required=False, label=_(u'Выставки Азии')) europe_expo = forms.BooleanField(required=False, label=_(u'Выставки Европы')) def __init__(self, *args, **kwargs): @@ -262,17 +265,59 @@ class SubscribeSettingsForm(AbstractSubscribeForm): lang = translation.get_language() self.fields['theme'] = forms.MultipleChoiceField( choices=[(item.pk, get_by_lang(item, 'name', lang)) for item in SearchQuerySet().models(Theme).all()], + required=False, widget=forms.SelectMultiple(attrs={'placeholder': _(u'Тематики'), 'id': 'id_sub_set_theme'})) self.fields['country'] = forms.MultipleChoiceField( choices=[(item.pk, get_by_lang(item, 'name', lang)) for item in SearchQuerySet().models(Country).all()], required=False, widget=forms.SelectMultiple(attrs={'placeholder': _(u'Страны'), 'id': 'id_sub_set_country'})) - - -# do not watch -# cursor = db.cursor() -# sql = u""" -# INSERT IGNORE -# INTO newsletter_contact(first_name, email, activated, tester, creation_date, last_name) -# VALUES %s;""" % u','.join([u"('%s', '%s', '%s', '%s', NOW(), '')" % (row[1], row[0], str(activated).upper(), str(is_tester).upper()) for row in row_list]) -# cursor.execute(sql) \ No newline at end of file + + def save_additional_fields(self, settings): + get_announce = self.cleaned_data.get('get_announce') + na_expo = self.cleaned_data.get('na_expo') + asia_expo = self.cleaned_data.get('asia_expo') + europe_expo = self.cleaned_data.get('europe_expo') + if not get_announce: + settings.organiser_practicum = False + settings.exponent_practicum = False + settings.save() + settings.theme.clear() + if na_expo: + settings.area.add(Area.objects.get(id=self.NA_ID)) + else: + settings.area.remove(Area.objects.get(id=self.NA_ID)) + if asia_expo: + settings.area.add(Area.objects.get(id=self.ASIA_ID)) + else: + settings.area.remove(Area.objects.get(id=self.ASIA_ID)) + if europe_expo: + settings.area.add(Area.objects.get(id=self.EUROPE_ID)) + else: + settings.area.remove(Area.objects.get(id=self.EUROPE_ID)) + return settings + + def save(self, commit=True): + contactsettings = super(SubscribeSettingsForm, self).save(commit=False) + # Prepare a 'save_m2m' method for the form, + old_save_m2m = self.save_m2m + def save_m2m(): + old_save_m2m() + contactsettings.theme.clear() + for theme in self.cleaned_data['theme']: + contactsettings.theme.add(theme) + contactsettings.country.clear() + for country in self.cleaned_data['country']: + contactsettings.country.add(country) + for city in self.cleaned_data['city']: + contactsettings.city.add(city) + + self.save_m2m = save_m2m + + if commit: + contactsettings.save() + self.save_m2m() + + return contactsettings + + def clean_email(self): + return self.cleaned_data['email'] \ No newline at end of file diff --git a/emencia/django/newsletter/managers.py b/emencia/django/newsletter/managers.py index 30bcaef7..54caa7aa 100644 --- a/emencia/django/newsletter/managers.py +++ b/emencia/django/newsletter/managers.py @@ -39,11 +39,16 @@ class ContactManager(models.Manager): contact.save() return contact - def create_contact(self, email, user=None): + def create_contact(self, email, user=None, create_setting=False): contact = self.model(user=user, email=email) if user: contact.first_name = user.first_name contact.last_name = user.last_name contact.save() contact.send_activation() + if create_setting: + from .models import ContactSettings + sett = ContactSettings(contact=contact, exponent_practicum=False, organiser_practicum=False) + sett.save() + return contact \ No newline at end of file diff --git a/templates/client/accounts/settings.html b/templates/client/accounts/settings.html index c183b6d2..492e3ede 100644 --- a/templates/client/accounts/settings.html +++ b/templates/client/accounts/settings.html @@ -1,4 +1,4 @@ -{% extends 'base_catalog.html' %} +{% extends 'client/base_catalog.html' %} {% load static %} {% load i18n %} @@ -115,7 +115,7 @@
{% trans 'настройка подписки' %}
-
+ {% csrf_token %}
  • {% trans 'по e-mail' %}
  • @@ -127,7 +127,7 @@
    @@ -171,9 +171,10 @@
    - - + + +

    @@ -196,4 +197,56 @@
-{% endblock %} \ No newline at end of file + {% block scripts %} + + {% endblock %} +{% endblock %} + From 71af4a0d1ea179aa812afbe93ee3ff9f5bce5ebc Mon Sep 17 00:00:00 2001 From: Nazar Kotjuk Date: Tue, 20 Oct 2015 11:56:24 +0300 Subject: [PATCH 2/4] 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 From 9c902c730fd93672e76a1f8ce146daf79ed82c1a Mon Sep 17 00:00:00 2001 From: Nazar Kotjuk Date: Tue, 20 Oct 2015 15:09:11 +0300 Subject: [PATCH 3/4] unsubscription final. Subscription popup --- .../django/newsletter/urls/mailing_list.py | 6 +- emencia/django/newsletter/urls/tracking.py | 4 +- .../django/newsletter/views/mailing_list.py | 32 ++++----- .../admin/newsletters/newsletter_list.html | 4 ++ templates/client/base_catalog.html | 1 + .../client/newsletters/unsubscribe_form.html | 6 +- .../newsletters/unsubscribe_success.html | 41 +++++++++++ .../client/popups/announce_subscription.html | 71 +++++++++++++++++++ 8 files changed, 142 insertions(+), 23 deletions(-) create mode 100644 templates/client/newsletters/unsubscribe_success.html create mode 100644 templates/client/popups/announce_subscription.html diff --git a/emencia/django/newsletter/urls/mailing_list.py b/emencia/django/newsletter/urls/mailing_list.py index f0716c82..a42238b6 100644 --- a/emencia/django/newsletter/urls/mailing_list.py +++ b/emencia/django/newsletter/urls/mailing_list.py @@ -1,7 +1,7 @@ """Urls for the emencia.django.newsletter Mailing List""" 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.views.mailing_list import UnsubscribeView, UnsubscriptionSuccess from emencia.django.newsletter.forms import MailingListSubscriptionForm from emencia.django.newsletter.forms import AllMailingListSubscriptionForm @@ -20,6 +20,10 @@ urlpatterns = patterns('emencia.django.newsletter.views.mailing_list', 'unsubscription_handle', name='newsletter_mailinglist_unsubscribe_handle'), + url(r'^unsubscribe/success/$', + UnsubscriptionSuccess.as_view(), + name='newsletter_mailinglist_unsubscribe_success'), + url(r'^subscribe/(?P\d+)/', 'view_mailinglist_subscribe', {'form_class': MailingListSubscriptionForm}, diff --git a/emencia/django/newsletter/urls/tracking.py b/emencia/django/newsletter/urls/tracking.py index aca0a49d..5aae9e5e 100644 --- a/emencia/django/newsletter/urls/tracking.py +++ b/emencia/django/newsletter/urls/tracking.py @@ -1,6 +1,6 @@ """Urls for the emencia.django.newsletter Tracking""" -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 urlpatterns = patterns('emencia.django.newsletter.views.tracking', url(r'^newsletter/(?P[-\w]+)/(?P[0-9A-Za-z]+)-(?P.+)\.(?Ppng|gif|jpg)$', diff --git a/emencia/django/newsletter/views/mailing_list.py b/emencia/django/newsletter/views/mailing_list.py index 8b4bbf29..2a1bd1c6 100644 --- a/emencia/django/newsletter/views/mailing_list.py +++ b/emencia/django/newsletter/views/mailing_list.py @@ -1,10 +1,12 @@ +# -*- 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 +from django.views.generic import DetailView, TemplateView +from django.core.urlresolvers import reverse_lazy from emencia.django.newsletter.utils.tokens import untokenize from emencia.django.newsletter.models import Newsletter, MailingList, ContactMailingStatus, Contact, ContactSettings @@ -13,7 +15,6 @@ 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) @@ -24,20 +25,8 @@ def view_mailinglist_unsubscribe(request, slug, uidb36, token): 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)) + return HttpResponseRedirect(reverse_lazy('newsletter_mailinglist_unsubscribe_success')) def view_mailinglist_subscribe(request, form_class, mailing_list_id=None): """ @@ -74,6 +63,7 @@ class UnsubscribeView(DetailView): 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} @@ -97,6 +87,9 @@ class UnsubscribeView(DetailView): 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 @@ -114,5 +107,10 @@ def unsubscription_handle(request): 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 + if form.cleaned_data.get('get_announce'): + messages.add_message(request, messages.INFO, u'Настройки вашой подписки успешно сохранены') + + return HttpResponseRedirect(reverse_lazy('newsletter_mailinglist_unsubscribe_success')) + +class UnsubscriptionSuccess(TemplateView): + template_name = 'client/newsletters/unsubscribe_success.html' diff --git a/templates/admin/newsletters/newsletter_list.html b/templates/admin/newsletters/newsletter_list.html index 4f8cc05f..6f7d712a 100644 --- a/templates/admin/newsletters/newsletter_list.html +++ b/templates/admin/newsletters/newsletter_list.html @@ -18,6 +18,8 @@ Дата отправки     +   +   @@ -29,6 +31,8 @@ {{ item.sending_date|date:"Y-m-d H:i" }} тест Изменить + История + {% if item.status == item.SENT or item.status == item.CANCELED %}Статистика{% endif %} {% endfor %} diff --git a/templates/client/base_catalog.html b/templates/client/base_catalog.html index 6eaf28e5..ac80542d 100644 --- a/templates/client/base_catalog.html +++ b/templates/client/base_catalog.html @@ -96,4 +96,5 @@ {% block popup %} {% include 'client/popups/announces.html' %} + {% include 'client/popups/announce_subscription.html' %} {% endblock %} diff --git a/templates/client/newsletters/unsubscribe_form.html b/templates/client/newsletters/unsubscribe_form.html index d900b00b..f16be816 100644 --- a/templates/client/newsletters/unsubscribe_form.html +++ b/templates/client/newsletters/unsubscribe_form.html @@ -27,7 +27,7 @@
+ {{ subscribe.get_announce.label }}
@@ -78,11 +78,11 @@
- +
- +
diff --git a/templates/client/newsletters/unsubscribe_success.html b/templates/client/newsletters/unsubscribe_success.html new file mode 100644 index 00000000..b6f8b154 --- /dev/null +++ b/templates/client/newsletters/unsubscribe_success.html @@ -0,0 +1,41 @@ +{% extends 'client/base_catalog.html' %} +{% load static %} +{% load i18n %} + + +{% block page_body %} + +
+
+
+ {% if messages %} +
+
+ {% trans 'Параметры вашей подписки изменены.' %} +
+ +
+ {% else %} +
+
+ {% trans 'Вы успешно отписаны' %} +
+ +
+ +
+
+
+ {% trans 'Мы очень сожалеем, что потеряли такого ценного подписчика как Вы! =( Но будем рады видеть Вас снова!' %} +
+
+ +
+ {% endif %} + + +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/templates/client/popups/announce_subscription.html b/templates/client/popups/announce_subscription.html new file mode 100644 index 00000000..c6e1a575 --- /dev/null +++ b/templates/client/popups/announce_subscription.html @@ -0,0 +1,71 @@ +{% load static %} +{% load i18n %} +{% if not request.COOKIES.subscribe_popup %} + + +{% endif %} \ No newline at end of file From cd2022b76f50d6ae43a4d133ba85d684785f1a51 Mon Sep 17 00:00:00 2001 From: Nazar Kotjuk Date: Tue, 20 Oct 2015 15:16:59 +0300 Subject: [PATCH 4/4] small fix --- accounts/views.py | 2 +- emencia/django/newsletter/mailer.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/accounts/views.py b/accounts/views.py index 739e65e8..95bf56bc 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -89,7 +89,7 @@ def save_announce_settings(request): else: errors = form.errors # todo: subscribe settings error handle - not_valid + #not_valid return HttpResponseRedirect(reverse('accounts_settings')) diff --git a/emencia/django/newsletter/mailer.py b/emencia/django/newsletter/mailer.py index 3ec5f944..b17669a5 100644 --- a/emencia/django/newsletter/mailer.py +++ b/emencia/django/newsletter/mailer.py @@ -377,13 +377,13 @@ class Mailer(NewsLetterSender): else: announce_context = None - if send: + + try: + 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: