unsubscribe

remotes/origin/1203
Nazar Kotjuk 10 years ago
parent 4b9c6daaca
commit 71af4a0d1e
  1. 10
      accounts/views.py
  2. 8
      emencia/django/newsletter/mailer.py
  3. 2
      emencia/django/newsletter/templates/newsletter/newsletter_link_unsubscribe.html
  4. 17
      emencia/django/newsletter/urls/mailing_list.py
  5. 65
      emencia/django/newsletter/views/mailing_list.py
  6. 150
      templates/client/newsletters/unsubscribe_form.html

@ -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

@ -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:

@ -4,7 +4,7 @@
<tbody>
<tr>
<td style="vertical-align: top; padding: 15px 0 15px; text-align: center;">Чтобы отписаться от этой рассылки, перейдите <a href="{% if uidb36 and token %}http://{{ domain }}{% url 'newsletter_mailinglist_unsubscribe' slug=newsletter.slug uidb36=uidb36 token=token %}{% else %}#{% endif %}">по ссылке</a>.
<td style="vertical-align: top; padding: 15px 0 15px; color: #a2a2a2; text-align: left;">&copy; 2018 &mdash; 2013 <a href="#" style="color: #a2a2a2; text-decoration: none;">Expomap.ru</a></td>
<td style="vertical-align: top; padding: 15px 0 15px; color: #a2a2a2; text-align: left;">&copy; 2008 &mdash; 2015 <a href="#" style="color: #a2a2a2; text-decoration: none;">Expomap.ru</a></td>
</tr>
</tbody>
</table>

@ -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<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
url(r'^unsubscribe/hard/(?P<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
'view_mailinglist_unsubscribe',
name='newsletter_mailinglist_unsubscribe_hard'),
url(r'^unsubscribe/(?P<slug>[-\w]+)/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
UnsubscribeView.as_view(),
name='newsletter_mailinglist_unsubscribe'),
url(r'^unsubscribe/handle/$',
'unsubscription_handle',
name='newsletter_mailinglist_unsubscribe_handle'),
url(r'^subscribe/(?P<mailing_list_id>\d+)/',
'view_mailinglist_subscribe',
{'form_class': MailingListSubscriptionForm},

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

@ -0,0 +1,150 @@
{% extends 'client/base_catalog.html' %}
{% load static %}
{% load i18n %}
{% block page_title %}
<div class="page-title">
<h1>{% trans 'Отписаться' %}</h1>
</div>
{% endblock %}
{% block content_list %}
<div class="set-sect subscribe">
<header>{% trans 'настройка подписки' %}</header>
<div class="set-sect-body">
<form action="{% url 'newsletter_mailinglist_unsubscribe_handle' %}" method="post">{% csrf_token %}
<ul class="tabs clearfix">
<li class="active"><a class="icon-big-email" href="#">{% trans 'по e-mail' %}</a></li>
</ul>
<ul class="tabs-content">
<li class="active">
<div class="mf-announces clearfix">
<div class="mf-subj-checks-title">
<label class="check">
{{ subscribe.get_announce }}
Получать анонсы</label>
</div>
<div class="mf-announces-body">
<div class="mf-line mail" style="display: none;">
<div class="mf-field">{{ subscribe.email }}</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line country">
<div class="mf-field">
{{ subscribe.country }}
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line city">
<div class="mf-field">
{{ subscribe.city }}
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line subj">
<div class="mf-field">
{{ subscribe.theme }}
</div>
<div class="mf-msg"></div>
</div>
<div class="mf-line period">
<div class="mf-field">
{{ subscribe.periodic }}
</div>
<div class="mf-msg"></div>
</div>
</div>
</div>
<hr />
<div class="mf-line">
<label class="check">{{ subscribe.europe_expo }}{{ subscribe.europe_expo.label }}</label>
<label class="check">{{ subscribe.asia_expo }}{{ subscribe.asia_expo.label }}</label>
<label class="check">{{ subscribe.na_expo }}{{ subscribe.na_expo.label }}</label>
</div>
<hr />
<div class="mf-line">
<label class="check">{{ subscribe.exponent_practicum }}«Практикум экспонента»<i>(учимся эффективно участвовать в выставках и грамотно пиарить свою компанию на событиях)</i></label>
</div>
<div class="mf-line">
<label class="check">{{ subscribe.organiser_practicum }}«Практикум организатора событий» <i>(Создаем, наполняем и продвигаем собственные ивэнты)</i></label>
</div>
</li>
</ul>
<div class="mf-buttons-line">
<button type="submit" class="icon-save">{% trans 'сохранить' %}</button>
</div>
</form>
</div>
</div>
{% block scripts %}
<script>
$(function(){
$('#id_sub_set_country, #id_sub_set_theme')
.select2({
placeholder: $(this).attr('placeholder'),
width: '100%'
});
$('#id_sub_set_city').select2({
placeholder: $(this).attr('placeholder'),
multiple: true,
width: '100%',
ajax: {
url: "/city/get-city/",
dataType: "json",
quietMillis: 200,
data: function(term, page){
return {term: term,
page: page};
},
results: function (data) {
var results = [];
$.each(data, function(index, item){
results.push({
id: item.id,
text: item.label
});
});
return {results: results};
}
},
initSelection : function(element, callback) {
var data = [];
$(element.val().split(",")).each(function(i) {
var item = this.split(':');
data.push({
id: item[0],
text: item[1]
});
});
callback(data);
}
});
});
</script>
{% endblock %}
{% endblock %}
Loading…
Cancel
Save